• 使用Generic Webhook Trigger插件实现Jenkins+WebHooks(云效)持续集成


    使用Generic Webhook Trigger插件实现Jenkins+WebHooks(云效)持续集成

    一,业务背景

    我们在开发的时候,特别是前后端分离的时候,前端需要我们后端提供的API接口,可能需要每次有一个接口的变动都需要重新部署到dev环境上,例如:最常见的Git工作流的方式,develop和master是分开的,在开发过程中提交的代码首先合并到develop上,如下图:

    如果,使用Jenkins做集成工具,每次有代码合并的时候,也需要手动的去构建:

    这是一件很繁琐的事情,如何实现当代码自动提交到develop分支的时候自动触发构建功能,目前,有效的解决方案是使用“钩子”。

    钩子功能(callback),是帮助用户push了代码后,自动回调一个您设定的http地址。 这是一个通用的解决方案,用户可以自己根据不同的需求,来编写自己的脚本程序(比如发邮件,自动部署等)。

    这里就学习一下代码托管在云效平台上,使用通用的“Generic Webhook Trigger” 插件实现。

    关于“云效”WebHooks的介绍及使用请参考:https://thoughts.aliyun.com/sharespace/5e8c37eb546fd9001aee8242/docs/5fe1ba4220764b001fa6b725

    二,准备工作

    1.安装Generic Webhook Trigger插件

    在“系统设置–插件管理–可选插件”界面搜索:Generic Webhook Trigger,可以看到,点击安装,然后重启。

    这里是我已经装过,所以在“已安装”界面给大家看一下!

    三,搭建工作

    一、创建Job

    这里我的是自由风格项目,

    二、配置Job

    1)源码管理

    2)构建触发器

    由HTTP请求触发http://JENKINS_URL/generic-webhook触发器/调用

    Git存储库中有一些配置示例。

    你可以在这里摆弄JSONPath。您可能还想在这里检查语法。

    您可以在这里摆弄XPath。您可能还想在这里检查语法。

    你可以在这里摆弄正则表达式。您可能还想在这里检查语法。

    如果您的作业没有参数化,那么解析的变量只会贡献给构建。如果您的作业是参数化的,并且您解析了与这些参数同名的变量,那么在触发作业时插件将填充这些参数。例如,这意味着您可以将参数与SCM插件(如GIT插件)结合使用来选择分支。

    3)定义post请求中的变量

    4)post 请求url加密令牌

    5)拉取代码仓库的条件

    6)构建作业的条件

    7) 执行shell开始构建作业

    四,构建shell代码

    # 定义打印变量信息的函数
    function print_info() {
    	echo "${ref}"
    	echo "${project}"
    }
    
    print_info
    # 开始编译代码
    mvn clean package -DskipTests
    
    # 定义dev分支的函数
    function branch_dev() {
    	echo "dev"
    	service_ip=`netstat -lntp | grep 9181 | awk '{print $7}' | awk -F'/' '{print $1}'`
    	api_ip=`netstat -lntp | grep 9100 | awk '{print $7}' | awk -F'/' '{print $1}'`
            kill -9 $service_ip $api_ip
    	sleep 3
    	cd /app/apps/ && tar czf skyfish.tar.gz skyfish-core-service*.jar skyfish-shop-api*.jar
    	mkdir  /yunyu_down/${BUILD_NUMBER}
    	mv /app/apps/*.tar.gz  /yunyu_down/${BUILD_NUMBER}/
    	cp /var/lib/jenkins/workspace/skyfish-test/skyfish-shop-api/target/*.jar /app/apps/
    	cp /var/lib/jenkins/workspace/skyfish-test/skyfish-core-service-build/target/*.jar /app/apps/
            bash /root/test_execute.sh
    }
    
        # 脚本的代码
    [root@skyfish-studio-test ~]# vim test_execute.sh 
    sleep 3
    nohup java -jar  -Xms128M -Xmx1024M /app/apps/skyfish-core-service-build*.jar --spring.config.location=/app/apps/config/skyfish-core-service-build/ >> /app/logs/skyfish-core-service-build/catalina.out &
    nohup java -jar  -Xms128M -Xmx1024M /app/apps/skyfish-shop-api-0.0.1*.jar --spring.config.location=/app/apps/config/skyfish-shop-api/ >> /app/logs/skyfish-shop-api/catalina.out &
    
    
    # 定义master分支的函数
    function branch_master() {
    	echo "master"
    	rsync skyfish-core-service-build/target/*.jar root@172.16.1.1:/app/apps/
    	rsync skyfish-shop-api/target/*.jar root@172.16.1.1:/app/apps/
    	
    	cat > /root/master_excute.sh <<- ENDEOF
    	cd /app/apps/ && tar czf skyfish.tar.gz skyfish-core-service*.jar skyfish-shop-api*.jar
    	mkdir -p  /yunyu_down/${BUILD_NUMBER}/
    	mv /app/apps/*.tar.gz  /yunyu_down/${BUILD_NUMBER}/
    	api_port=$(netstat -lntp | grep 9100 | awk '{print $7}' | awk -F'/' '{print $1}')
    	service_port=$(netstat -lntp | grep 9181 | awk '{print $7}' | awk -F'/' '{print $1}')
    	if [[ -z $api_port ]];then 
    	    echo '没有启动api服务 不用kill掉 直接启动就好了'; 
    	else 
    	    kill -9 $api_port &> /dev/null 
    	fi
    	
    	if [[ -z $service_port ]];then 
    	    echo '没有启动service服务 不用kill掉 直接启动就好了'; 
    	else 
    	    kill -9 $service_port &> /dev/null 
    	fi
    	ENDEOF
    	chmod +x /root/master_excute.sh
    	rsync /root/master_excute.sh root@172.16.1.1:/root/
    	expect <<- EOF
    	spawn ssh -tt 172.16.1.1
    	expect {
    	"Compute Service !" {send "bash /root/master_excute.sh
    "}}
    	expect eof
    	EOF
    }
    	
    # 判断post请求触发的那个分下的环境 代码部署到相应的环境中
    if [ $ref == "refs/heads/master" ];then
    	branch_master
    	sleep 3
    	expect <<- EOF
    	spawn ssh -tt 172.16.1.1
    	expect {
    	"Compute Service !" {send "nohup java -jar -Xms128M -Xmx2048M /app/apps/skyfish-core-service-build-0.0.1-SNAPSHOT.jar --spring.config.location=/app/apps/config/skyfish-core-service-build/ >> /app/logs/skyfish-core-service-build/catalina.out &
    ";exp_continue}
    	"stderr to stdout" {send "nohup java -jar  -Xms128M -Xmx2048M /app/apps/skyfish-shop-api-0.0.1-SNAPSHOT.jar --spring.config.location=/app/apps/config/skyfish-shop-api/ >> /app/logs/skyfish-shop-api/catalina.out &
    "}
    	}
    	expect eof
    	EOF
    elif [ $ref == "refs/heads/dev" ];then
    	 branch_dev
    fi
    
  • 相关阅读:
    scheduletask任务调度(2间隔时间)
    scheduletask任务调度
    初始webservice
    ssh整合
    aop
    自定义框架(MyMvc)
    数据校验
    原生态ajax
    struts2国际化
    文件下载
  • 原文地址:https://www.cnblogs.com/xiaolang666/p/14790204.html
Copyright © 2020-2023  润新知