pipeline {
agent none
stages {
stage('stage1') {
agent any
input {
message "What is your first name?"
}
steps {
echo "Test Stage1"
}
}
stage('stage2'){
steps{
echo 'Test Stage2'
}
}
}
}
1.在Jenkins的文献中:(https://www.jenkins.io/doc/book/pipeline/syntax/#agent)
代理无
当在管道块的顶层应用时,将不会为整个管道运行分配全局代理,并且每个阶段部分将需要包含其自己的代理部分。
- 在
stage2
中,我没有为它定义代理。但是当我构建管道时,echo命令仍然正常执行。
1.在这个jenkinsfile中,agent none
是顶级代理,agent any
是stage1
的stage代理。
在jenkins的文档中输入:
在应用任何选项之后,在进入该阶段的代理程序块或评估该阶段的when条件之前,该阶段将暂停
- 这是否意味着,输入是一个特殊的元素,所以只有顶层代理被应用于输入,而与我们在阶段级别中的代理无关,在哪个输入中定义?
- 这种继承是Jenkins还是groovy脚本的特性?
1条答案
按热度按时间kcwpcxri1#
echo
命令只是打印到控制台,它不关心代理,在服务器端执行的所有命令/groovy脚本(在jenkins示例上)
就像在你的例子中的命令
echo ""
,但是如果你使用需要工作空间的东西,你会得到错误仅在代理端执行特定命令,如
sh
块,它将通过jnlp协议(或ssh或其他任何内容,取决于您用于连接的内容)在代理上创建sh脚本,并将从jenkins远程执行此脚本input -暂停管道执行以等待批准,这可能是自动的或手动的,默认情况下需要一些时间。与此同时,代理获取并锁定工作区和重量级Jenkins执行器。因此,在一个阶段内在代理之外创建输入总是很好的。
我们有2+案例
1.correct和输入将不会锁定代理
1.在“agent none”上执行错误输入,但阶段仍将锁定顶级代理(agent any)
1.correctuse nested stages,input will use top lvl agent none as nested stages agent already executed and removed