本文主要通过Jenkinsfile来构建
之前部署的时候总是提示hostkey验证失败,后来发现agent指示的是pipeline的运行环境。即当agent指示的是docker镜像时,所有操作都是在docker镜像中进行。构建需要了解pipeline语法传送门 和shell语法。
准备工作
出于安全考虑,ssh需要用密钥方式登陆。
生成ssh key
ssh-keygen -t rsa -C "your email"
将公钥上传到要登录的机器
ssh-copy-id -i /root/.ssh/id_rsa.pub test@173.82.232.134
当然还需要将重要数据保存在系统的环境变量中或者用Credentials Plugin插件。
编写运行脚本
在jenkinsfile中每个stage表示的是每一个步骤,前一个步骤成功后才会进行下一步操作。post内的操作在stage操作后进行,可以根据不同的运行状态,进行不同操作。
下面脚本主要实现用gradle编译打包项目并归档,然后将war包上传到部署的vps并运行。
Jenkinsfile
pipeline { agent any // agent表明整个pipeline执行的地方 当用docker时,下面所有shell命令都在docker内运行 stages { stage('test') { steps { sh 'chmod +x gradlew' sh 'echo "正在执行代码质量检查"' sh './gradlew check' } } stage('build') { steps { sh 'echo "修改自带的tomcat端口"' sh 'echo "server.port=12321"<< src/main/resources/application.properties'//部署的vps端口8080被占用 需要修改默认的端口 sh 'echo "开始构建并打包成war包"' sh './gradlew build' archiveArtifacts artifacts: 'build/libs/**/*.war', fingerprint: true//归档成品 } } stage('Deploy') { when { expression { currentBuild.result == null || currentBuild.result == 'SUCCESS' } } steps { sh 'echo "开始部署到测试环境"' sh 'chmod +x deploy.sh' sh './deploy.sh' } } } post{ success{ echo "成功构建并部署" } failure{ echo "构建失败" } } }
clean.sh
#!/usr/bin/bash pid=`ps -aux |grep java|grep /web/test |grep -v grep | awk '{print $2}'` echo $pid if [ $pid ];then kill -9 $pid fi rm -rf ~/web/test/*
deploy.sh
#!/bin/bash #上传clean脚本 scp clean.sh test@173.82.232.134:~/web/test/ #执行clean脚本 ssh test@173.82.232.134 <<EOF cd ~/web/test chmod +x clean.sh ./clean.sh EOF #复制文件 scp build/libs/*.war test@173.82.232.134:~/web/test/ #运行 ssh test@173.82.232.134 >/dev/null 2>&1 << EOF nohup java -jar ~/web/test/*.war& EOF
将项目导入blueocean中
导入git仓库 将生成的密钥放在只具有只读权限的部署密钥中
然后就会开始运行代码中的步骤依次执行