GitLab,具有依赖性的手动作业
Posted
技术标签:
【中文标题】GitLab,具有依赖性的手动作业【英文标题】:GitLab, manual job with dependency 【发布时间】:2021-01-14 22:36:05 【问题描述】:我的管道有 3 个阶段:测试、准备和发布。
测试,针对任何分支上的任何提交执行 Prepare,在 develop 和 master 上执行 发布,重用来自 Prepare 的工件并在 develop* 和 master 上执行我已在手动阶段添加“手动发布”,以手动发布来自 develop 和 master 之外的任何成功提交。然而,该阶段需要来自 Prepare 的工件。我使用needs
来运行Prepare,但是如果我们不触发“手动发布”,那么它会在Test 之后执行,这是浪费时间和资源。
我们可以将现有工作附加/导入/合并到另一个工作吗?
我尝试在手动发布中导入Prepare作业,但没有成功:
build-and-publish-manually:
<<: *prepare-docker
<<: *build-and-publish
except:
variables:
- $CI_COMMIT_REF_NAME == $DEVELOP_BRANCH
- $CI_COMMIT_REF_NAME == $MASTER_BRANCH
when: manual
每个作业都应该在不同的运行器上执行; prepare-artifact
在 Docker 运行程序中执行,而 build-and-publish
需要一个 Shell 运行程序。
【问题讨论】:
根据我的手动作业经验,我们只是手动运行整个管道,然后才执行所需的手动步骤。真的这么浪费资源吗?我的意思是您多久使用一次这种手动执行,并且只需要执行一个步骤会消耗多少?对于我们使用 Jenkins 的更高级的管道,很容易将其配置为从特定构建号(例如,作为参数)获取工件。 【参考方案1】:解决方案是制作第一份工作手册,下一份“需要”它。
我添加了一个手动触发的手动准备作业,并且发布作业配置为needs
手动准备。这样他只有在 Manual Prepare 完成后才会被执行。
# ...
prepare-docker-manually:
<<: *prepare-docker
when: manual
build-and-publish-manually:
<<: *build-and-publish
except:
variables:
- $CI_COMMIT_REF_NAME == $DEVELOP_BRANCH
- $CI_COMMIT_REF_NAME == $MASTER_BRANCH
【讨论】:
以上是关于GitLab,具有依赖性的手动作业的主要内容,如果未能解决你的问题,请参考以下文章
为 Gitlab CI Dockerizing Nodejs 依赖项