目录

​​Jenkins安装部署使用_南宫乘风的博客

​​Jenkins入门配置_南宫乘风的博客

​​Jenkins集成Sonar Qube_南宫乘风的博客

Jenkins流水线

Jenkins流水线任务介绍

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。

Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。

所以Pipeline相对自由风格或者其他的项目风格更容易操作。

Jenkins的流水线(Pipeline)_自定义

Jenkins流水线任务

构建Jenkins流水线任务

构建任务

Jenkins的流水线(Pipeline)_自定义_02

 生成Groovy脚本

Hello World脚本生成

Jenkins的流水线(Pipeline)_git_03

 构建后查看视图

Jenkins的流水线(Pipeline)_jenkins_04

Groovy脚本

Groovy脚本基础语法

// 所有脚本命令包含在pipeline{}中
pipeline {
// 指定任务在哪个节点执行(Jenkins支持分布式)
agent any

// 配置全局环境,指定变量名=变量值信息
environment{
host = '172.17.1.22'
}

// 存放所有任务的合集
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('制作自定义镜像并发布Harbor') {
steps {
echo '制作自定义镜像并发布Harbor'
}
}

stage('基于Harbor部署工程') {
steps {
echo '基于Harbor部署工程'
}
}
}
}

配置Grovvy脚本

Jenkins的流水线(Pipeline)_jenkins_05

 查看效果

Jenkins的流水线(Pipeline)_运维_06

 ​​Ps:涉及到特定脚本,Jenkins给予了充足的提示,可以自动生成命令​

生成命令位置

Jenkins的流水线(Pipeline)_docker_07

Jenkinsfile实现

Jenkinsfile方式需要将脚本内容编写到项目中的Jenkinsfile文件中,每次构建会自动拉取项目并且获取项目中Jenkinsfile文件对项目进行构建

配置pipeline

Jenkins的流水线(Pipeline)_自定义_08

 准备Jenkinsfile

Jenkins的流水线(Pipeline)_docker_09

 ​​Jenkinsfile · 南宫乘风/java-demo - Gitee.com​

测试效果

Jenkins的流水线(Pipeline)_运维_10

Jenkins流水线任务实现

参数化构建

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

Jenkins的流水线(Pipeline)_自定义_11

拉取Git代码

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

 Jenkins的流水线(Pipeline)_jenkins_12

 Jenkins的流水线(Pipeline)_docker_13

Jenkins的流水线(Pipeline)_自定义_14

  将*/master更改为标签​​${tag}​

pipeline {

agent any
environment{
harborRepo = 'heianapp'
harborUser = 'heian99'
harborPasswd = 'NG+.mK4M-(s4CYX'
}
// 存放所有任务的合集
stages {
stage('拉取Git代码') {
steps {
echo '拉取Git代码'
checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'https://gitee.com/chengfeng99/java-demo.git']]])
}
}

stage('检测代码质量') {
steps {
echo '检测代码质量'
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=19d0d6b885e18455d257d61da08776bd4e180c04'
}
}

stage('构建代码') {
steps {
echo '构建代码'
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}

stage('制作自定义镜像并发布Harbor') {
steps {
echo '制作自定义镜像并发布Harbor'
sh '''
cp ./target/*.jar ./docker/demo.jar
cd ./docker
docker build -t ${JOB_NAME}:${BUILD_NUMBER} . '''

sh '''docker login -u ${harborUser} -p ${harborPasswd}
docker tag ${JOB_NAME}:${BUILD_NUMBER} ${harborUser}/${harborRepo}:${JOB_NAME}_${BUILD_NUMBER}
docker push ${harborUser}/${harborRepo}:${JOB_NAME}_${BUILD_NUMBER}'''
}
}

stage('基于Harbor部署工程') {
steps {
echo '基于Harbor部署工程'
sshPublisher(publishers: [sshPublisherDesc(configName: 'node-Linux32', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /opt/java/
echo "测试成功" >> log.txt
date >> log.txt''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/*.jar,docker/*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}

​​Ps:由于采用变量,记得使用双引号​​

进行构建

Jenkins的流水线(Pipeline)_jenkins_15

 已经成功

Jenkins的流水线(Pipeline)_docker_16