GitLab,具有依赖性的手动作业

Posted

技术标签:

【中文标题】GitLab,具有依赖性的手动作业【英文标题】:GitLab, manual job with dependency 【发布时间】:2021-01-14 22:36:05 【问题描述】:

我的管道有 3 个阶段:测试准备发布

测试,针对任何分支上的任何提交执行 Prepare,在 developma​​ster 上执行 发布,重用来自 Prepare 的工件并在 develop* 和 ma​​ster 上执行

我已在手动阶段添加“手动发布”,以手动发布来自 developma​​ster 之外的任何成功提交。然而,该阶段需要来自 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 依赖项

如何使用 GITLAB 功能标志在 CI yml 文件中按顺序运行同一阶段的作业

ubuntu安装gitlab

该作业依赖于具有过期/已擦除工件的其他作业

具有依赖作业/具有多个所需运行时间的作业的加权间隔调度

GitLab AutoDevops与Oracle工件