본문 바로가기
협업툴,가상환경 정리/CI_CD 관련

gitlab-ci 문법

by 알 수 없는 사용자 2022. 10. 5.

참고

https://allroundplaying.tistory.com/55

 

Gitlab CI Variables 환경변수 알아보기

ref : Gitlab CI > Variables GitLab CI를 사용하여 Runner를 쓸 때, 기본적으로 세팅되어 있는 환경변수를 쓰면 편리한 경우가 있다  ex ) 동일한 컨테이너를 쓰는데 현 프로젝트를 알아야 하는 경우 CI_PROJEC

allroundplaying.tistory.com

 

https://docs.gitlab.com/ee/ci/docker/using_docker_build.html

 

Use Docker to build Docker images | GitLab

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

docs.gitlab.com

 

https://docs.gitlab.com/ee/ci/yaml/index.html

 

`.gitlab-ci.yml` keyword reference | GitLab

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

docs.gitlab.com

 


템플릿 소스 구하는법|

깃랩메인 페이지에서 + 버튼 누르고 

1.

2.


 

템플릿

DOCKER

# This file is a template, and might need editing before it works on your project.
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Docker.gitlab-ci.yml

# Build a Docker image with CI/CD and push to the GitLab registry.
# Docker-in-Docker documentation: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
#
# This template uses one generic job with conditional builds
# for the default branch and all other (MR) branches.

docker-build:
  # Use the official docker image.
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  # Default branch leaves tag empty (= latest tag)
  # All other branches are tagged with the escaped branch name (commit ref slug)
  script:
    - |
      if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
        tag=""
        echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'"
      else
        tag=":$CI_COMMIT_REF_SLUG"
        echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag"
      fi
    - docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" .
    - docker push "$CI_REGISTRY_IMAGE${tag}"
  # Run this job in a branch where a Dockerfile exists
  rules:
    - if: $CI_COMMIT_BRANCH
      exists:
        - Dockerfile
구성요소 설명
stages 스테이지 별로 작업이 실행된다.각 스테이지의 작업 중 하나라도 실패하면 pipeline의 표시가 failed로 뜬다. 스테이지 명을 따로 정의하지 않으면 build, test, deploy로 기본 값이 배정된다.
variables .gitlab-ci.yml파일에서 사용 될 변수 와 값의 정의
cache 후속 실행 사이에 캐시되어야하는 파일 목록 (cache:paths, cache:key, cache:untracked, cache:policy)
test Job 이름
stage 해당 Job이 실행되는 스테이지의 이름. 같은 스테이지에 해당하는 것들은 Job이 달라도 병행 실행된다(parallel). Job에 스테이지를 따로 지정하지 않으면 그 Job은 test 스테이지다.
image CI를 위해 Docker가 실제로 사용하는 image의 이름이다. 이미지는 Docker Hub에 올라와 있는 것만 사용 가능하지만 gitlab-runner/config.toml 설정을 바꿈으로써 로컬 이미지도 사용 가능 하다.
script gitlab-runner exeucutor가 실행할 명령들. script는 모든 Job에 항상 포함되어야 한다.
services job 실행 중 실행되는 Docker 이미지, 이 이미지로 생성되는 컨테이너는 line 1의 이미지와 연결된다. docker:dind 는 도커 컨테이너 안에서 또 다시 컨테이너를 사용 할 수 있게 해 준다(Docker in Docker의 약자).docker로 gitlab-runner CI를 구성했기 때문에 이 서비스를 사용한다.
artifacts 성공시 작업에 첨부할 파일 및 디렉토리 목록 (artifacts:paths, artifacts:name, artifacts:untracked, artifacts:when, artifacts:expire_in, artifacts:reports, artifacts:junit 사용 가능)

sudo gitlab-runner register -n \
  --url https://gitlab.com/ \
  --registration-token REGISTRATION_TOKEN \
  --executor shell \
  --description "My Runner"

 

 

 

 

 

 

BASH

# This file is a template, and might need editing before it works on your project.
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Bash.gitlab-ci.yml

# See https://docs.gitlab.com/ee/ci/yaml/index.html for all available options

# you can delete this line if you're not using Docker
image: busybox:latest

before_script:
  - echo "Before script section"
  - echo "For example you might run an update here or install a build dependency"
  - echo "Or perhaps you might print out some debugging details"

