如何仅使用 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。