- 前言
- 一、创建节点池节点/接入新节点
- 二、创建构建计划
- 1.选择简易模板
- 2.选择对应的git仓库,点击确定即可
- 3.流程配置
- 4.触发规则
- 5.Linux shell脚本 auto_server.sh
- 6.docker镜像中 shell脚本 demo.sh
- 三、立即构建
- 总结
前言
在项目测试阶段,我们经常要部署测试环境。第一步先拉去测试分支的最新代码;第二步mvn clean install打包jar/war包;第三步通过一些ftp工具传输到局域网的linux上,第四步拷贝进docker镜像;第五步java -jar启动jar包/启动tomcat等等…繁琐的过程,今天我们就来一键完成这个 *** 作。使用Coding的构建计划,加上shell脚本来实现,自动拉代码;自动打包;自动传输;自动拷贝替换;自动执行重启脚本等一整套自动部署流程。
一、创建节点池节点/接入新节点
此步骤在coding说明文档里有,按文档 *** 作即可,此处不做详细介绍。参考
接入新节点成功后,可以看到占用状态为闲置
直接进入第三步构建->执行Shell脚本,修改为项目所需要的脚本,我的项目是:
mvn clean mvn package
然后是收集构建物,根据项目的架构而定,单应用部署的,收集一次构建物即可,找到对应的jar/war包即可。
多应用则添加一个收集构建物流程,同理配置一下即可。
到这里构建的配置已完成,接下来配置部署流程,直接查看执行Pipeline脚本
这里推荐使用文本编辑器配置,屏幕大一些
语法使用的是Jenkins,我这边的Linux是使用私钥登录的,需要提前把id_rsa配置为项目凭据。参考
可以把对应的一些服务器信息,配置到环境变量里
stage('部署') { steps { echo '部署中...' script { def remoteConfig = [:] remoteConfig.name = "ssh-server" remoteConfig.host = "${env.REMOTE_HOST}" remoteConfig.port = "${env.REMOTE_PORT}".toInteger() remoteConfig.user = "${env.REMOTE_USER_NAME}" remoteConfig.allowAnyHosts = true // Linux私钥登录 withCredentials([sshUserPrivateKey( credentialsId: "${env.REMOTE_CRED}", keyFileVariable: "id_rsa" )]) { remoteConfig.identityFile = id_rsa sshPut(remote: remoteConfig, from: "/target/demo-server.jar", into: "/home") sshCommand(remote: remoteConfig, command: "/home/auto_server.sh") } } echo '部署完成' } }4.触发规则
指定对应的分支,一般使用手动触发,当然你可以根据需求选择。
调用Linux的shell脚本,实现把jar包拷贝进docker镜像里,再调用docker镜像中的shell脚本。
#!/bin/sh #docker name DOCKER_NAME=test #file dir FILE_DIR=/home/demo-server.jar #project dir PROJECT_DIR=/usr/local #get docker cid CID=$(docker ps | grep "$DOCKER_NAME" | awk '{print }') docker cp $FILE_DIR $CID:$PROJECT_DIR docker exec -i $CID /bin/bash -c 'cd /usr/local && ./demo.sh restart'6.docker镜像中 shell脚本 demo.sh
这里是spring boot打包后的jar包
#!/bin/sh #post POST=8080 #app_name API_NAME=demo #jar_name JAR_NAME=$API_NAME.jar #log_name LOG_NAME=$API_NAME.log #metaspaceSize metaSPACE_SIZE=2048m #MaxmetaspaceSize MAXmetaSPACE_SIZE=2048m #SurvivorRatio SURVIVOR_RATIO=8 #garbage collector GARBAGE_COLLECTOR=UseConcMarkSweepGC #Xms XMS=2048m #Xmx XMX=2048m #Xmn XMN=512m #Xss XSS=512k #java opts JAVA_OPTS="-XX:metaspaceSize=${metaSPACE_SIZE} -XX:MaxmetaspaceSize=${MAXmetaSPACE_SIZE} -XX:SurvivorRatio=${SURVIVOR_RATIO} -XX:+${GARBAGE_COLLECTOR} -Xms${XMS} -Xmx${XMX} -Xmn${XMN} -Xss${XSS} -Dfile.encoding=utf-8 -Dserver.servlet.contextPath= -Dserver.port=${POST} -Dspring.application.name=${API_NAME}" #pid PID=0 #is_exist is_exist(){ PID=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}'` if [ -z "${PID}" ]; then return 1 else return 0 fi } #start start() { is_exist if [ $? -eq "0" ]; then echo "${JAR_NAME} is already running PID=${PID}" else nohup /usr/bin/java $JAVA_OPTS -jar /usr/local/$JAR_NAME > $LOG_NAME 2>&1 & echo "[OK]" fi } #stop stop() { is_exist kill $PID sleep 2 is_exist if [ $? -eq "0" ]; then echo "${JAR_NAME} begin kill, PID=${PID}" kill -9 $PID sleep 2 echo "${JAR_NAME} process stopped" else echo "${JAR_NAME} is not running" fi } #status status() { is_exist if [ $? -eq "0" ]; then echo "${JAR_NAME} is running PID is ${PID}" else echo "${JAR_NAME} is not running" fi } #restart restart(){ stop start } case $1 in start) start ;; stop) stop ;; restart) $0 stop sleep 2 $0 start ;; status) status ;; *) echo "Usage: {start|stop|restart|status}" ;; esac exit 0三、立即构建
构建成功则已经完成自动部署!
Coding服务器执行:拉去对应分支最新代码;
Coding客户端:执行构建流程(后端:mvn clean install,前端vue:npm i)、执行部署流程(连接上Linux服务器,把文件传输进去,且可以调用shell脚本)
Linux局域网服务器:编写shell脚本实现备份、替换jar/war包、启动jar包等等(前提是局域网是可以上网的)。
原创,禁止转载!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)