2017-04-20 99 views
1

我有一个内部网站,我正在为我的公司开发,以便从Jenkins作业中触发构建我们的移动应用程序。该网站是用AngularJS编写的,我使用http模块来调用Jenkins。Jenkins参数化构建触发器,不带参数

我在我的服务角度的方法是这样的:

postBuildRequest : function(platform, project, ticket, environment, username, password, callback) 
    { 
    var method = 'GET'; 
    var url = "http://JENKINS_URL/JOB_NAME/buildWithParameters"; 
    var params = 
    { 
     token: "some_job_token", 
     parameter: [{ platform: platform, project: project, ticket: ticket, environment: environment }] 
    } 
    var headers = 
    { 
     "Authorization": "Basic " + window.btoa(username + ":" + password) 
    } 
    var config = 
    { 
     method: method, 
     url: url, 
     headers: headers, 
     params: params 
    }; 

    $http(config).then(
     function successCallback(response) { 
     console.log("postBuildRequest Success!! \n" + response.statusText + " with Status Code: " + response.status); 
     callback(response); 
     }, 
     function errorCallback(response) { 
     console.log("postBuildRequest Error :(\n" + response.statusText + " with Status Code: " + response.status); 
     callback(response); 
     } 
    ); 

    } 

我詹金斯作业具有以下参数设置:

enter image description here

的工作里面我的生成命令看起来像这样(壳):

# Parse the build variant 
if [$environment == 'live']; then 
    liveorstaging='--live' 
elif [$environment == 'staging']; then 
    liveorstaging='--staging' 
else 
    liveorstaging='' 
fi 

# Run the config buildandroid script 
if ! [ -z $ticket ]; then 
    config buildandroid $project -t $ticket $liveorstaging --commit 
else 
    config buildandroid $project --live --commit 
fi 

我可以触发b很好,但它失败了,因为它没有看到参数。

我的控制台吐出:

12:44:39 Usage: config buildandroid [OPTIONS] PROJECT 
12:44:39 
12:44:39 Error: Missing argument "project". 
12:44:39 Build step 'Execute shell' marked build as failure 
12:44:39 Finished: FAILURE 

如果我看参数,它们是空的:

enter image description here

所以......我明明做错事与我HTTP请求...任何想法?

+0

您的构建脚本包含语法错误 – jordanm

+0

这样做吗?该作业可以手动运行......(它最终失败,因为它调用的Python脚本存在问题......) –

+0

是的,您在环境检查中缺少空白,但即使该问题已修复,if条件也不会永远是真的,因为你在比较静态字符串('environment'应该是'$ environment')。 – jordanm

回答

1

那么......我修好了。我意识到,我是在https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build字面意思服用维基页面,张贴我所有的参数作为

PARAMETER=[{key:value}] 

,我应该做的事情就像这样:

var params = 
    { 
     token: token, 
     key1: value1, 
     key2: value2, 
     key3: value3, 
     key4: value4 
    } 

让我的网址是这样的:

buildWithParameters?environment=staging&platform=some_platform&project=some_project&ticket=some_ticket&token=eb_some_token