Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理脚本启动Jenkins构建_Batch File_Jenkins_Continuous Integration - Fatal编程技术网

Batch file 使用批处理脚本启动Jenkins构建

Batch file 使用批处理脚本启动Jenkins构建,batch-file,jenkins,continuous-integration,Batch File,Jenkins,Continuous Integration,我正在与Jenkins build服务器合作,为FPGA运行合成/模拟。 现在我有夜间构建,可以在Jenkins浏览器界面中手动启动构建 我的问题是: 是否可以在不使用浏览器界面的情况下使用批处理脚本启动作业生成? (我在Windows 7 64位上运行Jenkins。)下面是一个使用curl命令的示例(用于带有参数的作业): 以及没有参数的作业: curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/Y

我正在与Jenkins build服务器合作,为FPGA运行合成/模拟。 现在我有夜间构建,可以在Jenkins浏览器界面中手动启动构建

我的问题是:

是否可以在不使用浏览器界面的情况下使用批处理脚本启动作业生成?


(我在Windows 7 64位上运行Jenkins。)

下面是一个使用curl命令的示例(用于带有参数的作业):

以及没有参数的作业:

curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/buildWithParameters?PARAM1=value1&PARAM2=value
curl -X POST -u YOUR_USER:YOUR_USER_PASSWORD http://YOUR_JENKINS_URL/job/YOUR_JOB/build
如果您不想使用您的用户/密码,您可以为您的Jenkins用户生成API令牌:

并在curl命令中使用此标记:

curl -X POST http://YOUR_JENKINS_URL/job/YOUR_JOB/build?TOKEN=YOUR_API_TOKEN

您可以使用配置的令牌(而不是用户名/密码)触发Jenkins作业,这将允许您在不公开自己的凭据的情况下共享触发脚本

  • 转到作业的配置
  • 向下滚动至生成触发器,选中远程触发生成(例如,从脚本)框,然后输入身份验证令牌(例如,“我的令牌”)
  • 根据您的构建是否具有参数,复制身份验证令牌字段下方的一个URL
  • 然后在命令中使用该URL来触发生成。例如:

    curl -I https://${JENKINS_URL}/job/tmp/job/dummy-test/build?token=MY_TOKEN
    
    -I
    参数告诉
    curl
    打印响应的头部,您可以使用它来确定结果状态。如果成功,Jenkins回复HTTP 201

    $ curl -I https://<JENKINS_URL>/job/tmp/job/dummy-test/build\?token\=MY_TOKEN
    HTTP/1.1 201 Created
    Cache-Control: public
    Content-Length: 0
    Date: Mon, 11 Apr 2016 12:47:26 GMT
    Location: https://<JENKINS_URL>/queue/item/1707/
    Pragma: public
    Server: Apache-Coyote/1.1
    X-Content-Type-Options: nosniff
    Connection: keep-alive
    
    $curl-Ihttps:///job/tmp/job/dummy-test/build\?令牌\=我的令牌
    HTTP/1.1201已创建
    缓存控制:公共
    内容长度:0
    日期:2016年4月11日星期一12:47:26 GMT
    地点:https:///queue/item/1707/
    布拉格语:公共
    服务器:ApacheCoote/1.1
    X-Content-Type-Options:nosniff
    连接:保持活力
    
    当我试图通过curl触发我的作业时,结果总是出现“未授权”错误

    后来我发现这是因为我完全禁用了服务器上的匿名访问。解决方案是安装以下插件:


    来源:

    您可以使用带有-I选项的curl命令来执行此操作。为jenkins作业创建API令牌,并使用它触发作业。您也可以使用jenkins用户密码进行此操作

    命令将是

    curl -I -u auto:<user_api_token> http://<jenkins_Server>/job/test/build?token=wefiytgwiefiweihfqweiodf
    
    curl-I-u自动:http:///job/test/build?token=wefiytgwiefiweihfqweiodf
    
    结果将是

    更多信息

    在新Jenkins管道中的“构建触发器”下,选中“远程触发构建”(例如,从脚本)复选框。然后给Jenkins一个触发构建时需要的令牌

    未授权
    错误 远程触发构建的一个问题是,如果您正确设置了Jenkins并禁用了匿名用户访问,那么当您尝试从脚本触发构建时,将出现
    未授权
    错误(正如@keocra指出的)。您现在有两个选项:

  • 在触发生成时传递用户名和密码。这意味着您的脚本将需要包含用户名和密码,这意味着每个可以阅读您的脚本的人都将拥有用户名和密码,这几乎与匿名访问一样糟糕
  • 使用。此插件允许您使用远程触发构建功能,而无需用户名和密码。您所需要的只是之前生成的令牌
  • 触发构建 要远程触发构建,请运行

    curl JENKINS_URL/buildByToken/build?job=JobFoo&token=MyToken
    
    其中,
    JENKINS\u URL
    是您的JENKINS实例的URL,
    JobFoo
    是您的作业名称,
    MyToken
    是您在Trigger bulids下远程输入的令牌


    当然,您不需要使用
    curl
    ;您还可以使用
    wget
    或任何其他可以发出HTTP请求的程序。

    我在谷歌上搜索了许多地址,可以在这里找到工作结果:

    #!/bin/bash
    TOKEN='jenkins-user-token'
    USER='my-username'
    SERVER="http://your.server.address"
    
    #jenkins job parameters
    PARAMF=$1
    SECONDPARAM=$2
    
    # retrieve the crumb that we need to pass in the header
    CRUMBS=$(curl -s -X GET -u $USER:$TOKEN ${SERVER}/crumbIssuer/api/json  | jq -c '. | .crumb ')
    curl --user $USER:$TOKEN  -H "Jenkins-Crumb:${CRUMBS}" -X POST  "${SERVER}/view/MyView/job/JobName/buildWithParameters?TOKEN=${TOKEN}&PARAMETERONE=${PARAMF}&PARAMETERTWO=${SECONDPARAM}"
    
    
    步骤脚本执行以下操作:

  • 拿面包屑
  • 调用jenkins以执行具有多个参数的作业
  • 您可以将此脚本保存为jenkins-job-cli.sh并调用它

    chmod +x jenkins-job-cli.sh
    ./jenkins-job-cli.sh first-parameter second-parameter
    
    希望这有帮助

    干杯


    Leslie

    正如下面@tony19所建议的,您还可以为您的用户生成一个API令牌(如果您不想使用用户/密码)。我已经更新了我的答案。很高兴知道它解决了您的问题:)也可以传递带有参数的SVN Url吗?最好通过命令行告诉Jenkins运行一个特定的作业(在我的例子中是FPGA合成)并检查SVN的所有项目。我在Jenkins中的Python脚本能够在workspace文件夹中运行用于FPGA合成的每个签出操作,但我想让我的用户能够简单地使用单个批和他们的特定签出来启动作业。如果每个SVN url有一个参数,则可以使用命令行传递它们(可能用双引号保护).这可能是一个机会,谢谢!你知道有没有其他插件或命令可以传递给Jenkins?传递参数是解决这一问题的好方法吗?如果您愿意,我已经创建了一个讨论室:
    crumbisuer/api
    由于CSRF安全性改进而不适用于jenkins 2.176+。更多详细信息请参见: