【问题标题】:How to trigger Jenkins builds remotely and to pass parameters如何远程触发 Jenkins 构建并传递参数
【发布时间】:2013-12-20 00:30:39
【问题描述】:

我正在远程调用 Jenkins 作业:

wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT

这里调用了Test-Jenkins 作业,DOIT 是我使用的安全令牌。

现在我需要将一些参数传递给这个作业的 build.xml 文件,即Test-Jenkins

我还没有弄清楚如何传递变量。

【问题讨论】:

    标签: jenkins continuous-integration continuous-deployment continuous-delivery


    【解决方案1】:

    请参阅 Jenkins 文档:Parameterized Build

    下面是您感兴趣的行:

    http://server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value
    

    【讨论】:

    • 但它会触发构建。而且您需要实际进行 POST 调用。我想为人们提供默认参数值的链接,例如GET http://:8080/job/Test-Jenkins/build?some_param=xyz 应该打开一个将 some_param 设置为值 xyz 的网页。然后使用可以按“构建”。
    • 库存版本不支持此功能,您需要一个插件。
    • 是否有插件可以处理帖子?我想要一个用户链接,点击一下就可以触发特定的参数化构建作业
    • 触发后有没有办法获取预定的构建作业id?
    【解决方案2】:

    要传递/使用变量,首先在 Jenkins 的配置部分创建参数。您使用的参数可以是文本、字符串、文件等类型。

    创建它们后,在您想要的字段中使用变量引用。

    例如:我为Email-subjectEmail-recipentList 配置/创建了两个变量,并在EMail-ext 插件中使用了它们的引用(附截图)。

    【讨论】:

    • // , 你能告诉我们一种使用 API 的方法吗?
    • 我使用过简单的 HTTP 调用,例如 POST 或 GET 例如:RESTCallsUtility.invokePostMethod(auth, "/Services/job/Jira2BugDB/buildWithParameters?token=jira2bugdb_remote&Operation=create-single&Argument="+projectKey , "数据")
    【解决方案3】:

    在您的 Jenkins 作业配置中,勾选名为“This build is parameterized”的框,单击“Add Parameter”按钮并选择“String Parameter”下拉值。

    现在定义您的参数 - 示例:

    现在您可以在作业/构建管道中使用您的参数,例如:

    接下来要使用自己/自定义参数触发构建,调用以下 URL(使用 POST 或 GET):

    http://JENKINS_SERVER_ADDRESS/job/YOUR_JOB_NAME/buildWithParameters?myparam=myparam_value
    

    【讨论】:

    • 最新的 Jenkins 文档说,出于安全原因,GET 已被贬低,因此应该首选 POST。
    • 我的网址中缺少“工作”。
    • 多分支项目呢?
    • @Learner 你找到多分支项目的解决方案了吗?
    【解决方案4】:

    您可以简单地使用 jenkinsfile 进行尝试。使用以下管道脚本创建 Jenkins 作业。

    pipeline {
        agent any
    
        parameters {
            booleanParam(defaultValue: true, description: '', name: 'userFlag')
        }
    
        stages {
            stage('Trigger') {
                steps {
                    script {
                        println("triggering the pipeline from a rest call...")
                    }
                }
            }
            stage("foo") {
                steps {
                    echo "flag: ${params.userFlag}"
                }
            }
    
        }
    }
    

    手动构建一次作业以对其进行配置 & 只需创建一个 http POST 请求到 Jenkins 作业,如下所示。

    格式为http://server/job/myjob/buildWithParameters?PARAMETER=Value

    curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST
    

    【讨论】:

    • 这里如何使用脚本添加认证令牌?
    【解决方案5】:

    为了补充这个问题,我发现您不必使用/buildWithParameters 端点。

    在我的场景中,我有一个脚本可以触发 Jenkins 在部署后运行测试。其中一些测试需要有关部署的额外信息才能正常工作。

    如果我尝试在不需要参数的作业上使用/buildWithParameters,则作业将不会运行。我不想进入并编辑每个作业以要求虚假参数只是为了让作业运行。

    相反,我发现你可以像这样传递参数:

    curl -X POST --data-urlencode "token=${TOKEN}" --data-urlencode json='{"parameter": [{"name": "myParam", "value": "TEST"}]}' https://jenkins.corp/job/$JENKINS_JOB/build
    

    有了这个json=...,它就会在调用时将参数myParam 和值TEST 传递给作业。但是,即使 Jenkins 作业不期望参数 myParam,它仍然会运行。

    唯一没有涵盖的情况是,如果作业具有未在json 中传递的参数。即使作业为参数设置了默认值,它也将无法运行作业。在这种情况下,当您调用/build 时,您将遇到以下错误消息/堆栈跟踪:

    java.lang.IllegalArgumentException: No such parameter definition: myParam

    我意识到这个答案已经晚了几年,但我希望这对其他人有用!

    注意:我使用的是 Jenkins v2.163

    【讨论】:

    • 也许POST 应该改为buildWithParameters 而不是build?根据cloudbees文章,如果使用前者,将使用默认值。这是文章:support.cloudbees.com/hc/en-us/articles/…
    • @haridsv 如果您在脚本中使用它,可能会触发使用和不使用任何参数的构建,buildWithParameters 将在未参数化的作业上失败,而build 将任何工作都不会失败。
    • 感谢您的澄清!我想如果脚本非常通用并且不是为这项特定工作编写的,这很重要。
    • 不仅关于通用性,还包括参数是否在管道作业中声明但尚未运行。它可以工作,但有一个缺点(可能主要取决于您的使用情况),在这种情况下,响应位置不包含可用于跟踪构建或解析构建 URL 的队列项目 URL
    【解决方案6】:

    您可以使用以下查询远程触发 Jenkins 构建并传递参数。

    JENKINS_URL/job/job-name/buildWithParameters?token=TOKEN_NAME&param_name1=value&param_name1=value
    

    JENKINS_URL(可以)=https://&lt;your domain name or server address&gt;

    TOKE_NAME 可以使用配置选项卡创建

    【讨论】:

      【解决方案7】:

      当我们必须向 jenkins 作业发送多个触发参数时,以下命令有效。

      curl -X POST -i -u "auto_user":"xxxauthentication_tokenxxx" "JENKINS_URL/view/tests/job/helloworld/buildWithParameters?param1=162&param2=store"
      

      【讨论】:

        【解决方案8】:

        curl -H "Jenkins-Crumb: &lt;your_crumb_data&gt;" -u "&lt;username&gt;:&lt;password&gt;" "http://&lt;your_jenkins_url&gt;?buildWithParameters?token=&lt;your_remote_api_name&gt;?&lt;parameterA&gt;=&lt;val_parameter_A&gt;&amp;&lt;parameterB&gt;=&lt;val_parameterB&gt;"

        您可以根据需要更改以下参数:

        <your_crumb_data>
        <username>
        <password>
        <your_jenkins_url>
        <your_remote_api_name>
        <parameterA>
        <parameterB>
        <val_parameter_A>
        <val_parameter_B>
        

        注意:放置双引号可能很关键。请注意。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-07
          • 1970-01-01
          • 1970-01-01
          • 2017-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多