繁体   English   中英

如何根据.gitlab-ci.yml 中所做的更改跳过工作?

[英]How can I skip a job based on the changes made in .gitlab-ci.yml?

我在 GitLab CI/CD 中有两个工作: build-job (大约需要 10 分钟)和deploy-job (大约需要 2 分钟)。 在管道中, build-job成功,而deploy-job由于脚本中的拼写错误而失败。 如何修复此错字并仅运行deploy-job ,而不是重新运行build-job

我当前的 .gitlab-ci.yml如下:

stages:
  - build
  - deploy

build-job:
  image: ...
  stage: build
  only:
    refs:
      - main
    changes:
      - .gitlab-ci.yml
      - pubspec.yaml
      - test/**/*
      - lib/**/*
  script:
      - ...
  artifacts:
    paths:
      - ...
    expire_in: 1 hour

deploy-job:
  image: ...
  stage: deploy
  dependencies:
    - build-job
  only:
    refs:
      - main
    changes:
      - .gitlab-ci.yml
      - pubspec.yaml
      - test/**/*
      - lib/**/*

  script:
    - ...

我想像:

  1. 触发器(我)修复了deploy-job脚本中的错字并推送更改
  2. 管道被触发
  3. 跑步者查看build-job / only / changes描述的文件并检测.gitlab-ci.yml文件中的单个更改
  4. 跑步者查看.gitlab-ci.yml文件并检测到有更改,但由于此更改不属于build-job部分并且之前的作业成功,因此跳过此作业
  5. 运行程序查看deploy-job / only / changes描述的文件,并检测.gitlab-ci.yml文件中的单个更改
  6. runner 查看.gitlab-ci.yml文件并检测到有变化,由于这个变化属于deploy-job部分,所以这个job被执行

这样,只执行deploy-job 可以使用rules还是only使用规则来完成?

有一个直接的方法,你只需要访问 gitlab CI 接口。

  1. 推动并让管道正常启动。
  2. 取消第一份工作。
  3. 运行所需的(部署)。

另一种方法是创建一个新作业,仅在需要时运行,您可以在其中设置非依赖部署。 只需复制没有依赖项的当前部署代码。 还添加手动模式

job:
script: echo "Hello, Rules!"
rules:
  - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    when: manual
    allow_failure: true

作为文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM