And*_*ang 24 jenkins jenkins-pipeline
我有一个名为"TestPipeline"的Jenkins管道工作.我想触发2个标记为"tester1"和"tester2"的不同从属的构建.管道脚本在这里非常简单:
node('tester1') {
build 'test_job'
}
node('tester2') {
build 'test_job'
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行TestPipeline作业时,"test_job"将不会在我指定的节点上运行.但是在随机节点上运行.
我想知道是否应该在我的"test_job"上设置"限制此项目可以运行的位置".所以我把它设置为"tester"("tester"标签包含节点"tester1"和"tester2").但是当我再次运行管道作业时,"test_job"在"tester2"上运行两次.我应该期望首先在"tester1"上运行该作业,然后在"tester2"上运行.这是为什么?是因为"节点"步骤在构建构建步骤的哪个节点上无关紧要?
And*_*ang 22
请在这里查看错误.解决方案如下.
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester1']]
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester2']]
Run Code Online (Sandbox Code Playgroud)
这项工作将按照我的意愿建造.
但是,我认为这只是一种解决方法.我仍然相信这是一个错误.因为节点步骤应该完成它的工作,而不是让其他插件为它做.
小智 6
我做了同样的事,但是使用Node参数,所以我可以直接使用节点列表运行作业,或者运行管道(在管道中我使用Choice参数来获得可用节点列表).所以在我的情况下:
node_namenode,放置可能的选择,因此运行管道可以选择应该在哪个节点上运行.要插入管道脚本的代码:
build job: 'my_job',
parameters: [[$class: 'NodeParameterValue', name: 'node_name', labels: ["$node"], nodeEligibility: [$class: 'AllNodeEligibility']]]
Run Code Online (Sandbox Code Playgroud)
这是我如何让它工作的
创建一个 'job' 'test_job' 参数类型为 'label' ,名称为 'node',值可以是任何字符串。(这是要触发的作业) .Set 'Restrict where this project can be run' 为标签值
创建一个参数类型为“节点”的“管道”。从管道部分,使用以下脚本
请注意 test_job 的标签是 ${env.NODE_NAME} ,它将根据用户的选择由管道设置
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
script {
build job: 'test_job', parameters: [
[$class: 'LabelParameterValue', name: 'node', label: "${env.NODE_NAME}" ]
]
}}}}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46628 次 |
| 最近记录: |