Jenkins流水线初体验(六)

[复制链接]
发表于 2025-12-5 16:45:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
DevOps之安装和设置 Jenkins (一)
DevOps 之 CI/CD入门操纵 (二)
Sonar Qube先容和安装(三)
Harbor镜像堆栈先容&安装 (四)
Jenkins容器使用宿主机Docker(五)
Jenkins流水线初体验(六)
一、Jenkins流水线使命先容

之前采取Jenkins的自由风格构建的项目,每个步调流程都要通过差别的方式设置,而且构建过程中团体流程是不可见的,无法确认每个流程耗费的时间,而且题目不方便定位题目。
Jenkins的Pipeline可以让项目的发布团体流程可视化,明白实行的阶段,可以快速的定位题目。而且整
个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。
以是Pipeline相对自由风格大概其他的项目风格更轻易操纵。
二、Jenkins流水线使命

2.1 Hello World



  • 新建使命



  • 天生Groovy脚本



  • 构建后查察视图

2.2 Groovy脚本



  • Groovy脚本根本语法
  1. // 所有脚本命令包含在pipeline{}中
  2. pipeline {
  3.         // 指定任务在哪个节点执行(Jenkins支持分布式)
  4.         agent any
  5.         // 配置全局环境,指定变量名=变量值信息
  6.         environment{
  7.                 host = '192.168.11.11'
  8.         }
  9.         // 存放所有任务的合集
  10.         stages {
  11.                 // 单个任务
  12.                 stage('任务1') {
  13.                         // 实现任务的具体流程
  14.                         steps {
  15.                                 echo 'do something'
  16.                         }
  17.                 }
  18.                 // 单个任务
  19.                 stage('任务2') {
  20.                         // 实现任务的具体流程
  21.                         steps {
  22.                                 echo 'do something'
  23.                         }
  24.                 }
  25.                 // ……
  26.         }
  27. }
复制代码


  • 编写测试流程
  1. pipeline {
  2.         agent any
  3.         // 存放所有任务的合集
  4.         stages {
  5.                 stage('拉取Git代码') {
  6.                         steps {
  7.                                 echo '拉取Git代码'
  8.                         }
  9.                 }
  10.        
  11.                 stage('构建代码') {
  12.                         steps {
  13.                                 echo '构建代码'
  14.                         }
  15.                 }
  16.                 stage('检测代码质量') {
  17.                         steps {
  18.                                 echo '检测代码质量'
  19.                         }
  20.                 }
  21.                 stage('制作自定义镜像') {
  22.                         steps {
  23.                                 echo '制作自定义镜像'
  24.                         }
  25.                 }
  26.                 stage('镜像并发布Harbor') {
  27.                         steps {
  28.                                 echo '镜像并发布Harbor'
  29.                         }
  30.                 }
  31.                 stage('基于Harbor部署工程') {
  32.                         steps {
  33.                                 echo '基于Harbor部署工程'
  34.                         }
  35.                 }
  36.         }
  37. }
复制代码


  • 查察结果

2.3 Pipeline script from SCM



  • Gitlab新建Jenkinsfile




  • Jenkins项目设置


2.4 参数化构建



  • 添加参数化构建,方便选择不的项目版本

三、新建Jenkins流水线使命

3.1 拉取Git代码

通过流水线语法天生Checkout代码的脚本


脚本示例
  1. pipeline {
  2.         agent any
  3.         // 存放所有任务的合集
  4.         stages {
  5.                 stage('拉取Git代码') {
  6.                         steps {
  7.                                 checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '352c8b85-d0fb-44e2-b14d-2adfc0f38f34', url: 'http://192.168.43.128:8929/root/mytest.git']])
  8.                         }
  9.                 }
  10.         }
  11. }
复制代码
3.2 构建代码

通过脚本实行mvn的构建下令
  1. /var/jenkins_home/maven/bin/mvn clean package -DskipTests
