目录
1.Jenkins环境
2.创建pipeline项目
1)创建新的pipeline
2)添加ssh秘钥到gitlab
3)配置定时扫描
4)配置filter by name
5)配置http连接
6)新建任务创建
3.Jenkinsfile模板
首先确保jenkins服务器上的jenkins用户可以使用JDK、git、maven,jenkins安装了Open Blue Ocean插件。
感谢南哥,文档大部分是他写的,我只是做了排版。
登录jenkins,进入Open Blue Ocean
代码库选择git,将gitlab项目的ssh连接地址粘到仓库url中。
然后下面会生成秘钥,需要将秘钥粘到gitlab中。
登录gitlab
选择用户设置中的ssh秘钥,将秘钥添加到右面的秘钥框中,点击增加秘钥即可。
添加成功ssh秘钥后,点击pipeline创建界面的创建pipeline会生成项目的管道。点击进入项目管道,里面就是项目中的各个分支。
选择管道中的configure选项,进入管道配置。勾选上triggers即可实现隔一段时间扫描gitlab项目代码的各分支是否有变化。有变化就开始执行项目中的JenkinsFile。
在项目源中可以add filter by name配置,直接筛选jenkins要管理的分支。
也可以将git源的地方改为http的连接,这是需要add认证。
点击Add,选择Username with password,在username和password处填上gitlab的用户和密码即可。
选择新建任务,选择pipeline类型即可。和blue ocean的configure的界面相同,只需配置git源路径和扫描定时器即可。详细见上一种方法。
Jenkinsfile是创建在项目的根目录下。
pipeline {
agent any
parameters {//参数
//jar包名
string(name: 'AppName', defaultValue: 'access-antfin-application')
string(name: 'AppHostName', defaultValue: 'access-antfin-application')
string(name: 'PersistName', defaultValue: 'access-persist')
//服务器名称
string(name: 'PersistHostName', defaultValue: 'access-persist')
string(name: 'DidiName', defaultValue: 'access-didi-application')
string(name: 'DidiHostName', defaultValue: 'access-antfin-application')
//应用端口号
string(name: 'Port', defaultValue: '11000')
string(name: 'PersistPort', defaultValue: '11001')
string(name: 'DidiPort', defaultValue: '11002')
}
stages {
stage('dev构建') { //stage是一个运行块
//判断分支 以dev开头继续,不然跳过
when {
branch 'dev*'
}
steps {
echo env.BRANCH_NAME //输出分支名
sh 'mvn -DskipTests=true clean install -T 5 -P dev' //跳过test,以dev的profile clean install
//sh 'mvn -DskipTests=true clean install -T 5 -P dev,control'
//sh 'mvn -DskipTests=true deploy -T 5 -P dev'
}
}
stage('dev停止服务') {
when {
branch 'dev*'
}
steps {
script {
try{
sh '''echo "开始停止$AppName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
sh "echo 目标服务器:dev-$AppHostName, 目标应用:$AppName"
sh 'scp ~/shutdown.sh root@dev-$AppHostName:/home/admin/' //copyshutdown脚本到应用服务器的/home/admin
sh 'ssh root@dev-$AppHostName "chmod +x /home/admin/shutdown.sh"' //赋予shutdown脚本执行权限
sh 'ssh root@dev-$AppHostName "chown admin:admin /home/admin/shutdown.sh "' //将shutdown脚本的拥有者改为admin:admin
sh '''ssh root@dev-$AppHostName "su - admin -c 'nohup ./shutdown.sh $AppName &'"''' //以admin用户执行shutdown脚本
}catch (exc) {
echo '停止应用服务异常'
}
sh '''echo "停止$AppName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
try{
sh '''echo "开始停止$PersistName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
sh "echo 目标服务器:dev-$PersistHostName, 目标应用:$PersistName"
sh 'scp ~/shutdown.sh root@dev-$PersistHostName:/home/admin/'
sh 'ssh root@dev-$PersistHostName "chmod +x /home/admin/shutdown.sh"'
sh 'ssh root@dev-$PersistHostName "chown admin:admin /home/admin/shutdown.sh "'
sh '''ssh root@dev-$PersistHostName "su - admin -c 'nohup ./shutdown.sh $PersistName &'"'''
}catch (exc) {
echo '停止应用服务异常'
}
sh '''echo "停止$PersistName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
try{
sh '''echo "开始停止$DidiName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
sh "echo 目标服务器:dev-$DidiHostName, 目标应用:$DidiName"
sh 'scp ~/shutdown.sh root@dev-$DidiHostName:/home/admin/'
sh 'ssh root@dev-$DidiHostName "chmod +x /home/admin/shutdown.sh"'
sh 'ssh root@dev-$DidiHostName "chown admin:admin /home/admin/shutdown.sh "'
sh '''ssh root@dev-$DidiHostName "su - admin -c 'nohup ./shutdown.sh $DidiName &'"'''
}catch (exc) {
echo '停止应用服务异常'
}
sh '''echo "停止$DidiName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
}
}
}
stage('dev部署') {
when {
branch 'dev*'
}
steps {
sh 'scp $AppName/target/$AppName.jar root@dev-$AppHostName:/home/admin/' //将jenkins编译生成的jar包远程拷贝到对应的应用服务器的/home/admin目录下
sh 'ssh root@dev-$AppHostName "chown admin:admin /home/admin/*.jar "' //将jar包的拥有者改为admin:admin
sh 'scp $PersistName/target/$PersistName.jar root@dev-$PersistHostName:/home/admin/'
sh 'ssh root@dev-$PersistHostName "chown admin:admin /home/admin/*.jar "'
sh 'scp $DidiName/target/$DidiName.jar root@dev-$DidiHostName:/home/admin/'
sh 'ssh root@dev-$DidiHostName "chown admin:admin /home/admin/*.jar "'
}
}
stage('dev启动服务') {
when {
branch 'dev*'
}
steps {
sh '''ssh root@dev-$AppHostName "su - admin -c 'nohup java -jar $AppName.jar >> ./logs/$AppName.log &' "''' //后台启动jar包,并将日志输出到log中,不输出控制台日志可写为 >> /dev/null
sh '''ssh root@dev-$PersistHostName "su - admin -c 'nohup java -jar $PersistName.jar >> ./logs/$PersistName.log &' "'''
sh '''ssh root@dev-$DidiHostName "su - admin -c 'nohup java -jar $DidiName.jar >> ./logs/$DidiName.log &' "'''
sh 'sleep 130' //启动等待时间
sh '''echo 结束 date "+%Y_%m_%d %H:%M:%S" '''
}
}
stage('dev健康检查') {
when {
branch 'dev*'
}
steps {
sh ' curl -X GET http://dev-$AppHostName:$Port/health ' //健康检查,访问服务器应用端口的 /health请求。又返回内容即检查成功
sh ' curl -X GET http://dev-$PersistName:$PersistPort/health '
sh ' curl -X GET http://dev-$DidiHostName:$PersistPort/health '
}
}
stage('test构建') {
when {
branch 'test*'
}
steps {
echo env.BRANCH_NAME
sh 'mvn -DskipTests=true clean install -T 5 -P test'
//sh 'mvn -DskipTests=true clean install -T 5 -P test,control'
sh 'cp $AppName/target/$AppName.jar ~/test/test-$AppName.jar'
sh 'cp $PersistName/target/$PersistName.jar ~/test/test-$PersistName.jar'
sh 'cp $DidiName/target/$DidiName.jar ~/test/test-$DidiName.jar'
}
}
stage('test停止服务') {
when {
branch 'test*'
}
steps {
script {
try{
sh '''echo "开始停止$AppName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
sh "echo 目标服务器:test-$AppHostName, 目标应用:$AppName"
sh 'scp ~/shutdown.sh root@test-$AppHostName:/home/admin/'
sh 'ssh root@test-$AppHostName "chmod +x /home/admin/shutdown.sh"'
sh 'ssh root@test-$AppHostName "chown admin:admin /home/admin/shutdown.sh "'
sh '''ssh root@test-$AppHostName "su - admin -c 'nohup ./shutdown.sh $AppName &'"'''
}catch (exc) {
echo '停止应用服务异常'
}
sh '''echo "停止$AppName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
try{
sh '''echo "开始停止$PersistName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
sh "echo 目标服务器:test-$PersistHostName, 目标应用:$PersistName"
sh 'scp ~/shutdown.sh root@test-$PersistHostName:/home/admin/'
sh 'ssh root@test-$PersistHostName "chmod +x /home/admin/shutdown.sh"'
sh 'ssh root@test-$PersistHostName "chown admin:admin /home/admin/shutdown.sh "'
sh '''ssh root@test-$PersistHostName "su - admin -c 'nohup ./shutdown.sh $PersistName &'"'''
}catch (exc) {
echo '停止应用服务异常'
}
sh '''echo "停止$PersistName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
try{
sh '''echo "开始停止$DidiName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
sh "echo 目标服务器:test-$DidiHostName, 目标应用:$DidiName"
sh 'scp ~/shutdown.sh root@test-$DidiHostName:/home/admin/'
sh 'ssh root@test-$DidiHostName "chmod +x /home/admin/shutdown.sh"'
sh 'ssh root@test-$DidiHostName "chown admin:admin /home/admin/shutdown.sh "'
sh '''ssh root@test-$DidiHostName "su - admin -c 'nohup ./shutdown.sh $DidiName &'"'''
}catch (exc) {
echo '停止应用服务异常'
}
sh '''echo "停止$DidiName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
}
}
}
stage('test部署') {
when {
branch 'test*'
}
steps {
sh 'scp $AppName/target/$AppName.jar root@test-$AppHostName:/home/admin/'
sh 'ssh root@test-$AppHostName "chown admin:admin /home/admin/*.jar "'
sh 'scp $PersistName/target/$PersistName.jar root@test-$PersistHostName:/home/admin/'
sh 'ssh root@test-$PersistHostName "chown admin:admin /home/admin/*.jar "'
sh 'scp $DidiName/target/$DidiName.jar root@test-$DidiHostName:/home/admin/'
sh 'ssh root@test-$DidiHostName "chown admin:admin /home/admin/*.jar "'
}
}
stage('test启动服务') {
when {
branch 'test*'
}
steps {
sh '''ssh root@test-$AppHostName "su - admin -c 'nohup java -jar $AppName.jar >> ./logs/$AppName.log &' "'''
sh '''ssh root@test-$PersistHostName "su - admin -c 'nohup java -jar $PersistName.jar >> ./logs/$PersistName.log &' "'''
sh '''ssh root@test-$DidiHostName "su - admin -c 'nohup java -jar $DidiName.jar >> ./logs/$DidiName.log &' "'''
sh 'sleep 130'
sh '''echo 结束 date "+%Y_%m_%d %H:%M:%S" '''
}
}
stage('test健康检查') {
when {
branch 'test*'
}
steps {
sh ' curl -X GET http://test-$AppHostName:$Port/health '
sh ' curl -X GET http://test-$PersistName:$PersistPort/health '
sh ' curl -X GET http://test-$DidiHostName:$PersistPort/health '
}
}
stage('release构建') {
when {
branch 'release*'
}
steps {
echo env.BRANCH_NAME
sh 'mvn -DskipTests=true clean install -T 5 -P product'
//sh 'mvn -DskipTests=true clean install -T 5 -P product,control'
//sh 'mkdir ~/release'
sh 'cp $AppName/target/$AppName.jar ~/release/release-$AppName.jar'
sh 'cp $PersistName/target/$PersistName.jar ~/release/release-$PersistName.jar'
sh 'cp $DidiName/target/$DidiName.jar ~/release/release-$DidiName.jar'
}
}
}
}