【问题标题】:Jenkins Pipeline - How to maintain over timeJenkins Pipeline - 如何随着时间的推移进行维护
【发布时间】:2018-09-08 08:10:18
【问题描述】:

我目前使用Cloudbees Jenkins Core作为我的 Jenkins 解决方案。

我正在使用Jenkins Pipelines 来编写我们的 Jenkins 作业配置。这些管道存储在 GitHub 存储库中。每个 Jenkins 作业在创建时都连接到从中提取源代码的 GitHub 存储库,而这就是存储 Jenkinsfile 和 Jenkins 读取的位置。

下面是一些关于如何配置 Jenkins 作业的高级照片。

这些作业配置方式的优点是始终从主分支读取Jenkinsfile。这意味着如果 rouge 开发人员试图从自己的分支中从 Jenkinsfile 中删除阶段,这并不重要,因为始终从主分支(始终受到保护)读取 Jenkinsfile

但是,这样做的一个巨大缺点 - 作为 devops 工程的团队和开发人员如何更改 Jenkinsfile?例如,假设开发人员创建了一个名为 feature-jenkins-search 的分支,并且他们编辑了 Jenkinsfile,在管道中添加了一个新阶段。每当他们将这些更改推送到 GitHub 进行测试时——他们无法测试,因为它总是从主分支读取?意味着 devops 工程必须直接在 master 分支上工作? 当然这不是最好的方法,还有更好的配置可以设置吗?

我们确实希望仍然提供安全性,如果开发人员是流氓并且

【问题讨论】:

  • Devops 是企业中的一个非常精致的部分。如果某些开发人员更改或损坏管道,新软件发布或整个持续交付可能会受到影响。给我一个你的管道步骤的例子,我可以分享我的方法。
  • 流水线步骤是什么意思?我们在 package.json 中有 npm 测试、Snyk 安全测试、checkmarx 安全测试、版本检查等阶段。他们只是几个例子。我们只需要一种适当的方式让团队开发和构建管道,它仍然确保如果它们合并到另一个分支,它会从 target 分支读取 Jenkinsfile。 E.G master,如果他们试图推入 master :)

标签: jenkins groovy version-control jenkins-pipeline cloudbees


【解决方案1】:

您真的应该研究一下Jenkins multi-branch pipeline 功能。 Jenkins 多分支管道允许在 Jenkins 中创建单个配置项(有点像一个文件夹),它可以使用 Jenkinsfile 检测 GitHub 存储库中的所有分支和拉取请求,并使用自动创建的作业构建它们。在 Jenkins 中配置此多分支管道对象时,您会在 GitHub 存储库中找到许多用于构建各种分支和拉取请求的作业。

因此,您的开发人员应该在他们在 GitHub 上工作的每个分支中维护一个 Jenkinsfile,以便在您的 Jenkins 服务器中构建该分支。

如果需要条件阶段/当每个分支中的 Jenkinsfile 管道中的条件时,可以使 Jenkinsfile 执行特定于分支的处理。

您可以锁定主分支,以便其他分支的代码和 Jenkinsfile 更改只能与已批准的 PR(拉取请求)合并。 Jenkins 和 GitHub 之间有很好的集成,因此您可以将主分支配置为仅在 PR 可在 Jenkins 中构建时才允许合并 PR。因此,如果开发人员将新阶段/处理添加到正在合并到 master 的分支上的 Jenkinsfile,则应该对其进行验证,以便您的 master 分支的构建不会被破坏。

Jenkins 多分支管道对象中有很多可配置性,用于检测和处理分支,可能需要进行试验以使其适合您的团队所需。如果您在 Jenkins 中找不到此功能,可能是因为未安装正确的 Jenkins 管道和 GitHub 相关插件。

您还可以查看一个类似的 Jenkins 功能,称为 Jenkins GitHub 组织文件夹,它允许在 GitHub 组织级别检测和构建所有存储库和分支。但是在开始的时候,我建议先在单个 repo 级别查看多分支管道。

这些功能在 Jenkins pipeline documentation 中进行了讨论。我们将这些功能与我们的内部 GitHub 和 Jenkins 服务器一起使用,并且运行良好。

我想你会发现在主分支中使用单个 Jenkinsfile 来构建所有分支的想法是行不通的,正如你所见!

【讨论】:

  • 刚刚在更大的屏幕上查看了您的屏幕截图,发现您正在使用 GH org 功能。我认为您需要信任开发人员在分支上配置 Jenkinsfile 并让他们在 Jenkins 中构建..
  • 感谢您的回复。我很高兴让开发人员在分支上配置 Jenkinsfile,但是如果他们只是删除整个东西,删除管道并放入 echo "hello" 会通过构建 - 然后他们尝试将其合并到掌握?我很高兴让他们开发,但有没有办法设置 GitHub 组织,以便如果打开 PR,它会从目标分支读取 Jenkinsfile? E.G master 如果他们正在合并到 master - 谢谢。
  • 对于 PR,它将显示所有差异。如果这样查看 PR,您会发现它以某种不需要的方式更改了 Jenkinsfile。如果您不进行审核,则很难检测到此类更改。从目标分支读取 Jenkinsfile 将不再允许将更改传播到源分支中的 Jenkinsfile。想想如果没有审查,您将无法注意到这些变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多