after_script:
  - echo "After script section"
  - echo "For example you might do some cleanup here"

build1:
  stage: build
  script:
    - echo "Do your build here"

test1:
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"

test2:
  stage: test
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"

deploy1:
  stage: deploy
  script:
    - echo "Do your deploy here"

KeywordDescription

after_script Override a set of commands that are executed after job.
allow_failure Allow job to fail. A failed job does not cause the pipeline to fail.
artifacts List of files and directories to attach to a job on success.
before_script Override a set of commands that are executed before job.
cache List of files that should be cached between subsequent runs.
coverage Code coverage settings for a given job.
dast_configuration Use configuration from DAST profiles on a job level.
dependencies Restrict which artifacts are passed to a specific job by providing a list of jobs to fetch artifacts from.
environment Name of an environment to which the job deploys.
except Control when jobs are not created.
extends Configuration entries that this job inherits from.
image Use Docker images.
inherit Select which global defaults all jobs inherit.
interruptible Defines if a job can be canceled when made redundant by a newer run.
needs Execute jobs earlier than the stage ordering.
only Control when jobs are created.
pages Upload the result of a job to use with GitLab Pages.
parallel How many instances of a job should be run in parallel.
release Instructs the runner to generate a release object.
resource_group Limit job concurrency.
retry When and how many times a job can be auto-retried in case of a failure.
rules List of conditions to evaluate and determine selected attributes of a job, and whether or not it’s created.
script Shell script that is executed by a runner.
secrets The CI/CD secrets the job needs.
services Use Docker services images.
stage Defines a job stage.
tags List of tags that are used to select a runner.
timeout Define a custom job-level timeout that takes precedence over the project-wide setting.
trigger Defines a downstream pipeline trigger.
variables Define job variables on a job level.
when When to run job.

 

 

 


tages:          # List of stages for jobs, and their order of execution
  - test
  - deploy

before_script:
  - echo "START scripte"
after_script: # 모든 job이 끝날 때마다 after_script를 실행함.
  - echo "ENDED script"

test-job:
  stage: test
  variables:
    TEST_HOME: "test_home"
#  only:  #main 브랜치에 push가 들어 올떄 동작하는 job
#    - main
#  except:
#    - master
#  when: manual # manual : 수동  , 설정 하지 않는 다면 자동 sync 된다
  rules: # 특정 조건일때 동작 함.
    - if : '$CI_COMMIT_TAG == "nouse"'
  environment:
    name: test/name
    # action: start/test
  script:
    - echo "test start"                # test start
    - echo "test runner"               # test runner
    - echo $CI                         # true
    - echo $CI_COMMIT_REF_NAME         # main
    - echo $CI_COMMIT_REF_SLUGnames    #
    - echo $CI_COMMIT_SHA              # 99f5f8a394819997eb662f3b87fb06a149c688c0
    - echo $CI_COMMIT_TAG              #
    - echo $CI_CONFIG_PATH             # .gitlab-ci.yml
    - echo $CI_DEBUG_TRACE             #
    - echo $CI_DISPOSABLE_ENVIRONMENT  # true
    - echo $CI_ENVIRONMENT_NAME           # test/name
    - echo $CI_ENVIRONMENT_SLUG        # test-name-5fqvjj
    - echo $CI_ENVIRONMENT_URL         #
    - echo $CI_JOB_ID                  # 27756
    - echo $CI_JOB_MANUAL              #
    - echo $CI_JOB_NAME                # test-job
    - echo $CI_JOB_STAGE               # test
    - echo $CI_JOB_TOKEN               # http://gitlab-ci-token:[MASKED]@source.clobot.co.kr:9000/liam/etri_hall_robot.git
    - echo $CI_REPOSITORY_URL          #
    - echo $CI_RUNNER_DESCRIPTION      # runner_test_2
    - echo $CI_RUNNER_ID               # 105
    - echo $CI_RUNNER_TAGS             # runner_test_2
    - echo $CI_PIPELINE_ID             # 9058
    - echo $CI_PIPELINE_TRIGGERED      #
    - echo $CI_PIPELINE_SOURCE         # push
    - echo $CI_PROJECT_DIR             # /builds/liam/etri_hall_robot
    - echo $CI_PROJECT_ID              # 751
    - echo $CI_PROJECT_NAME            # etri_hall_robot
    - echo $CI_PROJECT_NAMESPACE       # liam
    - echo $CI_PROJECT_PATH            # liam/etri_hall_robot
    - echo $CI_PROJECT_PATH_SLUG       # liam-etri-hall-robot
    - echo $CI_PROJECT_URL             # http://source.clobot.co.kr:9000/liam/etri_hall_robot
    - echo $CI_REGISTRY                # registry.clobot.co.kr
    - echo $CI_REGISTRY_IMAGE          # registry.clobot.co.kr/liam/etri_hall_robot
    - echo $CI_REGISTRY_PASSWORD       # [MASKED]
    - echo $CI_REGISTRY_USER           # gitlab-ci-token
    - echo $CI_SERVER                  # yes
    - echo $CI_SERVER_NAME             # GitLab
    - echo $CI_SERVER_REVISION         # 68f64189ead
    - echo $CI_SERVER_VERSION          # 14.9.5
    - echo $CI_SHARED_ENVIRONMENT      #
    - echo $ARTIFACT_DOWNLOAD_ATTEMPTS #
    - echo $GET_SOURCES_ATTEMPTS      #
    - echo $GITLAB_CI                  # true
    - echo $GITLAB_USER_ID             # 134
    - echo $GITLAB_USER_EMAIL          # liam@clobot.co.kr
    - echo $GITLAB_USER_LOGIN          # liam
    - echo $GITLAB_USER_NAME           # 리암_ 임원혁
    - echo $RESTORE_CACHE_ATTEMPTS     #
    - sleep 5
  # cache:
  #   key: ${CI_COMMIT_REF_SLUG} # 이 브랜치(master)에서 만들어둔 cache를 사용한다
  #   paths:
  #     - /home/liam/tmp # cache할 디렉토리를 정의한다
  tags:
    - runner_test_2 # "runner_test_2" 라는 TAG가 있는 러너에 명령한다.

