业务需求:提供一个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 --versionPython 2.7.5Flask 1.1.1Werkzeug 0.15.52)编写脚本[root@k8s-master01 ~]# cd myproject/[root@k8s-master01 myproject]# lsapp.py  run.sh[root@k8s-master01 myproject]# cat run.sh #!/bin/bashcd ./export FLASK_APP=app.pyflask run -h 0.0.0.0[root@k8s-master01 myproject]# cat app.pyfrom flask import Flask, requestimport jsonapp = 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:5000COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEflask   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 -
©著作权归作者所有:来自51CTO博客作者80民工的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 在eve-ng模拟器上进行Cisco单臂路由配置,图文实例详解
  2. 第五章 主生产计划MPS 第1~3节 计划方案、MPS计划参数、计划前置
  3. nmap***测试--版本探测
  4. 盘点 Oracle 11g 中新特性带来的10大性能影响
  5. size content 调试框中的参数
  6. ASP.NET Core WebApi基于JWT实现接口授权验证
  7. 【Linux】shell脚本基础-变量
  8. MySIAM与Innodb引擎
  9. python入门教程07-02 (python语法入门之函数的参数)

随机推荐

  1. 如何停止Py_Initialise应用程序的崩溃?
  2. X和y有不相容的形状
  3. Cloud Pub / Sub Demo:403未授权用户执行
  4. 解决Linux下运行Python脚本显示“: 没有
  5. Python学习日记20180413
  6. 在Django,我的request.session没有结束...
  7. 【python网络爬虫三】爬取动态数据及数据
  8. python实现求最长子串长度
  9. arcgis 中.net调用python
  10. Python:笔记(7)——yield关键字