本文主要通过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仓库 将生成的密钥放在只具有只读权限的部署密钥中
然后就会开始运行代码中的步骤依次执行
