본문 바로가기

개념 정리

[개념 정리] 깃랩 CI/CD

 

깃랩 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