tar*_*yte 42 jenkins jenkins-pipeline
我试图了解如何构建我的Jenkins 2.7管道groovy脚本.我已经阅读了管道教程,但觉得它可以扩展这些主题.
我可以理解一个管道可以有很多stages,每个管道stage可以有很多steps.但是,a step();和a 之间的方法调用有什么区别stage呢sh([script: "echo hello"]);.应该在nodes的内部还是外部stage?工作的整体属性应该在内部还是外部node?
这是我在ubuntu主节点上的当前结构:
#!/usr/bin/env groovy
node('master') {
properties([
[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']]
]);
stage 'Checkout'
checkout scm
stage 'Build'
sh([script: "make build"]);
archive("bin/*");
}
Run Code Online (Sandbox Code Playgroud)
chr*_*s_f 36
的概念node,stage并且step是不同的:
node指定在那里的东西应该发生.你给出一个名字或标签,詹金斯在那里运行.
stage将您的脚本构建为高级序列.阶段在"管道舞台"视图中显示为列,具有舞台结果的平均舞台时间和颜色.
step是指明将要发生什么的一种方式.sh具有相似的品质,它是一种不同的行为.(您也可以使用build已指定为项目的内容.)
因此steps可以驻留在nodes中(如果它们不存在,则它们在主服务器上执行),并且nodes和steps可以构造成具有stages 的整体序列.
这取决于.任何node声明都会分配执行程序(在Jenkins主服务器或从服务器上).这要求您stash和unstash工作区作为另一个执行程序没有可用的签出源.
Pipeline DSL的几个步骤在flyweight执行器中运行,因此不需要在node块内.这可能对以下示例有帮助,您需要分配多个节点:
stage("Checkout") {
checkout scm
}
stage("Build") {
node('linux') {
sh "make"
}
node('windows') {
bat "whatever"
}
}
stage("Upload") {
...
Run Code Online (Sandbox Code Playgroud)
另一个(可能更现实的例子)是分配多个节点parallel.然后就没有必要让stage调用在另一个分配的执行程序(也就是内部node)中执行.
你的例子对我很好.没有必要node在单个stages中分配多个s ,因为这只是额外的开销.