首页 > 解决方案 > Gitlab CI 流水线作业

问题描述

下面是一个 Gitlab CI 管道代码

  - image_build
  - test1
  - test2


image_build:
  stage: image_build
  tags:
    - ddc
  script:
    - echo "image build"
  rules:
    - changes:
      - Dockerfile

test1:
  stage: test1
  tags:
    - ddc
  script:
    - echo "Test1 stage"
  rules:
    - when: on_success

test2:
  stage: test2
  tags:
    - ddc
  script:
    - echo "Test2 stage"
  rules:
     - when: on_failure

如果没有对 Dockerfile 进行任何更改,我需要执行阶段 test1、test2。当 Dockerfile 发生变化时,同样的阶段 test1、test2 也不应该执行。

第二种情况工作正常,但第一种情况不行。请帮助我启动并运行此管道。

标签: gitlab-ci

解决方案


如果您使用的是 GitLab CI 11.4 或更高版本,您可以使用only: changesrules: changes参数。基于官方文档:

使用changes关键字onlyexcept可以定义是否应根据 Git 推送事件修改的文件创建作业。


所以你的test1test2阶段可能看起来像这样:

⋮

test1:
    stage: test1
    tags:
        - ddc
    script:
        - echo "Test1 stage"
    rules:
        - when: on_success
    except:
        changes:
            - Dockerfile


test2:
    stage: test2
    tags:
        - ddc
    script:
        - echo "Test2 stage"
    rules:
        - when: on_failure
    except:
        changes:
            - Dockerfile


⋮

推荐阅读