참고
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 | 작업을 실행하는 캐시 복원 시도 횟수 |
# 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 |
댓글