gpt4 book ai didi

jenkins - 如何使用声明式 Jenkins 管道在同一节点上运行多个阶段?

转载 作者:行者123 更新时间:2023-12-03 07:35:23 25 4
gpt4 key购买 nike

目标
在同一节点上运行声明式 Jenkins 管道的多个阶段。

设置
这只是一个显示问题的最小示例。有 2 个 Windows 节点“windows-slave1”和“windows-slave2”,均标有“windows”标签。

注意:我真正的 Jenkinsfile 无法使用全局代理,因为有一些阶段需要在不同节点上运行(例如 Windows 与 Linux)。

预期行为
Jenkins 根据标签选择“阶段 1”中的节点之一,并在“阶段 2”中使用相同的节点,因为变量 windowsNode 已更新为“阶段 1”中选择的节点。

实际行为
“阶段 2”有时在与“阶段 1”相同的节点上运行,有时在不同的节点上运行。请参阅下面的输出。

Jenkins文件

#!groovy

windowsNode = 'windows'

pipeline {
agent none
stages {
stage('Stage 1') {
agent {
label windowsNode
}
steps {
script {
// all subsequent steps should be run on the same windows node
windowsNode = NODE_NAME
}
echo "windowsNode: $windowsNode, NODE_NAME: $NODE_NAME"
}
}
stage('Stage 2') {
agent {
label windowsNode
}
steps {
echo "windowsNode: $windowsNode, NODE_NAME: $NODE_NAME"
}
}
}
}

输出

[Pipeline] stage
[Pipeline] { (Stage 1)
[Pipeline] node
Running on windows-slave2 in C:\Jenkins\workspace\test-agent-allocation@2
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] }
[Pipeline] // script
[Pipeline] echo
windowsNode: windows-slave2, NODE_NAME: windows-slave2
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Stage 2)
[Pipeline] node
Running on windows-slave1 in C:\Jenkins\workspace\test-agent-allocation
[Pipeline] {
[Pipeline] echo
windowsNode: windows-slave2, NODE_NAME: windows-slave1
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] End of Pipeline
Finished: SUCCESS

您知道设置有什么问题吗?我猜这就是 Jenkinsfile 的解析和执行方式。

还有其他建议吗?也许有一个 Jenkins API 可以在最初设置 windowsNode 时根据“windows”标签选择节点。

最佳答案

自 Declarative Pipeline 插件 1.3 版起,正式支持此功能。它的正式名称为“顺序阶段”。

pipeline {
agent none

stages {
stage("check code style") {
agent {
docker "code-style-check-image"
}
steps {
sh "./check-code-style.sh"
}
}

stage("build and test the project") {
agent {
docker "build-tools-image"
}
stages {
stage("build") {
steps {
sh "./build.sh"
}
}
stage("test") {
steps {
sh "./test.sh"
}
}
}
}
}
}

官方公告在这里:https://jenkins.io/blog/2018/07/02/whats-new-declarative-piepline-13x-sequential-stages/

关于jenkins - 如何使用声明式 Jenkins 管道在同一节点上运行多个阶段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44870978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com