Java配置4-配置Jenkins Pipline

目录

1.Jenkins环境

2.创建pipeline项目

1)创建新的pipeline

2)添加ssh秘钥到gitlab

3)配置定时扫描

4)配置filter by name

5)配置http连接

6)新建任务创建

3.Jenkinsfile模板


1.Jenkins环境

首先确保jenkins服务器上的jenkins用户可以使用JDK、git、maven,jenkins安装了Open Blue Ocean插件。

感谢南哥,文档大部分是他写的,我只是做了排版。

2.创建pipeline项目

1)创建新的pipeline

登录jenkins,进入Open Blue Ocean

Java配置4-配置Jenkins Pipline_第1张图片

 

代码库选择git,将gitlab项目的ssh连接地址粘到仓库url中。

Java配置4-配置Jenkins Pipline_第2张图片

 

然后下面会生成秘钥,需要将秘钥粘到gitlab中。

Java配置4-配置Jenkins Pipline_第3张图片

 

2)添加ssh秘钥到gitlab

登录gitlab

选择用户设置中的ssh秘钥,将秘钥添加到右面的秘钥框中,点击增加秘钥即可。

Java配置4-配置Jenkins Pipline_第4张图片

 

添加成功ssh秘钥后,点击pipeline创建界面的创建pipeline会生成项目的管道。点击进入项目管道,里面就是项目中的各个分支。

3)配置定时扫描

选择管道中的configure选项,进入管道配置。勾选上triggers即可实现隔一段时间扫描gitlab项目代码的各分支是否有变化。有变化就开始执行项目中的JenkinsFile。

 

4)配置filter by name

在项目源中可以add filter by name配置,直接筛选jenkins要管理的分支。

Java配置4-配置Jenkins Pipline_第5张图片

 

5)配置http连接

也可以将git源的地方改为http的连接,这是需要add认证。

 

点击Add,选择Username with password,在username和password处填上gitlab的用户和密码即可。

Java配置4-配置Jenkins Pipline_第6张图片

6)新建任务创建

选择新建任务,选择pipeline类型即可。和blue ocean的configure的界面相同,只需配置git源路径和扫描定时器即可。详细见上一种方法。

 

3.Jenkinsfile模板

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'
        }
     }
  }

}

     

你可能感兴趣的:(Java配置,Java,Java配置,Jenkins,pipeline)