Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署

1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面

2构建参数

2pipeline脚本

Jenkinsfile文件内容

复制代码
pipeline {
    agent any

   environment {
        key="value"
   }
    stages {
        stage("拉取git仓库代码") {
            steps {
                deleteDir()
                checkout scmGit(branches: [[name: "$tag"]], extensions: [], userRemoteConfigs: [[url: 'http://192.168.88.120:8929/root/test.git']])
                echo '拉取git仓库代码 --SUCCESS'
            }
        }
        stage("通过maven构建项目") {
             steps {
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
                echo '通过maven构建项目 --SUCCESS'
             }
        }
         stage("通过sonarqube做代码质量检测") {
              steps {
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner  -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.login=2f0c3fe097389f621ebe683db16dc83931cb3502  -Dsonar.projectKey=${JOB_NAME}   -Dsonar.java.binaries=./target/'
                echo '通过sonarqube做代码质量检测 --SUCCESS'
               }
         }
         stage("通过docker制作自定义镜像") {
              steps {
                sh '''mv target/*.jar  docker/
                cd docker/
                docker build -t ${JOB_NAME}:$tag ./'''
                echo '通过docker制作自定义镜像 --SUCCESS'
              }
         }

          stage("将自定义镜像推送到harbor仓库") {
               steps {
                    sh '''docker login -u admin -p Harbor12345 192.168.88.121:80
                          docker tag ${JOB_NAME}:$tag 192.168.88.121:80/repo/${JOB_NAME}:$tag
                          docker push 192.168.88.121:80/repo/${JOB_NAME}:$tag'''
                    echo '将自定义镜像推送到harbor仓库 --SUCCESS'
               }
          }
          stage("远程仓库下载并启动容器") {
                 steps {
                   sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "docker.sh 192.168.88.121:80 repo ${JOB_NAME}  $tag  $container_port  $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                   echo '远程仓库下载并启动容器 --SUCCESS'
                 }
          }
    }

}

3.优化后的pipeline代码

复制代码
pipeline {
    agent any

   environment {
        harborUser = "admin"
        harborPasswd = "Harbor12345"
        harborAddress = "192.168.88.121:80"
        harborRepo = "repo"
   }
    stages {
        stage("拉取git仓库代码") {
            steps {
                deleteDir()
                checkout scmGit(branches: [[name: "$tag"]], extensions: [], userRemoteConfigs: [[url: 'http://192.168.88.120:8929/root/test.git']])
                echo '拉取git仓库代码 --SUCCESS'
            }
        }
        stage("通过maven构建项目") {
             steps {
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
                echo '通过maven构建项目 --SUCCESS'
             }
        }
         stage("通过sonarqube做代码质量检测") {
              steps {
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner  -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.login=2f0c3fe097389f621ebe683db16dc83931cb3502  -Dsonar.projectKey=${JOB_NAME}   -Dsonar.java.binaries=./target/'
                echo '通过sonarqube做代码质量检测 --SUCCESS'
               }
         }
         stage("通过docker制作自定义镜像") {
              steps {
                sh '''mv target/*.jar  docker/
                cd docker/
                docker build -t ${JOB_NAME}:${tag} ./'''
                echo '通过docker制作自定义镜像 --SUCCESS'
              }
         }

          stage("将自定义镜像推送到harbor仓库") {
               steps {
                    sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
                          docker tag ${JOB_NAME}:$tag ${harborAddress}/${harborRepo}/${JOB_NAME}:$tag
                          docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
                    echo '将自定义镜像推送到harbor仓库 --SUCCESS'
               }
          }
          stage("远程仓库下载并启动容器") {
                 steps {
                   sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "docker.sh ${harborAddress} ${harborRepo} ${JOB_NAME}  ${tag}  ${container_port}  ${host_port}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                   echo '远程仓库下载并启动容器 --SUCCESS'
                 }
          }
    }

}
相关推荐
Lalolander9 分钟前
设备制造行业如何避免项目管理混乱?
运维·制造·工程项目管理·四算一控·epc·环保设备工程·设备制造
LucianaiB28 分钟前
【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
运维·数据库·人工智能·金仓数据库 2025 征文·数据库平替用金仓
prinrf('千寻)43 分钟前
nacos设置权重进行负载均衡不生效
运维·负载均衡
Lary_Rock1 小时前
Android 编译问题 prebuilts/clang/host/linux-x86
android·linux·运维
绵绵细雨中的乡音1 小时前
Linux进程学习【基本认知】
linux·运维·学习
珹洺2 小时前
Linux操作系统从入门到实战(三)Linux基础指令(上)
linux·运维·服务器
剁椒排骨2 小时前
win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
运维·windows·经验分享·计算机外设·win11·win10
angushine2 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
归寻太乙3 小时前
Linux环境变量
linux·运维·服务器
m0Java门徒3 小时前
面向对象编程核心:封装、继承、多态与 static 关键字深度解析
java·运维·开发语言·intellij-idea·idea