在我的桩线中,我正在我的一个阶段中从我的主节点变为从节点
pipeline {
agent any
stages {
stage('Install Deps...') {
steps {
echo 'Do something here'
}
}
stage('Build') {
steps {
echo 'Build stuff here...'
stash includes: 'dist/**/*', name: 'builtSources'
node('Protractor') {
dir('/some-dir/deploy') {
unstash 'builtSources'
}
}
}
}
stage('Tests') {
steps {
parallel (
"Chrome": {
echo 'Chrome testing here...'
}
)
}
}
}
}
我可以从Jenkins的控制台输出中看到它在第一阶段开始时正确地说'在master上运行',并且在我的第二阶段改为'在Protractor上运行'。当第三个'Tests'阶段开始时,我没有看到节点在控制台输出中变回master,这是预期的行为吗?
除非使用node()块明确告知,否则阶段是否应在master上运行?
你有一个嵌套节点。这相当于:
node {
//run stuff on any node
node('agent'){
//run stuff on agent; other node is still busy
}
//return to original node; no message since it is still open
}
//outside of all nodes
这是适合我的示例,也可以并行执行:
pipeline {
agent {
label "server1"
}
options {
skipDefaultCheckout true
}
stages {
stage("Some stage 1"){
steps{
script {
echo "Hello world"
}
}
}
stage("Some stage 2") {
agent {
label 'server2'
}
steps{
script {
echo "Hello world"
}
}
}
}
post {
always {
deleteDir()
cleanWs()
}
}
}
简短的回答是,如果您希望在特定节点/代理上运行阶段,那么您应该指定它。如果不是,则下一阶段运行的节点将受到节点的“使用”设置(即“尽可能使用此节点”或“仅使用标签构建作业...”)的影响。在我的设置中,一旦执行从主服务器切换到代理节点,它将不会切换回,除非代理上的所有执行程序都在使用且主服务器具有打开的执行程序。听起来你当前的设置是类似的。