当前位置: 首页 > 面试题库 >

如何使用管道插件在特定节点上触发jenkins构建?

龚星洲
2023-03-14
问题内容

我有一个名为“ TestPipeline”的詹金斯管道作业。我想在两个不同的从属服务器上触发构建,标记为“ tester1”和“
tester2”,并且管道脚本在这里非常简单:

node('tester1') {
    build 'test_job'
}
node('tester2') {
    build 'test_job'
}

但是,当我运行TestPipeline作业时,“ test_job”将不会在我分配的节点上运行。但改为在随机节点上运行。

我想知道是否应该在我的“ test_job”上设置“限制可以在哪里运行该项目”。因此,我将其设置为“ tester”(“ tester”标签同时包含节点“
tester1”和“ tester2”)。但是,当我再次运行管道作业时,“ test_job”在“ tester2”上运行了两次。我应该期望该作业先在“
tester1”上运行,然后在“ tester2”上运行。这是为什么?是因为在构建步骤应该在哪个节点上构建时,“节点”步骤无关紧要?


问题答案:

请在这里查看错误。解决方法如下。

  1. 安装节点和标签参数插件
  2. 在test_job的配置中,选择“此构建已参数化”并添加Label参数,并将参数名称设置为“ node”
  3. 在管道脚本中,使用代码:

    build job: ‘test_job’, parameters: [[$class: ‘LabelParameterValue’, name: ‘node’, label: ‘tester1’]]
    build job: ‘test_job’, parameters: [[$class: ‘LabelParameterValue’, name: ‘node’, label: ‘tester2’]]

这项工作将按我的意愿进行。

但是 ,我认为这只是一种解决方法。我仍然相信这是一个错误。因为节点步骤应该执行其工作,而不是让其他插件来完成。



 类似资料:
  • 我有几个不同repo的Jenkins声明性管道,它们触发数据库刷新,以及依赖于数据库的单元测试。这些Jenkins作业是从GitHub中的pull请求触发的。 为了避免资源冲突,我需要防止这些作业同时运行——无论是在每个项目内还是在各个项目之间。 “油门并发构建”插件似乎就是为此而构建的。 我已经安装了插件,并配置了如下类别: 我在Jenkins文件中添加了“throttle”选项,其中一个存储库

  • 我有一个Jenkins管道作业(不是多分支管道),管道内的逻辑之一是,当gitlab scm上有一个合并请求时,我想基于触发此生成的合并请求的源分支构建一些东西。 我的问题是,在Jenkinsfile中,我如何动态地获取这个源分支,签出代码,并创建一个工作区,以便在这个分支上运行构建?

  • 我希望在我的Jenkinsfile中添加一个条件阶段,该阶段根据构建的触发方式运行。目前,我们设置为构建由以下方式触发: 对 git 存储库的更改,这些更改是在分支索引中选取的 用户使用 UI 中的“立即生成”按钮手动触发生成。 是否有任何方法可以根据这些操作中的哪些操作触发了构建来运行不同的管道步骤?

  • 我们看到在Jenkins多分支管道项目上触发了重复构建。构建通常使用来自Bitbucket的推送通知触发,并使用以下插件:https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview 然而,出于某种原因,我们现在看到了“双重”构建。如果查看触发的两个生成,一个由

  • Jenkins多分支管道总是在主节点上执行签出。在我的例子中,我想在另一个节点上构建。我在Jenkinsfile中的脚本如下所示: 我被迫结账再次在我的节点上分支以执行构建。从头开始在选定的节点上执行管道构建会好得多,但我找不到如何做到这一点。

  • 问题内容: 如何从内部触发另一个作业的生成? 我假设这项工作是同一个github组织下的另一个存储库,该存储库已经有自己的Jenkins文件。 我也只想在分支名称为master时执行此操作,因为触发任何本地分支的下游构建都没有意义。 更新: 不过,执行时我还是报错 找不到名为some-downtream-job-name的参数化作业 我确定这项工作存在于jenkins中,并且与当前工作位于同一组织