deploy-job:      # This job runs in the deploy stage.
  stage: deploy  # It only runs when *both* jobs in the test stage complete successfully.
  rules:
    - if: '$CI_RUNNER_TAGS == "host_runner"'
  script:
    - echo "Deploying application..."
    - echo "Application successfully deployed."
  tags:
    - runner_test_2 # "runner_test_2" 라는 TAG가 있는 러너에 명령한다.

 


환경변수

설명 : 

Variable GitLab Runner Dsecription
CI 모두 0.4 작업이 CI 환경에서 실행되었음을 표시
CI_COMMIT_REF_NAME 9.0 모두 프로젝트가 빌드되는 브랜치 또는 태그 이름
CI_COMMIT_REF_SLUG 9.0 모두 $CI_COMMIT_REF_NAME 소문자, 63바이트로  0-9 단축  a-z,  -. 선행/후행 없음  -. URL, 호스트 이름 및 도메인 이름에 사용합니다.
CI_COMMIT_SHA 9.0 모두 프로젝트가 빌드된 커밋 개정
CI_COMMIT_TAG 9.0 0.5 커밋 태그 이름입니다. 태그를 작성할 때만 표시됩니다.
CI_CONFIG_PATH 9.4 0.5 CI 구성 파일의 경로입니다. 기본값 .gitlab-ci.yml
CI_DEBUG_TRACE 모두 1.7 디버그 추적  사용 여부 
CI_DISPOSABLE_ENVIRONMENT 모두 10.1 작업이 일회용 환경(이 작업에 대해서만 생성되고 실행 후에 폐기/파기되는 것 -  shell 및  제외 모든 실행기 ssh)에서 실행되는 것으로 표시합니다. 환경이 일회용이면 true로 설정되고, 그렇지 않으면 전혀 정의되지 않습니다.
CI_ENVIRONMENT_NAME 8.15 모두 이 작업의 환경 이름
CI_ENVIRONMENT_SLUG 8.15 모두 DNS, URL, Kubernetes 레이블 등에 포함하기에 적합한 환경 이름의 단순화된 버전입니다.
CI_ENVIRONMENT_URL 9.3 모두 이 작업에 대한 환경의 URL
CI_JOB_ID 9.0 모두 GitLab CI가 내부적으로 사용하는 현재 작업의 고유 ID
CI_JOB_MANUAL 8.12 모두 작업이 수동으로 시작되었음을 나타내는 플래그
CI_JOB_NAME 9.0 0.5 에 정의된 작업 이름 .gitlab-ci.yml
CI_JOB_STAGE 9.0 0.5 에 정의된 단계의 이름 .gitlab-ci.yml
CI_JOB_TOKEN 9.0 1.2 GitLab Container Registry 인증에 사용되는 토큰
CI_REPOSITORY_URL 9.0 모두 Git 리포지토리를 복제할 URL
CI_RUNNER_DESCRIPTION 8.10 0.5 GitLab에 저장된 러너에 대한 설명
CI_RUNNER_ID 8.10 0.5 사용 중인 러너의 고유 ID
CI_RUNNER_TAGS 8.10 0.5 정의된 러너 태그
CI_PIPELINE_ID 8.10 0.5 GitLab CI가 내부적으로 사용하는 현재 파이프라인의 고유 ID
CI_PIPELINE_TRIGGERED 모두 모두 작업이  트리거 되었음을 나타내는 플래그
CI_PIPELINE_SOURCE 10.0 모두 이 파이프라인의 소스는 push, web, trigger, schedule, api, external 중 하나입니다. 9.5 이전에 생성된 파이프라인은 출처를 알 수 없음
CI_PROJECT_DIR 모두 모두 리포지토리가 복제되고 작업이 실행되는 전체 경로
CI_PROJECT_ID 모두 모두 GitLab CI가 내부적으로 사용하는 현재 프로젝트의 고유 ID
CI_PROJECT_NAME 8.10 0.5 현재 빌드 중인 프로젝트 이름(실제로는 프로젝트 폴더 이름)
CI_PROJECT_NAMESPACE 8.10 0.5 현재 빌드 중인 프로젝트 네임스페이스(사용자 이름 또는 그룹 이름)
CI_PROJECT_PATH 8.10 0.5 프로젝트 이름이 있는 네임스페이스
CI_PROJECT_PATH_SLUG 9.3 모두 $CI_PROJECT_PATH 소문자를 사용하고 를 제외  0-9 하고  a-z 모두  -. URL 및 도메인 이름에 사용합니다.
CI_PROJECT_URL 8.10 0.5 프로젝트에 접근하기 위한 HTTP 주소
CI_REGISTRY 8.10 0.5 Container Registry가 활성화된 경우 GitLab의 Container Registry 주소를 반환합니다.
CI_REGISTRY_IMAGE 8.10 0.5 프로젝트에 대해 Container Registry가 활성화된 경우 특정 프로젝트에 연결된 레지스트리 주소를 반환합니다.
CI_REGISTRY_PASSWORD 9.0 모두 GitLab Container Registry에 컨테이너를 푸시하는 데 사용할 비밀번호
CI_REGISTRY_USER 9.0 모두 컨테이너를 GitLab Container Registry에 푸시하는 데 사용할 사용자 이름
CI_SERVER 모두 모두 작업이 CI 환경에서 실행되었음을 표시
CI_SERVER_NAME 모두 모두 작업을 조정하는 데 사용되는 CI 서버의 이름
CI_SERVER_REVISION 모두 모두 작업을 예약하는 데 사용되는 GitLab 개정판
CI_SERVER_VERSION 모두 모두 작업을 예약하는 데 사용되는 GitLab 버전
CI_SHARED_ENVIRONMENT 모두 10.1 shell 작업이 공유 환경( 또는  ssh 실행기 와 같은 CI 호출 간에 지속되는 것)에서 실행되었음을 표시합니다  . 환경이 공유되면 true로 설정되고, 그렇지 않으면 전혀 정의되지 않습니다.
ARTIFACT_DOWNLOAD_ATTEMPTS 8.15 1.9 작업을 실행하는 아티팩트 다운로드 시도 횟수
GET_SOURCES_ATTEMPTS 8.15 1.9 작업을 실행하는 소스 가져오기 시도 횟수
GITLAB_CI 모두 모두 작업이 GitLab CI 환경에서 실행되었음을 표시
GITLAB_USER_ID 8.12 모두 작업을 시작한 사용자의 ID
GITLAB_USER_EMAIL 8.12 모두 작업을 시작한 사용자의 이메일
GITLAB_USER_LOGIN 10.0 모두 작업을 시작한 사용자의 로그인 사용자 이름
GITLAB_USER_NAME 10.0 모두 작업을 시작한 사용자의 실명
RESTORE_CACHE_ATTEMPTS 8.15 1.9 작업을 실행하는 캐시 복원 시도 횟수

 

