其他分享
首页 > 其他分享> > Jenkins参数化构建 - (多任务并串联参数传递)

Jenkins参数化构建 - (多任务并串联参数传递)

作者:互联网

 

业务需求:提供一个API 接口给开发同事用于传参,然后将参数再传给测试组的对应接口。其实这个接口就起到一个数据中转作用,接收参数 - 转发参数。

实施方案:在Jenkins上新建一个Job,然后引用测试组的Job作为子任务 (最终是测试组接收数据)。这里就涉及到"Jenkins的多个任务并串联参数传递"的配置,需要用"Parameterized Trigger Plugin",下载地址: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin

1)新建一个Job任务,参数化构建。新建Job任务后,勾上"参数化构建",将下面9个参数定义下。

引用子任务,然后将上面配置的参数在引用子任务这块,将上面的9个参数重新预定下 (predefined parameters)。 注意下面几个配置项含义:

Current build parameters:  当前job的参数
predefined parameters:  预定义的参数
Build on the same mode: 和当前job在同一个node上执行。
Boolean parameters: 布尔类型的值
Parameters from properties file: 从属性文件中加载参数。

需要注意:下游任务必须是参数化构建任务。向下游传递的参数的名称必须要和下游任务的
参数名称一样 或者 参数名称是系统环境变量的参数(the list of available environment variables) ,不然下游job接收不到该参数的值。

2) 可以手动填写对应参数值,点击构建,查看下执行过程和子任务那边的构建信息,确认参数是否正确传过去了:

 如上,发现手动输入的参数可以成功接收并传到子任务那边了!

3)使用Jenkins API接口,以POST方式进行传参, 上面所参数的jenkins任务对应的API接口为: http://******:19090/job/*****_Docker_Automated_Tests/buildWithParameters?$parametes。  在终端窗口里使用curl -X POST方式进行访问 (单引号或双引号都可以),访问后,会自动触发jenkins界面里对应的任务执行(注意:必须是POST方式访问,才会自动触发Jenkins任务构建)!

# curl -X POST "http://*******:19090/job/******_Docker_Automated_Tests/buildWithParameters?AGILE_COMPILE_BRANCH=master&AGILE_MODULE_NAME=******/XPS/testflow&AGILE_PRODUCT_PATH=application-d7ea6a96a9999a96bbb1e80b4289622c206a65c3-f7909295624b82a7a5fa27c3fec3554c.tar.gz_f7909295624b82a7a5fa27c3fec3554c&AGILE_COMPILE_BUILD_ID=528721&AGILE_REVISION=d7ea6a96a9999a96bbb1e80b4289622c206a65c3&AGILE_RELEASE_VERSION=1.1.5.100&AGILE_TRIGGER_USER=test&Deploy_Env=D&Deploy_App=tomcat_8899"

然后观察jenkins上对应任务执行过程(需要稍等一小会儿)

发现通过post方式访问这个api接口也是可以自动触发并能成功传参!所以就可以将下面这个Jenkins API接口给开发同事,用于调用这个参数进行上面相关参数的推送了。
http://******:19090/job/*****_Docker_Automated_Tests/buildWithParameters?AGILE_COMPILE_BRANCH=编译分支&AGILE_MODULE_NAME=模块名称&AGILE_PRODUCT_PATH=生产路径&AGILE_COMPILE_BUILD_ID=编译构建ID&AGILE_REVISION=修订版本&AGILE_RELEASE_VERSION=发布版本&AGILE_TRIGGER_USER=触发器用户&Deploy_Env=部署环境&Deploy_App=部署应用程序          (这就是给开发的API接口地址)

另外注意一点:上面在使用curl -X POST方式访问Jenkins API接口的时候,默认没有跟Jenkins的用户和密码,默认是使用anonymous用户,即匿名用户对这个参数化构建的Job任务有执行权限的。如果anonymous没有对Job任务有执行权限,就需要在访问Jenkins API接口的时候跟上用户名和密码信息, 即"--user username:password", 如下:

                                                    写一个python的api接口,用于传参                                                   

1)先安装flask
[root@k8s-master01 ~]# yum -y install epel-release
[root@k8s-master01 ~]# yum install python-pip
[root@k8s-master01 ~]# pip install Flask
[root@k8s-master01 ~]# flask --version
Python 2.7.5
Flask 1.1.1
Werkzeug 0.15.5

2)编写脚本
[root@k8s-master01 ~]# cd myproject/
[root@k8s-master01 myproject]# ls
app.py  run.sh

[root@k8s-master01 myproject]# cat run.sh 
#!/bin/bash
cd ./
export FLASK_APP=app.py
flask run -h 0.0.0.0
[root@k8s-master01 myproject]# cat app.py
from flask import Flask, request
import json
app = Flask(__name__)
@app.route('/send', methods=['GET'])
def send():
    try:
        print(request.args)
        #tmp = request.url
        #AGILE_COMPILE_BRANCH = request.args.get("AGILE_COMPILE_BRANCH")
    except Exception as e:
        print(e)
    return 'ok'

3)执行接口服务
[root@k8s-master01 myproject]# nohup sh run.sh &
[root@k8s-master01 myproject]# lsof -i:5000
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
flask   5391 root    3u  IPv4 25337407      0t0  TCP *:commplex-main (LISTEN)

4)另打开一个终端窗口,通过这个api接口进行传参
api接口地址为: http://localhost:5000/send?$parametes

命令为(有多少参数就传多少):
[root@k8s-master01 myproject]# curl "http://localhost:5000/send?&AGILE_COMPILE_BRANCH=master&AGILE_MODULE_NAME=XPS/testflow&AGILE_PRODUCT_PATH=application-d7ea6a96a9999a96bbb1e80b4289622c206a65c3-f7909295624b82a7a5fa27c3fec3554c.tar.gz&AGILE_COMPILE_BUILD_ID=528721&AGILE_REVISION=1.1.5.100&AGILE_REVISION=d7ea6a96a9999a96bbb1e80b4289622c206a65c3&AGILE_TRIGGER_USER=test&SYSTEM_CODE=cmp&Deploy_Env=F&Deploy_App=tomcat"

5)然后在查看接口日志,发现参数已经传过来了
[root@k8s-master01 myproject]# cat nohup.out 
 * Serving Flask app "app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [01/Aug/2019 13:45:58] "GET /send?&AGILE_COMPILE_BRANCH=master&AGILE_MODULE_NAME=XPS/testflow&AGILE_PRODUCT_PATH=application-d7ea6a96a9999a96bbb1e80b4289622c206a65c3-f7909295624b82a7a5fa27c3fec3554c.tar.gz&AGILE_COMPILE_BUILD_ID=528721&AGILE_REVISION=1.1.5.100&AGILE_REVISION=d7ea6a96a9999a96bbb1e80b4289622c206a65c3&AGILE_TRIGGER_USER=test&SYSTEM_CODE=cmp&Deploy_Env=F&Deploy_App=tomcat HTTP/1.1" 200 -

标签:AGILE,master01,接口,参数传递,参数,Jenkins,k8s,root,多任务
来源: https://blog.51cto.com/u_10272167/2702876