Phi*_*lip 16 jenkins jenkins-pipeline
我们有几个Java项目.每个项目都有自己的交付管道.
所有管道都有以下共同步骤(简化):
项目管道仅在项目特定属性(例如服务名称或测试和生产环境的IP地址)方面有所不同.
问题是:我们怎样才能避免所有项目共同的样板?Jenkins"Pipeline as code"是否提供类似管道模板的东西?
我可以想象一个模板可以在我们的项目管道中节省大量冗余代码/步骤.因此,设置新项目,维护管道,保持管道同步更容易......
Phi*_*lip 23
一种适合我们的方法是将管道的一部分(所有项目都有共同点)或甚至整个管道放入Jenkins共享库中.
例
以下脚本(template.groovy)在Jenkins共享库中定义为全局变量.该方法创建一个新的声明性管道(它也适用于脚本化管道语法).所有项目特定属性都通过templateParams地图提供.
/**
* Defines a pipeline template (as a sample with one job parameter
* that should be common for all pipelines)
*/
def createMyStandardDeclarativePipeline(Map templateParams) {
pipeline {
agent any
parameters {
string(name: 'myInput', description: 'Some pipeline parameters')
}
stages {
stage('Stage one') {
steps {
script {
echo "Parameter from template creation: " + templateParams.someParam
}
}
}
stage('Stage two') {
steps {
script {
echo "Job input parameter: " + params.myInput
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用此全局变量,以下行从我们的模板创建管道:
template.createMyStandardDeclarativePipeline(someParam: 'myParam')
Run Code Online (Sandbox Code Playgroud)
结论
这个概念可以很容易地定义管道模板并在多个项目中重用它们.
应用于问题中给出的示例,您可以使用简单的单行创建项目的交付管道:
template.createStandardDeliveryPipeline(serviceName: 'myService',
testEnv: '192.168.99.104',
productionEnv: '192.168.99.105')
Run Code Online (Sandbox Code Playgroud)
更新(30-09-2017):现在,Declarative Pipelines 1.2版正式支持在共享库中声明管道块.请参阅:https://jenkins.io/doc/book/pipeline/shared-libraries/#defining-declarative-pipelines
更新(06-10-2017):现在可以在此处找到扩展示例:https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/
| 归档时间: |
|
| 查看次数: |
11433 次 |
| 最近记录: |