개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
파이프라인은 Jobs와 Stages로 구성
Job는 Runner에 의해 실행.
⇒ Stages 내의 여러개의 Jobs가 병렬로 실행
Stage1 => Jobs1 => Jobs2 => Stage2
Stage가 성공적으로 종료되면 파이프라인은 다음 Stage로 이동
만약, Stage 안의 Job이 실패하게 되면 다음 Stage로 이동하지않고 파이프라인이 종료된다.
파이프라인을 자동으로 실행 시킬 수 있지만 배포 할때는 수동 작업이 필요
stages:
- test
- build
- deploy
test:
stage: test
script: echo "Running tests"
build:
stage: build
script: echo "Building the app"
deploy_staging:
stage: deploy
script:
- echo "Deploy to staging server"
only:
- master
deploy_prod:
stage: deploy
script:
- echo "Deploy to production server"
when: manual
only:
- master
stages:
- build
- test
- deploy
variables: # 전역 변수
NAME: 'assu'
build-phase: # 임의의 job 이름..
stage: build
tags:
- ci-tag
except:
- dev
before_script:
- echo 'build-phase before script, except dev'
script:
- chcp 65001 # UTF-8 설정
- echo 'build-phase script, except dev'
after_script:
- echo 'build-phase after_script, except dev'
test-phase: # 임의의 job 이름
stage: test
tags:
- ci-tag
except:
- dev
before_script:
- echo 'build-phase before script, except dev'
script:
- chcp 65001 # UTF-8 설정
- echo 'build-phase script, except dev' $NAME
after_script:
- echo 'build-phase after_script, except dev'
deploy-phase: # 임의의 job 이름
stage: deploy
tags:
- ci-tag
when: manual
only:
- master
before_script:
- echo 'deploy-phase before script, except dev'
script:
- chcp 65001 # UTF-8 설정
- echo 'deploy-phase script, except dev'$NAME
after_script:
- echo 'deploy-phase after_script, except dev'
⇒ 마이크로서비스의 배포처럼 복잡한 배포 처리 시 특히 효율적
job1:
tags:
- ci-tag
stage: build
script:
- echo event
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
when: delayed
start_in: '30 seconds'
allow_failure: false
- if: '$CI_COMMIT_BRANCH == "master22"'
when: delayed
start_in: '50 minutes'
allow_failure: true
job:
script: "echo Hello, Rules!"
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- when: on_success
test => build => deploy
test: unit, e2e 등 test 수행
build: 도커 이미지 빌드 및 푸쉬