직접 해봄 예시 // 예민한 부분은 XXXX 로 표시
 
#  2224  git add *
#  2225  git commit -m 'test_test_test'
#  2226  sudo git commit -m 'test_test_test'
#  2227  git push origin main
# 했을시에 나오는 출력값
  script:
    - echo "test start"                # test start
    - echo "test runner"               # test runner
    - echo $CI                         # true
    - echo $CI_COMMIT_REF_NAME         # main
    - echo $CI_COMMIT_REF_SLUGnames    #
    - echo $CI_COMMIT_SHA              # 99f5f8a394819997eXXXX6a149c688c0
    - echo $CI_COMMIT_TAG              #
    - echo $CI_CONFIG_PATH             # .gitlab-ci.yml
    - echo $CI_DEBUG_TRACE             #
    - echo $CI_DISPOSABLE_ENVIRONMENT  # true
    - echo $CI_ENVIRONMENT_NAME           # test/name
    - echo $CI_ENVIRONMENT_SLUG        # test-name-5fqvjj
    - echo $CI_ENVIRONMENT_URL         #
    - echo $CI_JOB_ID                  # 27756
    - echo $CI_JOB_MANUAL              #
    - echo $CI_JOB_NAME                # test-job
    - echo $CI_JOB_STAGE               # test
    - echo $CI_JOB_TOKEN               # http://gitlab-ci-token:[MASKED]@source.XXXX.co.kr:XXXX/liam/XXXX.git
    - echo $CI_REPOSITORY_URL          #
    - echo $CI_RUNNER_DESCRIPTION      # runner_test_2
    - echo $CI_RUNNER_ID               # 105
    - echo $CI_RUNNER_TAGS             # runner_test_2
    - echo $CI_PIPELINE_ID             # 9058
    - echo $CI_PIPELINE_TRIGGERED      #
    - echo $CI_PIPELINE_SOURCE         # push
    - echo $CI_PROJECT_DIR             # /builds/liam/XXXX
    - echo $CI_PROJECT_ID              # 751
    - echo $CI_PROJECT_NAME            # XXXX
    - echo $CI_PROJECT_NAMESPACE       # liam
    - echo $CI_PROJECT_PATH            # liam/XXXX
    - echo $CI_PROJECT_PATH_SLUG       # liam-XXXX-XXXX-robot
    - echo $CI_PROJECT_URL             # http://source.XXXX.co.kr:9000/liam/XXXX
    - echo $CI_REGISTRY                # registry.XXXX.co.kr
    - echo $CI_REGISTRY_IMAGE          # registry.XXXX.co.kr/liam/XXXX
    - echo $CI_REGISTRY_PASSWORD       # [MASKED]
    - echo $CI_REGISTRY_USER           # gitlab-ci-token
    - echo $CI_SERVER                  # yes
    - echo $CI_SERVER_NAME             # GitLab
    - echo $CI_SERVER_REVISION         # 6XXXX89ead
    - echo $CI_SERVER_VERSION          # 14.9.5
    - echo $CI_SHARED_ENVIRONMENT      #
    - echo $ARTIFACT_DOWNLOAD_ATTEMPTS #
    - echo $GET_SOURCES_ATTEMPTS      #
    - echo $GITLAB_CI                  # true
    - echo $GITLAB_USER_ID             # 134
    - echo $GITLAB_USER_EMAIL          # liam@XXXX.co.kr
    - echo $GITLAB_USER_LOGIN          # liam
    - echo $GITLAB_USER_NAME           # 리암_ 임원혁
    - echo $RESTORE_CACHE_ATTEMPTS     #
    - sleep 5

 


 

 

 

 

'협업툴,가상환경 정리 > CI_CD 관련' 카테고리의 다른 글

gitlab-runner 구성 및 등록 / 깃러너  (0) 2022.09.30
CI/CD 정의  (0) 2022.09.29

댓글