깃랩 CI/CD: 푸시마다 자동으로 빌드, 테스트, 배포
개발 초기에 버그와 오류를 포착할 수 있게 지속적인 방법론을 사용하는 깃랩에 내장된 소프트웨어 개발 도구
CI/CD
지속적인 소프트웨어 개발 방법론을 사용하면 반복적인 코드 변경 사항을 지속적으로 빌드, 테스트 및 배포할 수 있습니다. 이 방법을 사용하면 새 코드 개발에서 배포까지 사람의 개입을 줄이거나 아예 개입하지 않으려고 노력합니다.
지속적인 방법론에는 세 가지 기본 접근 방식이 있습니다.
1.지속적인 통합 (CI, Continuous Integration)
푸시할 때마다 빌드 + 테스트
2.지속적 전달 (CD, Continuous Delivery)
푸시할 때마다 빌드 + 테스트 + 배포(수동)
3.지속적인 배포 (CD, Continuous Deployment)
푸시할 때마다 빌드 + 테스트 + 배포(자동)
깃랩 CI/CD 워크플로
1. 내 컴퓨터에서 프로젝트 코드 작성.
2. 깃랩에 프로젝트 푸쉬하기.
3. 푸시가 자동으로 프로젝트의 CI/CD 파이프라인을 트리거한다.
4. 깃랩 CI/CD는
- 다음을 위해 yml파일에 적힌 스크립트를 실행합니다.
- 애플리케이션을 빌드하고 테스트
- 변경 사항을 미리 보기
5. 구현이 예상대로 작동한 후:
- 코드를 검토하고 승인하십시오.
- 기능 분기를 기본 분기에 병합합니다.
- 깃랩 CI/CD는 변경 사항을 프로덕션 환경에 자동으로 배포합니다.
CI/CD 워크플로 자세히 살펴보기
워크플로를 자세히 살펴보면 DevOps 수명 주기의 각 단계에서 GitLab에서 사용할 수 있는 기능을 확인할 수 있습니다.
주요 개념
개념 | 설명 |
파이프라인 | 파이프라인을 통해 CI/CD 프로세스를 구성합니다. |
CI/CD 변수 | 변수/값 키 쌍을 기반으로 값을 재사용합니다. |
환경 | 애플리케이션을 다양한 환경(예: 스테이징, 프로덕션)에 배포합니다. |
작업 아티팩트 | 작업 아티팩트를 출력, 사용 및 재사용합니다. |
캐시 종속성 | 더 빠른 실행을 위해 종속성을 캐시합니다. |
깃랩 러너 | 스크립트를 실행하도록 자체 러너를 구성합니다. |
파이프라인 효율성 | 빠르고 효율적으로 실행되도록 파이프라인을 구성합니다. |
테스트 케이스 | 테스트 시나리오를 만듭니다. |
CI/CD 수행 방법
1. 런너, yml 파일: 커스텀 CI/CD
2. Auto Devops: 깃랩이 알아서 해주는 CI/CD. 코드를 분석해 가장 적합한 설정의 CI/CD를 해준다.
1. 런너, yml 파일: 커스텀 CI/CD
깃랩 CI/CD는 자동화하고 싶은 스크립트가 적힌 yml파일(파이프라인)을 런너가 실행함으로써 이뤄진다.
YAML(YAML Ain't Markup Language)
https://docs.gitlab.com/ee/ci/
https://docs.gitlab.com/ee/development/cicd/
https://gitlab.com/gitlab-org/gitlab-foss/tree/master/lib/gitlab/ci/templates
image: python // 도커 파이썬 이미지 사용
default: // 설정이 적히지 않았을 때 사용될 설정
tags: // tags가 적히지 않은 job들에는 python이 기본적으로 사용된다. tags: 현 job을 python을 사용해서 한다
- python // 만약 파이프라인이 작동되지 않는다면 지우거나 깃헙 런너의 tag 설정 필요
variables:
USERNAME: myName // 파일 내에서 여러번 쓰일 변수 적기. $USERNAME으로 쓸 수 있다
stages: // 큰 단계들. 자신이 원하는 대로 적는다.
- build
- test
- deploy
build-job: // 작은 단계
stage: build // build라는 큰 단계 안의 build-job이라는 작은 단계
tags:
- python
script: // 이 단계에서 실행할 스크립트
- echo "적고 싶은 것 적기"
- mkdir build/
- echo "sample text" > build/sample // sample.txt 파일을 만들고 "sample text" 적기
artifacts: // 이 단계에서 만들어진 파일을 다른 단계에서도 쓸 수 있게 저장한다. 단계들을 기본적으로 격리되어있다.
paths: // 파일 경로
- build/sample
unit-test-job:
stage: test
script:
- echo "unit-test-job starts"
- cat $CI_PROJECT_DIR/build/sample // 전 단계에서 artifact로 저장해놓은 파일 보기. $CI_PROJECT_DIR은 깃랩 자체에서 이미 정의된 변수
lint-test-job:
stage: test
script:
- echo "lint-test-job starts"
deploy-job:
stage: deploy
script:
- python3 -- version // 위에서 적어놓은 도커 파이썬 이미지가 제대로 작동하는지 확인
- echo "Using credentials = $USERNAME, $PASSWORD" // 위에서 적어놓은 variables의 USERNAME 변수 사용
변수
1.yml 파일 안에 직접 적는 변수
2.깃랩 자체에서 이미 정의된 깃랩 변수들
https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
3.비밀 변수
자바 메이븐 용 yml 파일 예제
variables:
MAVEN_OPTS: -Dmaven.repo.local=.m2/repository
image: maven:latest // 메이븐 사용
stages: // 단계 목록
- build
- test
- package
- deploy
cache:
paths:
- .m2/repository
- target
build_job: // 1 단계
stage: build
tags:
- docker
script:
- echo "Maven compile started"
- "mvn compile"
test_job: // 2 단계
stage: test
tags:
- docker
script:
- echo "Maven test started"
- "mvn test"
package_job: // 3 단계
stage: package
tags:
- docker
script:
- echo "Maven packaging started"
- "mvn package"
Deploy_job: // 4 단계
stage: deploy
tags:
- docker
script:
- echo "Maven deploy started"
파이썬 용 yml 파일 예제
# 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/Python.gitlab-ci.yml
# Official language image. Look for the different tagged releases at:
# https://hub.docker.com/r/library/python/tags/
image: python:latest
# Change pip's cache directory to be inside the project directory since we can
# only cache local items.
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
# Pip's cache doesn't store the python packages
# https://pip.pypa.io/en/stable/topics/caching/
#
# If you want to also cache the installed packages, you have to install
# them in a virtualenv and cache it as well.
cache:
paths:
- .cache/pip
- venv/
before_script:
- python --version # For debugging
- pip install virtualenv
- virtualenv venv
- source venv/bin/activate
test:
script:
- python setup.py test
- pip install tox flake8 # you can also use tox
- tox -e py36,flake8
run:
script:
- python setup.py bdist_wheel
# an alternative approach is to install and run:
- pip install dist/*
# run the command here
artifacts:
paths:
- dist/*.whl
pages:
script:
- pip install sphinx sphinx-rtd-theme
- cd doc
- make html
- mv build/html/ ../public/
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
2. Auto DevOps: 깃랩이 알아서 해주는 CI/CD
코드를 분석해 가장 적합한 설정의 CI/CD를 해준다.
설정에서 활성화하면 yml 파일이 존재하지 않을 때 작동된다
- 코드의 언어를 감지합니다.
- 애플리케이션을 빌드하고 테스트합니다.
- 코드 품질을 측정합니다.
- 취약점 및 보안 결함을 스캔합니다.
- 라이선스 문제를 확인합니다.
- 실시간으로 모니터링합니다.
- 애플리케이션을 배포합니다.
'개념 정리' 카테고리의 다른 글
[개념 정리] 깃, 깃허브, 깃랩 (0) | 2022.06.12 |
---|---|
[개념 정리] 각 프레임워크 시작 명령어 (0) | 2022.06.09 |
[개념 정리] 메이븐 (0) | 2022.06.08 |
[개념 정리] 도커 (0) | 2022.06.06 |
[개념 정리] Microsoft (0) | 2022.06.06 |