如何仅使用 jenkinsfile 创建参数化的 jenkins 管道并使用 curl 远程触发它
How to create parameterised jenkins pipeline using jenkinsfile only and trigger it remotely using curl
我试图创建参数化的詹金斯管道。我在网上查过,我们必须在配置中 select“此项目已参数化”并在那里添加参数,但是是否可以在 jenkinsfile 中添加这些参数配置?
我知道我们可以在 jenkinsfile 中使用它:
parameters {
string(name: 'name')
string(name: 'env')
}
但是使用这个,当我尝试使用 curl 远程触发作业时,参数为空。另一方面,如果我使用“此项目已参数化”添加参数配置,则效果很好。
是否可以仅在 jenkinsfile 中进行这些配置?
我们以String参数为例
下面的管道片段将帮助您在 jenkinsfile 中包含 Straing 参数。
properties([
parameters([
string(name: 'DEPLOY_ENV', defaultValue: 'TESTING', description: 'The target environment')
])
])
因此,您的 jenkinsfile 将如下所示:
properties([
parameters([
string(name: 'DEPLOY_ENV', defaultValue: 'TESTING', description: 'The target environment', )
])
])
pipeline {
agent any
stages {
stage ("Example") {
steps {
script{
echo "Hello World"
echo "${params.DEPLOY_ENV}"
}
}
}
}
}
编辑:
使用下面的命令,我触发了 jenkins 作业。
curl -vvv -u "xxx:xxxx" -X POST "http://xx.xxx.xxx.xxx:8080/job/test-param/buildWithParameters?DEPLOY_ENV=SOURAV"
输出:
souravatta 的回答是正确的,但我使用了不同的方法,并想与示例分享。
//define the variable globally so that can be used by a fuction as well as pipeline
somevalue1=""; somevalue2=""; somevalue3=""; somevalue4="";
pipeline{
environment{
releasevalue = "r5"
depenv = "dev"
servicename = "Myservice"
setecsvalues = settingvalues(releasevalue,depenv,servicename)
}
agent any
stages{
stage(testing){
steps{
echo "${releasevalue}"
echo "${depenv}"
echo "${servicename}"
echo "${somevalue1}"
echo "${somevalue2}"
echo "${somevalue3}"
echo "${somevalue4}"
}
}
}
}
//Setting Values from this function, you can write any program here to dynamically set values or maybe read from an external file
def settingvalues(releasevalue,depenv,servicename){
//some code to set values dynamically
somevalue1 = value1
somevalue2 = value2
somevalue3 = value3
somevalue4 = value4
}
它包含了您所要求的更多内容,请耐心等待 :)
在环境块中我写了 3 个值和一个函数。您可以简单地编写值并在任何阶段使用它。
您可以编写一个函数和 return 一个通过动态设置的值。在这里我没有 returning 任何东西,因为我想设置 4 个值而不是 returning 一个。
在上面我定义了 4 个值,它们可以被函数使用,也可以在管道内部使用。
提示
如果在 Jenkinsfile 中硬编码变量值,那不是一个好的解决方案。相反,您需要做的是创建一个文件 JSON 或 Yaml。将它放在一个公共位置并使用 readJSON 或 readYaml 读取这些文件并动态提取值。这样,如果您必须管理具有许多值的大量应用程序,那么您可以简单地使用一个文件来放置所有值。这可以派上用场并节省大量时间,因为您不想经常编辑 Jenkisnfile。
我试图创建参数化的詹金斯管道。我在网上查过,我们必须在配置中 select“此项目已参数化”并在那里添加参数,但是是否可以在 jenkinsfile 中添加这些参数配置?
我知道我们可以在 jenkinsfile 中使用它:
parameters {
string(name: 'name')
string(name: 'env')
}
但是使用这个,当我尝试使用 curl 远程触发作业时,参数为空。另一方面,如果我使用“此项目已参数化”添加参数配置,则效果很好。 是否可以仅在 jenkinsfile 中进行这些配置?
我们以String参数为例
下面的管道片段将帮助您在 jenkinsfile 中包含 Straing 参数。
properties([
parameters([
string(name: 'DEPLOY_ENV', defaultValue: 'TESTING', description: 'The target environment')
])
])
因此,您的 jenkinsfile 将如下所示:
properties([
parameters([
string(name: 'DEPLOY_ENV', defaultValue: 'TESTING', description: 'The target environment', )
])
])
pipeline {
agent any
stages {
stage ("Example") {
steps {
script{
echo "Hello World"
echo "${params.DEPLOY_ENV}"
}
}
}
}
}
编辑:
使用下面的命令,我触发了 jenkins 作业。
curl -vvv -u "xxx:xxxx" -X POST "http://xx.xxx.xxx.xxx:8080/job/test-param/buildWithParameters?DEPLOY_ENV=SOURAV"
输出:
souravatta 的回答是正确的,但我使用了不同的方法,并想与示例分享。
//define the variable globally so that can be used by a fuction as well as pipeline
somevalue1=""; somevalue2=""; somevalue3=""; somevalue4="";
pipeline{
environment{
releasevalue = "r5"
depenv = "dev"
servicename = "Myservice"
setecsvalues = settingvalues(releasevalue,depenv,servicename)
}
agent any
stages{
stage(testing){
steps{
echo "${releasevalue}"
echo "${depenv}"
echo "${servicename}"
echo "${somevalue1}"
echo "${somevalue2}"
echo "${somevalue3}"
echo "${somevalue4}"
}
}
}
}
//Setting Values from this function, you can write any program here to dynamically set values or maybe read from an external file
def settingvalues(releasevalue,depenv,servicename){
//some code to set values dynamically
somevalue1 = value1
somevalue2 = value2
somevalue3 = value3
somevalue4 = value4
}
它包含了您所要求的更多内容,请耐心等待 :)
在环境块中我写了 3 个值和一个函数。您可以简单地编写值并在任何阶段使用它。
您可以编写一个函数和 return 一个通过动态设置的值。在这里我没有 returning 任何东西,因为我想设置 4 个值而不是 returning 一个。
在上面我定义了 4 个值,它们可以被函数使用,也可以在管道内部使用。
提示
如果在 Jenkinsfile 中硬编码变量值,那不是一个好的解决方案。相反,您需要做的是创建一个文件 JSON 或 Yaml。将它放在一个公共位置并使用 readJSON 或 readYaml 读取这些文件并动态提取值。这样,如果您必须管理具有许多值的大量应用程序,那么您可以简单地使用一个文件来放置所有值。这可以派上用场并节省大量时间,因为您不想经常编辑 Jenkisnfile。