코드/CI-CD-Docker

[CI/CD] anchor 를 사용하여 YAML template 만들기

Yeah-Panda 2024. 7. 31. 09:36

실제 서비스에서 YAML 운용하다보면 많아지는 코드 속에 중복되는 부분이 많이 발생한다.

그런 부분을 template 을 통해 효율적으로 관리 할수 있다.

 다음과 같은 부분이 있다고 가정한다.

deploy to stage:
  stage: deploy staging
  cache: {}
  environment:
    name: staging
    url: http://$STAGING_URL
  before_script:
    - corepack enable
    - SHELL="$(which bash)" pnpm setup
    - source /root/.bashrc
    - pnpm add -g surge
  allow_failure: false
  only:
    - master
  script:
    - surge --project $VITEPRESS_DOC_ROOT --domain $STAGING_URL
  except:
    - schedules

deploy to production:
  stage: deploy production
  cache: {}
  environment:
    name: production
    url: http://$PRODUCTION_URL
  before_script:
    - corepack enable
    - SHELL="$(which bash)" pnpm setup
    - source /root/.bashrc
    - pnpm add -g surge
  allow_failure: false
  only:
    - master
  script:
    - surge --project $VITEPRESS_DOC_ROOT --domain $PRODUCTION_URL
  except:
    - schedules

 

아래와 같이 변경할수 있다

.deploy_template: &deploy # . (dot) 으로 시작하는 job 은 실제로 실행되지 않는다. &deploy 앵커 선언
  only:
    - master
  cache: {}
  environment:
    url: $DOMAIN  # $DOMAIN 이라는 변수를 선언.
    name: 'template' # 임의 환경 이름
  before_script:
    - corepack enable
    - SHELL="$(which bash)" pnpm setup
    - source /root/.bashrc
    - pnpm add -g surge
  script:
    - surge --project $VITEPRESS_DOC_ROOT --domain $DOMAIN
  except:
    - schedules
  allow_failure: false

deploy to stage:
  <<: *deploy # 앵커를 가져와 머지한다.
  stage: deploy staging
  environment:
    name: staging
  variables:
    DOMAIN: $STAGING_URL  # template 에서 사용할 변수 선언

deploy to production:
  <<: *deploy
  stage: deploy production
  environment:
    name: production
  variables:
    DOMAIN: $PRODUCTION_URL #template 에서 사용할 변수 선언

 

template 의 environment 중 name 은 임의 환경명을 선언 했다

name 을 적지 않으면 ci lint 유효성에는 문제 없으나 에디터에서 오류 보고를 한다.

임의 이름을 적어도 template 이 실제 사용되는 곳에서는 덮어씀으로 정상 동작하는 것 같다. 

이렇게 공통부분을 앵커로 템플릿화함으로써 조금 더 관리가 용이해진다.

 

 

'코드 > CI-CD-Docker' 카테고리의 다른 글

[Docker] Image pull  (0) 2024.09.13
[Docker] Docker hub 에 푸시하기  (0) 2024.09.12
[CI/CD] YAML Anchor  (0) 2024.07.30
[CI/CD] YAML 기본  (0) 2024.07.30
[CI/CD] Gitlab stop action  (0) 2024.07.29