【发布时间】:2019-05-07 18:10:26
【问题描述】:
我在 Jenkinsfile 中使用声明式管道,但我想从参数中派生一些变量。 例如给出:
parameters {
choice(name: 'Platform',choices: ['Debian9', 'CentOS7'], description: 'Target OS platform', )
}
我想添加一个类似的块:
script {
switch(param.Platform) {
case "Centos7":
def DockerFile = 'src/main/docker/Jenkins-Centos.Dockerfile'
def PackageType = 'RPM'
def PackageSuffix = '.rpm'
break
case "Debian9":
default:
def DockerFile = 'src/main/docker/Jenkins-Debian.Dockerfile'
def PackageType = 'DEB'
def PackageSuffix = '.deb'
break
}
}
这样我就可以在管道的其他地方使用变量。例如:
agent {
dockerfile {
filename "$DockerFile"
}
}
等等。
但脚本在参数、环境和代理部分是非法的。 只能分步使用。
我需要在代理块中使用参数,并且我想避免在不同步骤中使用变量的地方重复自己。
有没有一种健全的方法来实现这一目标?我的偏好依次是:
- 声明性管道
- 脚本化的管道(不太好)
- 通过 Jenkins UI 的插件(最差)
不管它是否实际共享,共享库在这里可能是合适的。
其目的是通过创建参数化构建并为不同的参数集调用它来支持多配置项目,每个配置都有一个红色/蓝色状态灯。 可能是我假设了一个“老式”的设计。在这种情况下,可接受的答案将解释创建多配置多分支管道的现代最佳实践。类似:https://support.cloudbees.com/hc/en-us/articles/115000088431-Create-a-Matrix-like-flow-with-Pipeline 或 Jenkins Pipeline Multiconfiguration Project
另请参阅Multiconfiguration / matrix build pipeline in Jenkins,了解关于最佳实践的不太具体的讨论。
【问题讨论】:
标签: jenkins jenkins-pipeline jenkins-groovy