本文主要通过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仓库 将生成的密钥放在只具有只读权限的部署密钥中

然后就会开始运行代码中的步骤依次执行