马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
DevOps之安装和设置 Jenkins (一)
DevOps 之 CI/CD入门操纵 (二)
Sonar Qube先容和安装(三)
Harbor镜像堆栈先容&安装 (四)
Jenkins容器使用宿主机Docker(五)
Jenkins流水线初体验(六)
一、Jenkins流水线使命先容
之前采取Jenkins的自由风格构建的项目,每个步调流程都要通过差别的方式设置,而且构建过程中团体流程是不可见的,无法确认每个流程耗费的时间,而且题目不方便定位题目。
Jenkins的Pipeline可以让项目的发布团体流程可视化,明白实行的阶段,可以快速的定位题目。而且整
个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。
以是Pipeline相对自由风格大概其他的项目风格更轻易操纵。
二、Jenkins流水线使命
2.1 Hello World
2.2 Groovy脚本
- // 所有脚本命令包含在pipeline{}中
- pipeline {
- // 指定任务在哪个节点执行(Jenkins支持分布式)
- agent any
- // 配置全局环境,指定变量名=变量值信息
- environment{
- host = '192.168.11.11'
- }
- // 存放所有任务的合集
- stages {
- // 单个任务
- stage('任务1') {
- // 实现任务的具体流程
- steps {
- echo 'do something'
- }
- }
- // 单个任务
- stage('任务2') {
- // 实现任务的具体流程
- steps {
- echo 'do something'
- }
- }
- // ……
- }
- }
复制代码
- pipeline {
- agent any
- // 存放所有任务的合集
- stages {
- stage('拉取Git代码') {
- steps {
- echo '拉取Git代码'
- }
- }
-
- stage('构建代码') {
- steps {
- echo '构建代码'
- }
- }
- stage('检测代码质量') {
- steps {
- echo '检测代码质量'
- }
- }
- stage('制作自定义镜像') {
- steps {
- echo '制作自定义镜像'
- }
- }
- stage('镜像并发布Harbor') {
- steps {
- echo '镜像并发布Harbor'
- }
- }
- stage('基于Harbor部署工程') {
- steps {
- echo '基于Harbor部署工程'
- }
- }
- }
- }
复制代码
2.3 Pipeline script from SCM
2.4 参数化构建
三、新建Jenkins流水线使命
3.1 拉取Git代码
通过流水线语法天生Checkout代码的脚本
脚本示例
- 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']])
- }
- }
- }
- }
复制代码 3.2 构建代码
通过脚本实行mvn的构建下令
- /var/jenkins_home/maven/bin/mvn clean package -DskipTests
复制代码
- 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
- ' } } }}
复制代码 3.3 代码质量检测
通过脚本实行sonar-scanner下令即可
- /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
复制代码
- 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
- ' } } 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.4 制作自界说镜像
天生自界说镜像脚本
- cp ./target/*.jar ./docker/
- cd ./docker
- docker build -t ${JOB_NAME}:${tag} ./
复制代码
- 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
- ' } } 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
- ' } } stage('制作自界说镜像') { steps { sh '''cp ./target/*.jar ./docker/ cd ./docker docker build -t ${JOB_NAME}:${tag} ./''' } } }}
复制代码 3.5 发布镜像到Harbor
- docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
- docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}
- docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}
复制代码
- 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
- ' } } 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
- ' } } 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(五)
- deploy.sh ${harborHost} ${harborRepo} ${JOB_NAME} $tag 8081
复制代码
- 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
- ' } } 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
- ' } } 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
- ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } } }}
复制代码 3.7 Jenkins日记输出,会表现各个步调
|