目录
首先确保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'
- }
- }
- }
-
- }