如果有可用的构建执行器,为什么声明性管道需要 运行 on master?
Why declarative pipelines need to run on master if there are build executors available?
我使用的是最新的 Jenkins 版本 2.286,自此更新以来,有一个安全提示:“您应该设置分布式构建。在控制器节点上构建可能是一个安全问题。请参阅 the documentation。”
但我已经用三个 Jenkins 节点这样做了,我也完全理解安全隐患。
这里的问题是,有两个作业需要 运行 一个主节点,因为它们是部署那些 Jenkins 节点的作业。这意味着我无法将构建执行程序减少到 0。
我也试过使用 Job Restrictions plugin 来限制哪些作业可以 运行 在 master 上。这里的问题是我所有的工作都在等待主队列确实有可用的空闲插槽。我想知道为什么,因为它们都是声明性管道并定义如下内容:
agent {
label 'some-different-node-label'
}
这意味着它们并没有真正在主节点上执行。
这里的问题是:
- 这是故意让所有作业在切换代理之前都需要主节点吗?
- 是否有任何配置选项可以更改它?
- 有没有办法在 master 上执行部署作业,即使没有定义任何执行(绕过该行为)?
谢谢。
使用声明式管道,轻量级代码检出在主节点上完成,以获得该作业的 Jenkinsfile。虽然这没有在 Master 上使用执行程序,但也许作业限制插件仍在阻止它(我之前没有使用过它所以无法评论)
某些管道操作也被委托回主节点(例如 withAWSParameterStore
步骤。
如果您查看声明式管道作业的控制台输出,您会在看到管道开始之前看到大量输出(主要围绕库签出或 git 签出)[Pipeline] Start of Pipeline
.一切尽在大师身上
遗憾的是,这无法更改,因为 Master 需要执行此工作以找出将工作委托给哪种代理类型。
根据您是 运行 代理人的方式,您可以使用类似 EC2 Cloud Plugin 之类的东西来生成不需要工作的代理节点
我使用的是最新的 Jenkins 版本 2.286,自此更新以来,有一个安全提示:“您应该设置分布式构建。在控制器节点上构建可能是一个安全问题。请参阅 the documentation。”
但我已经用三个 Jenkins 节点这样做了,我也完全理解安全隐患。
这里的问题是,有两个作业需要 运行 一个主节点,因为它们是部署那些 Jenkins 节点的作业。这意味着我无法将构建执行程序减少到 0。
我也试过使用 Job Restrictions plugin 来限制哪些作业可以 运行 在 master 上。这里的问题是我所有的工作都在等待主队列确实有可用的空闲插槽。我想知道为什么,因为它们都是声明性管道并定义如下内容:
agent {
label 'some-different-node-label'
}
这意味着它们并没有真正在主节点上执行。
这里的问题是:
- 这是故意让所有作业在切换代理之前都需要主节点吗?
- 是否有任何配置选项可以更改它?
- 有没有办法在 master 上执行部署作业,即使没有定义任何执行(绕过该行为)?
谢谢。
使用声明式管道,轻量级代码检出在主节点上完成,以获得该作业的 Jenkinsfile。虽然这没有在 Master 上使用执行程序,但也许作业限制插件仍在阻止它(我之前没有使用过它所以无法评论)
某些管道操作也被委托回主节点(例如 withAWSParameterStore
步骤。
如果您查看声明式管道作业的控制台输出,您会在看到管道开始之前看到大量输出(主要围绕库签出或 git 签出)[Pipeline] Start of Pipeline
.一切尽在大师身上
遗憾的是,这无法更改,因为 Master 需要执行此工作以找出将工作委托给哪种代理类型。
根据您是 运行 代理人的方式,您可以使用类似 EC2 Cloud Plugin 之类的东西来生成不需要工作的代理节点