SERVER

[SERVER] GitLab CI CD / oracle cloud / docker

2022. 12. 2. 14:35
목차
  1. 프로젝트 구조 : 
  2. 작업 진행  : 
  3. 프로젝트 생성 및 초기 세팅 :
  4. .gitlab-ci.yml  :
  5. GitLab Runner 세팅 :
  6. 도커 설치 및 테스트 :
  7. SSH 설정   :   Window 11 기준 
  8. Dockerfile : 
728x90
반응형
 

The One DevOps Platform

From planning to production, bring teams together in one application. Ship secure code more efficiently to deliver value faster.

about.gitlab.com

 

GitLab :  

 

중앙 서버에서 Git 저장소를 관리하며,  CI / CD 를 통해 DevOps 환경을 구축할 수 있게 도와준다.

 

 

CI / CD 는 지속적 통합, 지속적 서비스 제공, 지속적 배포를 말한다.

 

 

😒 개발팀에서는 보통 메인 리포지토리에 주기적으로 머지 또는 push 한다. 

 

CI 원칙을 통한 MERGE → 자동으로 팀에서 만든 CI 스크립트를 통해 빌드 및 유닛 테스트 및 기타 등등을 스크립트등을 통해 실행된다. 

 

이러한 과정에서 통과 싸인이 나온다면 머지.

아닐 경우 배포한 사용자에게 알림.

 

실패 혹은 수정 시, 알림이 온다.

 

일반적으로는 애플리케이션 통합과 테스트에서부터 제공 및 배포에 이르며, CI / CD 파이프라인이라 부른다.

 

CI CD 배포 데모를 보며 깃랩을 통해 자동 배포 설정과 배포 확인을 해보려 한다. 

 

 

아래는 java와 spring boot 프로젝트를 .gitlab-ci.yml 을 적용한 예시이다. 

 

GitLab-examples / spring-gitlab-cf-deploy-demo · GitLab

GitLab.com

gitlab.com

 

 

 

프로젝트 구조 : 

 

 

 

 

작업 진행  : 

  1. CODE MERGE 및 수정 후 COMMIT - PUSH 연계
  2. CI / CD  
    • build - jar
    • test - test
    • package - docker image push
    • deploy -  원격지 Server에 Docker Container로 spring boot app 배포

 

최종 결과 : 

코드 수정사항 반영 확인


프로젝트 생성 및 초기 세팅 :

더보기

 

프로젝트를 등록한다.

 

 

 

 

 

30일 무료 스타터 버전이다. 

 

 

 

 

 

 

저장소를 클론하고 테스트할 연습 프로젝트를 올리도록 한다. 

 

 

 

 

 

실행 및 어떤 화면이 나올 지 미리 만들어본다. 

 

 

 

테스트할 클라우드 서버에도 올려본다. 

 

 

 

 

깃랩에 올라가는지도 테스트 해본다.

 

 

 

.gitlab-ci.yml  :

더보기

repository - files - new file - 화면에서 다음과 같은 템플릿을 지정한다. 

 

 

 

생성 했다면 다음과 같이 CI 파이프라인이 실행되는 지 테스트 할 수 있다.

 

 

 

 

.gitlab-ci.yml

stages:
  - build
  - test
  - package
  - deployToServer

