GeekFactory

int128.hatenablog.com

GitLab CI/CDで特定のファイルが変更された場合にのみジョブを実行する

GitLab 11.4から only:changes という記法がサポートされました.これにより,特定のファイルが変更された場合のみジョブを実行できます.

https://docs.gitlab.com/ee/ci/yaml/#onlychangesexceptchanges

例えば,以下のように記述すると,ブランチをpushした時に terraform/ フォルダのファイルが変更されている場合にのみジョブが実行されます.

stages:
  - build

terraform_plan:
  stage: build
  only:
    changes:
      - terraform/**/*
      - .gitlab-ci.yml
  image:
    name: hashicorp/terraform:0.12.8
    entrypoint:
      - /usr/bin/env
  script:
    - cd terraform/
    - terraform --version
    - terraform init
    - terraform validate
    - terraform plan -out=plan.tfplan
  artifacts:
    name: plan
    paths:
      - terraform/plan.tfplan
  tags:
    - terraform

only はブランチ名と組み合わせることも可能です.以下のように記述すると,先ほどの条件に加えて,masterブランチに対してのみジョブが実行されます.

  only:
    changes:
      - terraform/**/*
      - .gitlab-ci.yml
    refs:
      - master

.gitlab-ci.yml を変更した場合は何らかの副作用がある場合が多いので,上記のように .gitlab-ci.yml を変更した場合もジョブが実行されるようにしておくとよいでしょう.