zoukankan      html  css  js  c++  java
  • 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 -
  • 相关阅读:
    Gradle中的buildScript,gradle wrapper,dependencies等一些基础知识
    在liferay 7中如何删除service builder已经生成的数据库table
    settings.gradle与build.gradle有什么区别
    如何建一个Liferay 7的theme
    如何在IDE的开发环境中启动Studio和本地build出一个product
    Lunix文件的读写权限问题
    liferay 7用OSGi的方式修改默认权限
    Liferay 7 module项目的依赖问题
    城市选择
    2016/04/26 流程 数据库lcdb 四个表 1,用户表users 2,流程表(设定有哪些流程)liucheng 3,流程发起者表(记录谁发起到哪里) 4,流程经过的人员表 flowpath (order排序)
  • 原文地址:https://www.cnblogs.com/kevingrace/p/8430161.html
Copyright © 2011-2022 走看看