GitLab의 조건부 빌드

이 블로그의 일반 독자는 내가 Jekyll을 사용하여 정적 사이트를 생성한다는 것을 알고 있습니다. 저는 GitLab을 사용하고 있습니다. master 분기를 푸시하면 생성 작업이 트리거됩니다.

그러나 Jekyll은 Ruby 기반이며 몇 가지 Gem 종속성이 필요합니다. 나는 또한 몇 가지 플러그인을 추가했습니다. 이러한 이유로 Docker image with all required dependencies 을 생성했습니다. 정기적으로 Bundler를 통해 Gemfile.lock의 버전을 업데이트합니다. 그런 다음 Docker 이미지를 다시 빌드해야 합니다.

따라서 두 가지 작업이 필요합니다.
  • Docker 이미지에 영향을 미치는 변경 사항을 포함하는 푸시 후 빌드합니다
  • .
  • 모든 푸시 후 사이트를 생성합니다.

  • 첫 번째로 트리거 조건은 Gemfile.lock , Dockerfile.gitlab-ci.yml 파일이 변경되었는지 여부입니다.

    문제는 비용과 시간이 많이 소요되는 작업이므로 조건이 충족되는 경우에만 빌드를 실행하는 방법입니다. GitLab의 빌드 파일 구성은 이에 대한 솔루션을 제공합니다. 작업에서 조건이 충족되는 경우에만 실행되도록 only 절을 구성할 수 있습니다. 조건은 다음과 같을 수 있습니다.
  • 분기 또는 태그와 같은 참조
  • 트리거(예: 푸시, 웹 UI 또는 API 호출)
  • 변수 값
  • 특정 파일의 변경
  • 기타 몇 개

  • 마지막 옵션은 우리 문제에 대한 답입니다. 파일 집합을 구성할 수 있으며 그 중 하나라도 변경된 경우 빌드가 실행되어야 합니다. 그렇지 않으면 아무것도 하지 마십시오.

    다음 구조로 변환됩니다.

    stages:
      - image                                        # 1
      - deploy                                       # 1
    
    build:                                           # 2
      stage: image                                   # 2
      image:
        name: gcr.io/kaniko-project/executor:debug
        entrypoint: [""]
      script: # Build the Docker image
      only:
        refs:
          - master                                   # 4
        changes:
          - Gemfile.lock                             # 5
          - Dockerfile                               # 5
          - .gitlab-ci.yml                           # 5
    
    pages:                                           # 3
      stage: deploy                                  # 3
      image:
        name: registry.gitlab.com/nfrankel/nfrankel.gitlab.io:latest
      script: # Generate the site
      only:
        refs:
          - master
    


  • 두 단계 정의
  • build 단계에서 image 작업을 정의합니다. 작업이 Docker 이미지를 생성합니다(Kaniko를 통해)
  • .
  • pages 단계에서 deploy 작업을 정의합니다. 이 작업은 Jekyll을 통해 사이트를 생성합니다
  • .
  • master 분기만 빌드
  • 이러한 파일이 변경된 경우에만 이미지를 빌드합니다
  • .

    이 시점에서 각 변경 사항은 빌드를 트리거합니다. 이미지 빌드 작업은 사이트 생성 전에 실행되지만 GitLab은 이미지가 변경되지 않은 경우 전자를 건너뜁니다.

    더 나아가려면:
  • only:changes / except:changes
  • only:changes / except:changes examples
  • GitHub: Running your workflow only when a push affects specific files

  • 2022년 5월 8일 A Java Geek에 원래 게시됨

    좋은 웹페이지 즐겨찾기