build:
  image: gradle:7.1.0-jdk11
  stage: build
  before_script:
    - chmod +x ./gradlew
  script:
    - ./gradlew clean
    - ./gradlew build
  artifacts:
    paths:
      - build/libs/*.jar

test:
  image: gradle:7.1.0-jdk11
  stage: test
  before_script:
    - chmod +x ./gradlew
  script:
    - echo gradlew test
    - ./gradlew test

package:
  # Use the official docker image.
  image: docker:latest
  stage: package
  variables:
    IMAGE_NAME: jm/jmc
  services:
    - docker:dind
  before_script:
    - echo docker login.....
    - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW
  # Default branch leaves tag empty (= latest tag)
  # All other branches are tagged with the escaped branch name (commit ref slug)
  script:
    - echo docker build...
    - docker build -t $IMAGE_NAME .
    - echo docker push...
    - docker push $IMAGE_NAME
  after_script:
    - echo docker logout...
    - docker logout
    # Run this job in a branch where a Dockerfile exists
  only:
    - main  # main 브랜치만 감지

# server ssh deploy
deployToServer:
  stage: deployToServer
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )'
    - eval $(ssh-agent -s) # ssh-agent 백그라운드 실행
    - echo "$SSH_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan $FTP_HOSTNAME >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts

  script:
    # ssh를 이용한 원격 파일 업로드.
    - echo $USER@$FTP_HOSTNAME "docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW"
    - ssh $USER@$FTP_HOSTNAME "docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW"
    - ssh $USER@$FTP_HOSTNAME "docker pull $IMAGE_NAME"
    - ssh $USER@$FTP_HOSTNAME "docker run -d --restart=unless-stopped -p 8080:8080 $IMAGE_NAME"
    - ssh $USER@$FTP_HOSTNAME "docker logout"
  only:
    - main

 

외부 변수들은 GitLab - Settings - CI / CD - Variables

 

 

GitLab Runner 세팅 :

더보기

CI / CD 를 위해 프로젝트가 올라가는 서버에 Gitlab Runner를 설치한다. 

 

Install GitLab Runner using the official GitLab repositories | GitLab

Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.

docs.gitlab.com

 

 

 

 

테스트용 오라클 클라우드 리눅스 서버에 설치해보려한다. 

https://www.oracle.com/kr/cloud/free/   

 

오라클 클라우드 서비스를 쓴다면,  무료로 테스트용 리눅스 서버를 쓰기에 부담이 없다.

 

클라우드 서비스 무료 이용

Oracle Cloud Free Tier는 기업에게 무제한으로 사용할 수 있는 상시 무료 클라우드 서비스를 제공합니다.

www.oracle.com

 

 

Oracle cloud instance 설정 : 

클라우드 서비스를 이용하는 길은 험난하다.

지급 검증에서 카드를 등록하는 과정에서 통과가 안된다면 결국 라이브 채팅으로 문의를 하는 수밖에 없다.

 

5분정도 걸리는 듯 하다 상담 직원이 처리해주면 다시 가입하면 된다.

 

 

인스턴스 설정은 다음 블로그를 참고했다.

 

 

오라클 클라우드 인스턴스 생성, 서버 만들기 1단계

오라클 클라우드 인스턴스 생성 방법, 서버 만드는 1단계 과정으로 인스턴스 생성 전 여러 자료들을 참고하면서 쉽고 빠르게 생성할 수 있도록 정리함

iter.kr

 

 

 

설치환경은 oracle cloud instance 의 centos 8  버전이다. 

 

 

 

과정을 따라한다면 설치가 완료된다. 

$ curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash

$ sudo yum install gitlab-runner

 

필요할 경우 java를 설치한다.  ( open jdk 11을 설치했다.)

$ sudo dnf install java-11-openjdk-devel

 

 

 

설치 이후 러너를 등록한다. 

 

$ sudo gitlab-runner register

 

등록시 필요한 URL 및 토큰 정보는  아래 탭에서 볼 수 있다.

 

러너 실행  명령어는 다음과 같다.

$ gitlab-runner start

$ gitlab-runner run

 

 

 

도커 설치 및 테스트 :

 

[SERVER] docker / centos 8 / oracle cloud

😢 oracle cloud의 centos 8 에 docker를 설치해서 spring boot 프로젝트를 구동해본다. 도커 : 가상의 공간을 이미지로 만듦. 하나의 이미지를 통해 여러개의 컨테이너를 만들 수도 있음. 이러한 과정이 완

girinprogram93.tistory.com

SSH 설정   :   Window 11 기준 

더보기

CMD 

 

$ ssh-keygen   

 

사용자 홈 디렉토리에 키가 생성된다. 

 

GitLab - Variables에 등록 ( SSH_KEY )

 

 

등록 이후 원격지 서버의 SSH 공개 키도 등록.

 

 

ssh_host_ed25519_key.pub를 등록한다면, 다음과 같다. 

 

$ cd ~/.ssh 

$ vi authorized_keys

 

키값을 직접 붙여넣는다. 

Dockerfile : 

더보기
# 기본 이미지
FROM gradle:7.1.0-jdk11
# 변수 설정
# 2개 이상의 jar파일이 생성 될 경우 copy 안되는 현상있음
ARG JAR_FILE=build/libs/gitlab-starter-0.0.1-SNAPSHOT.jar
# 빌드파일을 컨테이너로 복사한다.
COPY ${JAR_FILE} app.jar
# jar 파일 실행.
ENTRYPOINT ["java","-jar","app.jar"]

 

 

 

 

 

 

 

 

 

 

참고 : https://docs.gitlab.com/

 

GitLab Documentation

Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.

docs.gitlab.com

참고 : https://docs.gitlab.com/ee/ci/variables/index.html

참고 : https://playit.tistory.com/3

참고 : https://gitlab.com/gitlab-examples/spring-gitlab-cf-deploy-demo/-/blob/master/.gitlab-ci.yml

참고 : https://m.blog.naver.com/infograb/222384517957

참고 : https://medium.com/devops-with-valentine/gitlab-ci-upload-files-with-ftp-dee357ceecce

참고 : https://filip5114.github.io/GitLab-CI-Pipeline-SSH/

참고 : https://2dongdong.tistory.com/75

320x100
반응형
저작자표시 (새창열림)

'SERVER' 카테고리의 다른 글

[Cloud Front] 클라우드 프론트 무효화  (1) 2023.10.19
[SERVER] docker command ( Oracle cloud, ubuntu 18 )  (0) 2023.08.24
[SERVER] docker / centos 8 / oracle cloud  (0) 2022.12.03
[Server] Session 과 JWT  (0) 2022.11.29
iptables / centOS7 / 방화벽 설정 / 공유기 포트포워딩 세팅  (0) 2022.04.24
  1. 프로젝트 구조 : 
  2. 작업 진행  : 
  3. 프로젝트 생성 및 초기 세팅 :
  4. .gitlab-ci.yml  :
  5. GitLab Runner 세팅 :
  6. 도커 설치 및 테스트 :
  7. SSH 설정   :   Window 11 기준 
  8. Dockerfile : 
'SERVER' 카테고리의 다른 글
  • [SERVER] docker command ( Oracle cloud, ubuntu 18 )
  • [SERVER] docker / centos 8 / oracle cloud
  • [Server] Session 과 JWT
  • iptables / centOS7 / 방화벽 설정 / 공유기 포트포워딩 세팅
girin_dev
girin_dev
기록합시다.
250x250
girin_dev
girin_dev
girin_dev

github.com/jaemanc


전체
오늘
어제
  • 분류 전체보기 (122)
    • ALGORITHM (23)
    • AWS (4)
    • Effective Java (4)
    • ERROR (12)
    • DB (11)
    • JAVA (23)
      • SPRING (10)
    • PYTHON (5)
      • TOY_PROJECT (1)
    • MOBILE (4)
    • SERVER (8)
    • TIPS (16)
    • WAS (2)
    • 새싹 일기 (5)
    • DATA (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • CentOS 8
  • 다이나믹 프로그래밍
  • 새싹
  • 바둑이
  • 바질 키우기
  • oracle cloud
  • centos7
  • dp
  • offset
  • vertica
  • JAVA 11
  • 가장 큰 수
  • spring boot
  • Flutter
  • docker
  • 바질 페스토
  • lis
  • python3
  • react-native
  • oracle
  • Effective Java
  • IntelliJ
  • error
  • springboot
  • Chat GPT
  • 바질
  • java
  • jwt
  • querydsl

최근 댓글

최근 글

hELLO · Designed By 정상우.
girin_dev
[SERVER] GitLab CI CD / oracle cloud / docker
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.