GitLab CI 手动启动作业(部署)

Posted

技术标签:

【中文标题】GitLab CI 手动启动作业(部署)【英文标题】:GitLab CI Start job manually (deployment) 【发布时间】:2016-08-08 09:46:49 【问题描述】:

是否可以将 gitlab ci 作业标记为手动启动?

我需要它来部署应用程序,但我想决定是否要部署它

【问题讨论】:

【参考方案1】:

自从发布第一个答案后,情况发生了变化。这是原始Gitlab Issue 的链接。现在支持做类似的事情

production:
  stage: deploy
  script: run-deployment $OMNIBUS_GITLAB_PACKAGE
  environment: production
  when: manual

注意when: manual 属性。 UI 会自行更新,以便为用户提供触发作业的方式。

【讨论】:

有没有办法让这种手动方式与唯一/更改规则一起使用?我的意思是,当我在 repo 中的目标目录中没有更改时(但有一个影响配置 yaml 中的构建),我仍然希望能够手动触发管道,但仍然有它会在时自动运行。现在,等我有的时候触发,没有变化的时候根本不出现。【参考方案2】:

afaik 不直接支持手动批准的构建步骤。但是使用ci triggers 应该可以实现类似的行为。

build_package:
  stage: build
  script:
  - make build

upload_package:
  stage: package
  script:
  - if [ -n "$UPLOAD_TO_S3" ]; then make upload; fi

然后您可以通过发出 POST 请求并传递配置的变量来触发重建。

curl -X POST \
  -F token=TOKEN \
  -F ref=master \
  -F "variables[UPLOAD_TO_S3]=true" \
  https://gitlab.example.com/api/v3/projects/9/trigger/builds

如果你有自己的 gitlab 实例,应该可以在每个合并请求上注入 javascript 按钮,这将进行 curl 调用。

【讨论】:

在较新版本的 Gitlab 中,作业定义的 only/except 部分中的 - triggers 标志可能会派上用场,因为它可以控制作业是否仅在使用触发器时运行/未使用。【参考方案3】:

GitLab 13.5(2020 年 10 月)为when: manual 功能添加了更多功能,以支持trigger

使用手动作业触发下游或子管道

以前,无法将触发器作业配置为等待手动操作。这使得配置下游或子管道触发器以等待用户在运行之前单击它们变得具有挑战性。

在此版本中,我们添加了添加 when: manual 以触发作业的功能。使用此关键字可让触发作业等到您单击播放按钮。这使您可以更好地控制下游和子管道,并且它们只会在您希望它们运行时运行。

请参阅 Documentation 和 Issue。

【讨论】:

以上是关于GitLab CI 手动启动作业(部署)的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab-CI:测试作业失败

如何利用Gitlab-ci持续部署到远程机器?

gitlab+gitlab-ci+docker自动化部署

GitLab CI 对 Docker 构建作业的无效参数

.gitlab-ci.yml配置参数

在Gitlab CI中部署Helm图表时,如何将节点主机名修复太长时间