jenkins piplien ci 以及构建通知企业微信

ci,cd完整流程

  • 安装docker
  • 安装jenkins
  • 在jenkins里面安装maven环境
  • 服务器里面安装jdk
  • 执行ci脚本
  • 构建企业微信通知
  • 服务器里面放入dockerfile文件
    pipeline

安装docker

服务器安装docker

安装jenkins

安装jenkins

在jenkins里面安装maven环境

安装maven运行环境以及jdk

jenkinsfiels 文件

ci pipline 流水线

try{
node{
    stage("prepare"){
         checkout scm
         def start = new Date().format('yyyy-MM-dd HH:mm:ss')
         def pom = readMavenPom file: 'pom.xml'
         echo " group: ${pom.groupId} , artifactId: ${pom.artifactId}, version: ${pom.version} "
         build_name= "cc.jar"

         // 集群空间 这些参数是在jenkins里面配置的
         namespace = "${params.namespace}"
         // 项目名称
         appName= "${params.appName}"
         // 项目名称
         configCenter= "${params.configCenter}"
         // 镜像名称
         image_name = "${namespace}-${appName}"
         // 应用group
         container_group= image_name
         // 端口
         server_port= "${params.serverPort}"

         script {
             build_tag= sh(returnStdout:true, script: 'git rev-parse --short HEAD').trim()
         }
         seconds = (System.currentTimeMillis()/1000).intValue()
         // 容器名称
         conatianer_name = "${container_group}-${build_tag}-${seconds}"

    }
    stage("test"){
      echo "test stage , skip "
    }
    // 构建镜像
    stage ("build"){
        sh " echo 'success'";
        sh 'echo Build stage ...'
        sh 'export CHAT_WEBHOOK_KEY=cc; sh /home/send_message.sh wechat "测试环境正在构建" "构建第一步 successfully completed..."'
        sh "mvn clean package -U  -DskipTests -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true"
        sh " cp  -rf ${WORKSPACE}/lianli-beauty-lyh-start/target/${build_name}  /home/zouxulei/local/script/dockers/ "
        // /home/local/script/dockers/ 这个是容器或者宿主机里面的路径 需要放dockerfile文件来构建镜像
        sh "docker build -t ${image_name}:${build_tag}"+
                    " --build-arg BUILD_TARGET=${build_name} /home/local/script/dockers/"
    }
    //删除已有容器
    stage("clear_old"){
        sh 'echo Test stage ...'
        // /home/send_message.sh 容器或者宿主机里面放的企业微信启动文件
        sh 'export CHAT_WEBHOOK_KEY=cc; sh /home/send_message.sh wechat "流水线第二步" "构建第二步 successfully completed..."'
        sh "docker stop \$(docker ps -aq --no-trunc --filter name=${container_group}) || echo 'stop fail' "
        sh "docker rm \$(docker ps -a -q --no-trunc --filter name=${container_group}) || echo 'container rm failed' "
        sh   "find /home/local/script/dockers/ -mtime +1 -name \"*.jar\" -exec rm -Rf {} \\; "
    }
    // 运行启动容器
    stage("deploy"){
        sh "sleep 5"
        sh 'echo deploy stage ...'
        sh 'export CHAT_WEBHOOK_KEY=cc; sh /home/send_message.sh wechat "流水线第三步" "最终构建 successfully completed..."'
        def increase_port= Math.abs("${image_name}-${build_tag} ".hashCode() % 800)
        sh "docker run -d -e JAVA_OPTS=\"-Xmx1G -Dspring.cloud.nacos.config.server-addr=${configCenter}  -Dspring.cloud.nacos.config.namespace=${namespace}  -Dspring.cloud.nacos.discovery.port=${server_port} \" -p ${server_port}:8080 " +
                "  -v /home/data/logs:/app/logs -v /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro --name=${conatianer_name}    ${image_name}:${build_tag} "
    }

}
}catch(e){
    currentBuild.result = 'FAILURE'
}
if(currentBuild.result == 'FAILURE') {
	node(env.BuildMachineLabel){
		stage("Post Build") {
				// 在使用send_message脚本之前需要先配置CHAT_WEBHOOK_KEY
				  sh 'export CHAT_WEBHOOK_KEY=ss; sh /home/send_message.sh wechat "构建失败" "failed completed..."'
		} // stage
	} // node
} // if

构建通知相关

第一步 sendmessage.sh 脚本文件

#!/bin/sh

usage(){
echo "usage: $0 TYPE TITLE CONTENT [URL]"
echo "       TYPE: wechat|dingtalk"
}

TYPE="$1"
TITLE="$2"
CONTENT="$3"
URL="$4"

CHAT_CONTENT_TYPE='Content-Type: application/json'
DEFAULT_PIC_URL="https://img-blog.csdnimg.cn/20191227152859635.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9saXVtaWFvY24uYmxvZy5jc2RuLm5ldA==,size_16,color_FFFFFF,t_70"
DINGTALK_DEFAULT_WORDS=" [LiuMiaoMsg]"
if [ $# -lt 3 ]; then
usage
exit 1
fi

if [ _"${TYPE}" = _"wechat" ]; then
CHAT_WEBHOOK_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key'
elif [ _"${TYPE}" = _"dingtalk" ]; then
CHAT_WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token'
else
usage
exit 1
fi

if [ _"${CHAT_WEBHOOK_KEY}" = _"" ]; then
echo "please make sure CHAT_WEBHOOK_KEY has been exported as environment variable"
usage
exit 1
fi
#!换成自己的构建地址
if [ _"${URL}" = _"" ]; then
URL='https://blog.csdn.net/sha1024/article/details/118600085?spm=1001.2014.3001.5501'

fi

echo "## send message for : ${TYPE}"
if [ _"${TYPE}" = _"wechat" ]; then
curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
-H "${CHAT_CONTENT_TYPE}" \
-d '
{
"msgtype": "news",
"news": {
"articles" : [
{
"title" : "'"${TITLE}"'",
"description" : "'"${CONTENT}"'",
"url" : "'"${URL}"'",
"picurl" : "'"${DEFAULT_PIC_URL}"'"
}
]
}
}'
elif [ _"${TYPE}" = _"dingtalk" ]; then
curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
-H "${CHAT_CONTENT_TYPE}" \
-d '
{
"msgtype": "link",
"link": {
"text": "'"${CONTENT}${DINGTALK_DEFAULT_WORDS}"'",
"title": "'"${TITLE}"'",
"picUrl": "'"${DEFAULT_PIC_URL}"'",
"messageUrl": "'"${URL}"'"
}
}'
else
usage
exit 1
fi

第二步 登录自己的服务器

登录自己的服务器,touch send_message.sh
vim send_message.sh 把上面的文本内容添加进去
image.png

第三步 修改jenkinsfiles 脚本

在原先的脚本里面加入这两行

  sh 'echo Build stage ...'
  sh 'export CHAT_WEBHOOK_KEY=cc; sh /home/wusha/send_message.sh wechat "测试环境正在构建" "构建第一步 successfully completed..."'

主要是修改里面的CHAT_WEBHOOK_KEY 这个企业微信构建机器人的key 替换成你自己企业微信群机器人的key,然后执行流水线就可以成功推送了。
CHAT_WEBHOOK_KEY = key
image.png
image.png

服务器里面放入dockerfile文件

Dcokerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值