复制代码

  1. pipeline {        agent any        // 存放全部使命的合集        stages {                stage('拉取Git代码') {                        steps {                                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '352c8b85-d0fb-44e2-b14d-2adfc0f38f34', url: 'http://192.168.43.128:8929/root/mytest.git']])                        }                }                stage('构建代码') {                        steps {                                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests
  2. '                        }                }        }}
复制代码
3.3 代码质量检测

通过脚本实行sonar-scanner下令即可
  1. /var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=718e3d1d21ae6a55ddea5e0979d5eb762d9d51fc
复制代码

  1. pipeline {        agent any        // 存放全部使命的合集        stages {                stage('拉取Git代码') {                        steps {                                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '352c8b85-d0fb-44e2-b14d-2adfc0f38f34', url: 'http://192.168.43.128:8929/root/mytest.git']])                        }                }                stage('构建代码') {                        steps {                                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests
  2. '                        }                }                stage('检测代码质量') {                        steps {                                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=718e3d1d21ae6a55ddea5e0979d5eb762d9d51fc
  3. '                        }                }                }}
复制代码
3.4 制作自界说镜像

天生自界说镜像脚本
  1. cp ./target/*.jar ./docker/
  2. cd ./docker
  3. docker build -t ${JOB_NAME}:${tag} ./
复制代码

  1. pipeline {        agent any        // 存放全部使命的合集        stages {                stage('拉取Git代码') {                        steps {                                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '352c8b85-d0fb-44e2-b14d-2adfc0f38f34', url: 'http://192.168.43.128:8929/root/mytest.git']])                        }                }                stage('构建代码') {                        steps {                                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests
  2. '                        }                }                stage('检测代码质量') {                        steps {                                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=718e3d1d21ae6a55ddea5e0979d5eb762d9d51fc
  3. '                        }                }                stage('制作自界说镜像') {                        steps {                                sh '''cp ./target/*.jar ./docker/                                        cd ./docker                                        docker build -t ${JOB_NAME}:${tag} ./'''                        }                }        }}
复制代码
3.5 发布镜像到Harbor

  1. docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
  2. docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}
  3. docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}
复制代码

  1. pipeline {        agent any        environment{                harborHost = '192.168.43.141:80'                harborRepo = 'repo'                harborUser = 'admin'                harborPasswd = 'Harbor12345'        }        // 存放全部使命的合集        stages {                stage('拉取Git代码') {                        steps {                                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '352c8b85-d0fb-44e2-b14d-2adfc0f38f34', url: 'http://192.168.43.128:8929/root/mytest.git']])                        }                }                stage('构建代码') {                        steps {                                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests
  2. '                        }                }                stage('检测代码质量') {                        steps {                                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=718e3d1d21ae6a55ddea5e0979d5eb762d9d51fc
  3. '                        }                }                stage('制作自界说镜像') {                        steps {                                sh '''cp ./target/*.jar ./docker/                                        cd ./docker                                        docker build -t ${JOB_NAME}:${tag} ./'''                        }                }                stage('镜像并发布Harbor') {                        steps {                                sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}                                        docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}                                        docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}'''                        }                }                }}
复制代码
3.6 基于Harbor摆设工程

deploy.sh 脚本参考:Jenkins容器使用宿主机Docker(五)
  1. deploy.sh ${harborHost} ${harborRepo} ${JOB_NAME} $tag 8081
复制代码

  1. pipeline {        agent any        environment{                harborHost = '192.168.43.141:80'                harborRepo = 'repo'                harborUser = 'admin'                harborPasswd = 'Harbor12345'        }        // 存放全部使命的合集        stages {                stage('拉取Git代码') {                        steps {                                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '352c8b85-d0fb-44e2-b14d-2adfc0f38f34', url: 'http://192.168.43.128:8929/root/mytest.git']])                        }                }                stage('构建代码') {                        steps {                                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests
  2. '                        }                }                stage('检测代码质量') {                        steps {                                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=718e3d1d21ae6a55ddea5e0979d5eb762d9d51fc
  3. '                        }                }                stage('制作自界说镜像') {                        steps {                                sh '''cp ./target/*.jar ./docker/                                        cd ./docker                                        docker build -t ${JOB_NAME}:${tag} ./'''                        }                }                stage('镜像并发布Harbor') {                        steps {                                sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}                                        docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}                                        docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}'''                        }                }                stage('基于Harbor摆设工程') {                        steps {                                sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''deploy.sh ${harborHost} ${harborRepo} ${JOB_NAME} $tag 8081
  4. ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])                        }                }        }}
复制代码
3.7 Jenkins日记输出,会表现各个步调


回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表