jenkins的热部署_Jenkins构建Pipeline工程

Jenkins构建Pipeline工程(docker版本,亲测)

作者:星晴(当地小有名气,小到只有自己知道的杰伦粉)

      深圳的天气真是让人难受,前几天热的很,今天冷的很。不知道这副躯体还能折腾几年。今天给大家分享一下devops中最重要的一环,自动化部署,大家还在为手动复制jar到服务器,然后手动输入命令启动烦恼吗?今天给大家推荐一个自动化部署的神器jenkins,网上已经有很多相关教程了,我自然要与众不同,通过pipline来创建工程。

1.添加插件

64d5e439d4b9e3a2194dacd401a217b8.png

1.Maven Integration plugin2.Publish over ssh3.pipeline4.git parameter

2.系统配置

cb5e416419bf143b0608327e9347385b.png

Name: 服务名称(随便写)Hostname:主机IPUsername: 主机登录账户Remote Directory: 远程目录Passphrase / Password: 主机登录密码

3.创建一个Pipeline工程

3.1 general配置

776d519b9e67d559e0575773b886603d.png

分支切换

3.2 流水线

3.2.1 pipeline script

node {    environment {        JENKINS_WORKSPACE = "/var/jenkins_mount/workspace"    //jenkins存放文件的地址        PROJECT_NAME = "${JOB_NAME}"                      // 项目名        JAR_NAME = "bnb-system-*-beta.jar"   // 项目生成的jar的名字        VERSION_ID = "${BUILD_ID}"    }      stage('拉取代码') {        echo 'this is pull code step'        git branch: "${branchs}", url: 'https://github.com/joe-tong/springboot_demo2.git'    }    stage('编译打包') {        echo 'this is build step'        sh   '/var/jenkins_home/apache-maven-3.6.3/bin/mvn clean package -Dmaven.test.skip=true'    }    stage('推送') {        echo 'transfer file to target server'        sshPublisher(publishers: [                sshPublisherDesc(configName: '本地', transfers: [                        sshTransfer(cleanRemote: false, excludes: '',                                execCommand:'''                                    #!/bin/bash                                    cd /usr/local/jenkins/workspace/target                                    jarname=`ls -t | grep springboot*.jar | grep -v 'sources'| awk '{print $1}'|head -n 1`                                    mv /usr/local/jenkins/workspace/target/${jarname} /usr/local/jenkins/workspace/${jarname}                                    kill_id=`netstat -tunlp|grep 8443|awk \'{print $7}\'|awk -F \'/\' \'{print $1}\'`                                    if [ -n "$kill_id" ]                                    then                                        echo "kill -9 的pid:" $kill_id                                        kill -9 $kill_id                                    fi                                    sleep 1s                                    kill_debug_id=`netstat -tunlp | grep 8060 | awk \'{print $7}\'|awk -F \'/\' \'{print $1}\'`                                    if [ -n "$kill_debug_id" ]                                    then                                        echo "kill -9 kill_debug_id:" $kill_debug_id                                        kill -9 $kill_debug_id                                    fi                                    sleep 1s                                    echo "==============应用启动 --> ${jarname} =============="                                    source /etc/profile                                    nohup java -jar  /usr/local/jenkins/workspace/${jarname}  --spring.profiles.active=dev  >> /usr/local/jenkins/workspace/springboot.log &                                    sleep 1s                                    tail -f /usr/local/jenkins/workspace/springboot.log                                '''                                ,                                execTimeout: 120000,                                flatten: false,                                makeEmptyDirs: false,                                noDefaultExcludes: false,                                patternSeparator: '[, ]+',                                remoteDirectory: '',                                remoteDirectorySDF: false,                                removePrefix: '',                                sourceFiles: '**/springboot_demo*.jar')],                        usePromotionTimestamp: false,                        useWorkspaceInPromotion: false,                        verbose: false)        ])        println "==========结束==========="    }}

3.2.2 piple script from  scm

17f78f631a98023c1f78e5db16e62ae3.png

配置  git仓库

jenkinsfile 在项目根目录下

node {    environment {        JENKINS_WORKSPACE = "/var/jenkins_mount/workspace"    //jenkins存放文件的地址        PROJECT_NAME = "${JOB_NAME}"                      // 项目名        JAR_NAME = "bnb-system-*-beta.jar"   // 项目生成的jar的名字        VERSION_ID = "${BUILD_ID}"    }    stage('拉取代码') {        echo 'this is pull code step'        checkout scm    }    stage('编译打包') {        echo 'this is build step'        sh   '/var/jenkins_home/apache-maven-3.6.3/bin/mvn clean package -Dmaven.test.skip=true'    }    stage('推送') {        echo 'transfer file to target server'        sshPublisher(publishers: [                sshPublisherDesc(configName: '本地', transfers: [                        sshTransfer(cleanRemote: false, excludes: '',                                execCommand:'''                                    #!/bin/bash                                    cd /usr/local/jenkins/workspace/target                                    jarname=`ls -t | grep springboot*.jar | grep -v 'sources'| awk '{print $1}'|head -n 1`                                    mv /usr/local/jenkins/workspace/target/${jarname} /usr/local/jenkins/workspace/${jarname}                                    kill_id=`netstat -tunlp|grep 8443|awk \'{print $7}\'|awk -F \'/\' \'{print $1}\'`                                    if [ -n "$kill_id" ]                                    then                                        echo "kill -9 的pid:" $kill_id                                        kill -9 $kill_id                                    fi                                    sleep 1s                                    kill_debug_id=`netstat -tunlp | grep 8060 | awk \'{print $7}\'|awk -F \'/\' \'{print $1}\'`                                    if [ -n "$kill_debug_id" ]                                    then                                        echo "kill -9 kill_debug_id:" $kill_debug_id                                        kill -9 $kill_debug_id                                    fi                                    sleep 1s                                    echo "==============应用启动 --> ${jarname} =============="                                    source /etc/profile                                    nohup java -jar  /usr/local/jenkins/workspace/${jarname}  --spring.profiles.active=dev  >> /usr/local/jenkins/workspace/springboot.log &                                    sleep 1s                                    tail -f /usr/local/jenkins/workspace/springboot.log                                '''                                ,                                execTimeout: 120000,                                flatten: false,                                makeEmptyDirs: false,                                noDefaultExcludes: false,                                patternSeparator: '[, ]+',                                remoteDirectory: '',                                remoteDirectorySDF: false,                                removePrefix: '',                                sourceFiles: '**/springboot_demo*.jar')],                        usePromotionTimestamp: false,                        useWorkspaceInPromotion: false,                        verbose: false)        ])        println "==========结束==========="    }}

3.3.3

#!/bin/sh#docker 镜像/容器名字或者jar名字 这里都命名为这个SERVER_NAME=springboot#容器idCID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')#镜像idIID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')#当前日期DATE=`date +%Y%m%d`#清除旧容器if [ -n "$CID" ]; thenecho "存在$SERVER_NAME容器,CID=$CID"echo "停止旧容器"docker stop $SERVER_NAMEecho "删除旧容器"docker rm $SERVER_NAMEfi# 清楚旧镜像if [ -n "$IID" ]; thenecho "存在$SERVER_NAME镜像,IID=$IID"echo "删除镜像"docker rmi $IIDfi#构建镜像echo "开始构建镜像"docker build -f ./src/main/docker/Dockerfile -t $SERVER_NAME:v${DATE} ./targetecho "构建镜像成功!"# 运行docker容器echo "创建并启动$SERVER_NAME容器..."docker run --name $SERVER_NAME -d -p 8080:8443 $SERVER_NAME:v${DATE}echo "$SERVER_NAME容器启动完成"

到这就结束了,有什么还不懂的可以留言

关注公众号,有更多好玩的等着你!!!

7f16cddb6ce8c8e757b94687d0d124a3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值