반응형

기본 설정

설명

  • Gitlab CI/CD Pipeline은 Repository에 Push/Merge와 같은 이벤트가 발생했을 경우 테스트/빌드/배포와 같은 작업을 자동으로 수행해주는 것을 말한다.
  • gitlab-runner 설치 및 등록 과정은 원격서버에서 진행해야 한다.

gitlab-runner 설치

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt-get install -y gitlab-runner
  • [이슈] 위 과정에서 E: Unable to locate package gitlab-runner 오류가 뜰 경우 아래 과정 수행 후 다시 설치해본다.
    sudo vi /etc/apt/sources.list.d/runner_gitlab-runner.list
    
    • 주소 뒤에 trusty로 변경
    deb https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ trusty main
    deb-src https://packages.gitlab.com/runner/gitlab-runner/ubuntu/ trusty main
    
    • 업데이트
    sudo apt-get update
    

gitlab-runner 등록

sudo gitlab-runner register
  • Gitlab 서버 주소 입력
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.56.11
  • Gitlab웹 > 해당 레파지토리 > Settings > CI / CD > Runners > Specific Runners > Set up a specific Runner manually > Token 정보 복사 후 붙여넣기
Please enter the gitlab-ci token for this runner:
zzkFSL5wUN9T-tMfDz2e
  • 설명 입력
Please enter the gitlab-ci description for this runner:
[ubuntu]: Test CI/CD
  • 태그 입력. Pipeline 대상 서버 구분을 여기서 입력한 태그로 할 수 있다.
Please enter the gitlab-ci tags for this runner (comma separated):
build-server
  • Executor 입력. 여기선 간단하게 테스트를 위해 shell 입력.
Please enter the executor: ssh, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parallels, shell, docker+machine:
shell

gitlab-runner 등록 확인

  • Gitlab웹 > 해당 레파지토리 > Settings > CI / CD > Runners > Runners activated for this project > 등록한 runner가 있는지 확인

.gitlab-ci.yml 추가

  • 경로 : <프로젝트>/.gitlab-ci.yml
test-job: # 임의로 지정한 JOB 이름
  stage: deploy # build, test, deploy 3단계 스테이지 중 하나
  only:
    - develop # develop 브랜치 이벤트 발생시 실행
  script:
    - echo "Hello World" # 실행할 스크립트
  tags:
    - build-server # build-server 태그가 달린 runner에서 실행

Pipeline 실행

  • 프로젝트의 develop 브랜치에서 코드 수정 후 Push
  • Gitlab 웹 > 해당 레파지토리 > CI / CD > Pipelines > 실행된 잡 확인
    Running with gitlab-runner 11.11.4 (e828d3bc)
    on Test CI/CD __Fj9Kud
    Using Shell executor...
    Running on ubuntu...
    hint: Using 'master' as the name for the initial branch. This default branch name
    hint: is subject to change. To configure the initial branch name to use in all
    hint: of your new repositories, which will suppress this warning, call:
    hint: 
    hint: 	git config --global init.defaultBranch <name>
    hint: 
    hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
    hint: 'development'. The just-created branch can be renamed via this command:
    hint: 
    hint: 	git branch -m <name>
    Initialized empty Git repository in /home/gitlab-runner/builds/__Fj9Kud/0/gitlab-tester/test-project/.git/
    Fetching changes...
    Created fresh repository.
    From http://192.168.56.11/gitlab-tester/test-project
    * [new branch]      develop    -> origin/develop
    * [new branch]      master     -> origin/master
    Checking out 8381120c as develop...
    Skipping Git submodules setup
    $ echo "Hello World"
    Hello World
    Job succeeded
    
  • [이슈] Pipeline 실행 결과가 아래와 같은 경우 확인
    • result
      Running with gitlab-runner 11.11.4 (e828d3bc)
      on Test CI/CD __Fj9Kud
      Using Shell executor...
      Running on ubuntu...
      bash: line 74: cd: /home/gitlab-runner/builds/__Fj9Kud/0/gitlab-tester/test-project: No such file or directory
      ERROR: Job failed: exit status 1
      
    • gitlab-runner 서버에서 .bash_logout 파일 삭제 후 다시 Pipeline 돌려 확인
      rm /home/gitlab-runner/.bash_logout
      

예시

수동으로 실행하는 잡 설정

  • 아래처럼 설정 후 gitlab 웹 파이프라인 페이지에서 직접 잡을 실행
manual-job:
  tags:
    - build-server
  when: manual
  script:
    - echo "=== manual ==="

변수 설정

  • Settings > CI / CD > Variables에 변수값을 등록하여 활용 가능
variables: # 전역 변수
  app_name: "MyApp"
  app_version: "1.0.0"

variables-job:
  tags:
    - build-server
  variables: # 지역 변수
    app_phase: "dev"
  script:
    - echo "=== $app_name, $app_version, $app_phase ==="

전체 변수 조회

list-all-variables-job:
  tags:
    - build-server
  script:
    - export

전/후처리 스크립트

before-after-script-job:
  tags:
    - build-server
  before_script:
    - echo "=== before_script ==="
  script:
    - echo "=== script ==="
  after_script:
    - echo "=== after_script ==="

특정 브랜치만 실행

only-job:
  tags:
    - build-server
  only:
    - master
  script:
    - echo "=== only ==="

특정 브랜치를 제외하고 실행

except-job:
  tags:
    - build-server
  except:
    - master
  script:
    - echo "=== except ==="

파이프라인 그룹화

  • 비슷한 job을 하나로 보기좋게 그룹화하기 위한 설정
  • job 이름에서 슬래쉬(/), 콜론(:), 공백( )을 구분자로 설정
group-job-1/3:
  tags:
    - build-server
  script:
    - echo "=== 1 ==="

group-job-2/3:
  tags:
    - build-server
  script:
    - echo "=== 2 ==="

group-job-3/3:
  tags:
    - build-server
  script:
    - echo "=== 3 ==="

파일 다운로드 가능하도록 설정

  • Gitlab Pipeline 페이지에서 다운로드할 수 있도록 설정
artifacts-job:
  tags:
    - build-server
  script:
    - echo "=== artifacts ==="
  artifacts:
    paths:
      - README.md
      - .gitlab-ci.yml
    expire_in: 1 week

도커 컨테이너상에서 잡 실행

  • runner 서버 등록시 executor를 docker로 지정해야함.
  • runner 서버에 docker가 설치되어 있어야함.
docker-container-job:
  tags:
    - build-server
  image: openjdk:11.0
  script:
    - java -version

파이프라인 아키텍처 - Basic

  • stages에 나열한 순서대로 stage를 진행
stages:
  - test
  - build
  - deploy

test-job:
  stage: test
  tags:
    - build-server
  script:
    - echo "=== test ==="

build-job:
  stage: build
  tags:
    - build-server
  script:
    - echo "=== build ==="

deploy1-job:
  stage: deploy
  tags:
    - build-server
  script:
    - echo "=== deploy1 ==="

deploy2-job:
  stage: deploy
  tags:
    - build-server
  script:
    - echo "=== deploy2 ==="

참고

반응형

'Development > Gitlab' 카테고리의 다른 글

[Gitlab] 사용자  (0) 2021.05.23
[Gitlab] 설치  (0) 2021.05.23

+ Recent posts