五.流水线任务

1.流水线简介

流水线是 Jenkins 对项目构建过程的一种管理方式,其将项目的构建过程按照构建阶段进行非常清晰的划分显示,用户可以通过可视化操作方式来轻松查看、管理构建过程中的各个阶段

流水线语法格式

  • pipeline{}

    流水线脚本的开始与结束,所有内容都在大括号中定义

  • agent any

    表示任意一台机构都可以

    因为jenkins可能是集群部署,实际构建时可能分配到任意一台机器上构建,agent any表示任意一台机构都可以

  • environment{}

    定义环境变量集合,在后面的阶段中可以直接引用该变量

  • stages

    构建阶段集合,所有的构建阶段都定义在里面

  • stage

    表示具体的构建阶段

  • steps

    表示该阶段中执行的步骤

【示例】

# 1、pipeline{}是流水线脚本的开始与结束,所有内容都在大括号中定义
pipeline {
	# 2、agent any:因为jenkins可能是集群部署,实际构建时可能分配到任意一台机器上构建,agent any表示任意一台机构都可以
    agent any
	# 3、environment:定义环境变量集合,在后面的阶段中可以直接引用该变量
	environment{
		userName='zhangsan'
		userPassword='123456'
	}
	# 4、stages:构建阶段集合,所有的构建阶段都定义在里面
    stages {
		# 5、stage:表示具体的构建阶段
		# 6、'阶段1':定义该阶段的名称
        stage('阶段1') {
			# 7、steps:表示该阶段中执行的步骤
            steps {
                echo '阶段1执行.....'
            }
        }
        
        stage('阶段2') {
            steps {
                echo '阶段2执行.....'
            }
        }
    }
}

2.流水线管理任务方式

Jenkins 流水线任务提供了两种维护脚本的方式

  • PipelineScript

    本地方式

    在Jenkins中维护的方式称为本地方式

  • Pipeline Script From SCM

    软件配置管理方式

    支持jenkins在git中维护脚本方式

2.1.PipelineScript流水线任务

(1).新建流水线任务

新建任务

在这里插入图片描述

选择流水线任务

在这里插入图片描述

(2).HelloWorld项目创建与构建
  1. 配置流水线任务

    在这里插入图片描述

  2. 开始构建

    在这里插入图片描述

  3. 查看阶段视图

    点击立即构建后就可以查看"阶段视图"(新版本这样查看,老版本构建完后直接就能查看)

    在这里插入图片描述

  4. 阶段详情

    在这里插入图片描述

(3).多阶段构建

为了更好的理解脚本这里对 hello workd 项目的脚本进行修改

在这里插入图片描述

修改配置信息

在这里插入图片描述

(4).再次构建

应用保存后再次立即构建

在这里插入图片描述

查看阶段视图

在这里插入图片描述

阶段视图发生较大变化

每个阶段上均可看到相应的日志

在这里插入图片描述

比如进入阶段2

在这里插入图片描述

2.2.PipelineScriptFromSCM流水线任务

(1).代码中追加 Jenkinsfile

每个要构建的项目采用 piple 方式进行构建管理要求必须要有一个构建脚本,而采用

SCM 脚本维护方式时默认该脚本文件名为 Jenkinsfile

在这里插入图片描述

对于本例在 Idea 中的项目根目录下追加一个名为 Jenkinsfile 的文件后再将原来的脚本内容复制到该文件中

为了显示区别这里对脚本内容进行了简单修改

pipeline {
    agent any

    stages {
        stage('构建阶段1') {
            steps {
                echo '构建阶段1.....'
            }
        }

        stage('构建阶段2') {
            steps {
                echo '构建阶段2.....'
            }
        }
        stage('构建阶段3') {
            steps {
                echo '构建阶段3.....'
            }
        }
    }
}

在这里插入图片描述

(2).提交修改到 GitLab

将项目的修改追加到 GitLab 中

在这里插入图片描述

然后在 GitLab 的项目首页中就可看到多了一个 Jenkinsfile 文件

(3).复制项目地址

然后再复制该项目的http 地址

在这里插入图片描述

(4).SCM流水线配置

这里修改的是前面的HelloWorldPipe任务

在 Jenkins 中流水线任务的"配置"中,流水线选择SCM 方式,SCM 选择Git,然后再将刚才复制的GitLab 仓库地址粘贴到这里

在这里插入图片描述

注意:下面还有脚本文件需要设置

在这里插入图片描述

这里可以看到文件名默认为 Jenkinsfile

当然可以更换

应用保存

(5).重新构建

重新立即构建后会发现除了这些阶段名称更新为了修改过的外还新增了一个新的阶段"Checkout SCM"(即从 SCM 中检出脚本阶段)

在这里插入图片描述

(6).更新Jenkinsfile

将之前的 TestJks 项目通过流水线方式进行构建管理

所以首先需要修改 Idea 中的 Jenkinsfile 文件内容,然后再提交到 GitLab

  1. 修改配置

    # 1、修改配置
    pipeline {
        agent any
    
        stages {
            stage('从GitLab拉取代码') {
                steps {
                    echo '从GitLab拉取代码成功.....'
                }
            }
            stage('将项目打为jar包') {
                steps {
                    echo '将项目打为jar包成功.....'
                }
            }
            stage('代码质量检测') {
                steps {
                    echo '代码质量检测成功.....'
                }
            }
            stage('构建并推送镜像到Harbor') {
                 steps {
                     echo '构建并推送镜像到Harbor成功.....'
                 }
            }
            stage('目标服务器运行') {
                steps {
                   echo '目标服务器运行成功.....'
                }
            }
        }
    }
    

    在这里插入图片描述

  2. 提交到GIT

    在这里插入图片描述

(7).重新构建

在 Jenkins 中对任务重新构建

在这里插入图片描述

3.SCM参数化配置

(1).定义Git 参数

在 Jenkins 中的 pipeline 任务中定义一个Git 参数,该参数仍为发布的 tag

在这里插入图片描述

添加git参数

在这里插入图片描述

设置参数值

在这里插入图片描述

(2).创建标签

删除旧标签

在这里插入图片描述

创建两个标签

在这里插入图片描述

填写标签信息

在这里插入图片描述

同理创建第二个标签

在这里插入图片描述

(3).流水线语法

在 pipeline 脚本文件中定义具体的命令语句来实现从GitLab 位取代码将项目打为 jar 包等任务需要通过pipeline 的脚本语法

不过通过pipeline任务中的流水线语法可自动生成符合 pipeline 脚本语法的脚本语句

在这里插入图片描述

(4).生成脚本命令

通过流水线语法生成从 GitLab 拉取代码的语句

首先从 GitLab 的项目中复制项目地址

在这里插入图片描述

然后在 Jenkins 的流水线语法中选择checkout:Check out from version control

在这里插入图片描述

将复制来的 GitLab 的项目地址粘贴到 Repository URL 中

在这里插入图片描述

点击生成流水线脚本,便可以下面的文本框中自动生成相应脚本语句

在这里插入图片描述

(5).更新Jenkinsfile

复制生成的流水线脚本并将其写入到 Idea 中的 Jenkinsfile 的相应 stage{}中

在这里插入图片描述

提交到 GitLab

在这里插入图片描述

(6).重新构建

对任务进行重新构建发现可以对构建的版本进行选择了

在这里插入图片描述

构建成功后便可看到在阶段视图中新增了一层的构建过程

在最上层的从 GitLab拉取代码阶段中点击 Logs便可看到拉取的日志

在这里插入图片描述

4.将项目打为 jar 包

(1).生成脚本命令

在 Jenkins 中通过流水线脚本语法生成将项目打为 jar 包的脚本语句

在这里插入图片描述

/var/jenkins_home/maven/bin/mvn  clean  package  -DskipTests

在这里插入图片描述

(2).更新Jenkinsfile

复制生成的流水线脚本并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中提交

在这里插入图片描述

(3).重新构建

对任务进行重新构建然后便可在最上层的将项目打为 jar 包阶段中点击 Logs便可看到 maven 构建的日志

在这里插入图片描述

查看阶段视图

在这里插入图片描述

5.代码质量检测

(1).生成脚本命令

在 Jenkins 中通过流水线脚本语法生成代码质量检测的脚本语句

在这里插入图片描述

  • 旧版本使用帐号/密码

    /var/jenkins_home/sonar-scanner/bin/sonar-scanner  -Dsonar.projectKey=${JOB_NAME}  -Dsonar.login=admin  -Dsonar.password=ZHl27161107*
    

    在这里插入图片描述

  • 新版本使用token

    /var/jenkins_home/sonar-scanner/bin/sonar-scanner  -Dsonar.projectKey=${JOB_NAME}  -Dsonar.token=squ_8ba31826f1d301f5777bba0febc4be3d801e3fc9
    

    在这里插入图片描述

(2).更新Jenkinsfile

复制生成的流水线脚本并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中提交

在这里插入图片描述

(3).重新构建

对任务进行重新立构建后便可在最上层的"通过 SonarQube 进行代码检测"阶段中点击 Logs,便可看到 SonarQube 代码检测的日志

在这里插入图片描述

查看阶段视图

在这里插入图片描述

查看详情

在这里插入图片描述

然后在 SonarQube 管理页面中就可看到新增加了一个 hello_pipeline 的项目了

在这里插入图片描述

6.构建镜像并推送到Harbor

(1).Jenkinsfile 中定义环境变量

在Idea 中的Jenkinsfile 文件中添加环境变量,这些变量将在后面生成的脚本命令中使用

environment{
    harbor_user='admin'
    harbor_password='ZHL27161107*'
    harbor_host='192.168.217.137'
    harbor_repository='jks'
}

在这里插入图片描述

提交到gitlab

在这里插入图片描述

(2).生成脚本命令

在 Jenkins 中通过流水线脚本语法生成推送镜像到Harbor的脚本语句

脚本语句中使用的是 Jenkinsfile 中定义的环境变量

在这里插入图片描述

# 1、将target目录下的jar包拷贝到docker目录下
mv   ./target/*.jar    ./docker/
# 2、构建镜像并将镜像放到docker目录下
# 这里的testTag是前面添加的git参数
docker  build  -t  ${JOB_NAME}:${scmtag}    ./docker
# 3、登录harbor
docker   login   -u   ${harbor_user}   -p   ${harbor_password}   ${harbor_host}
# 4、给镜像打上标签
docker   tag    ${JOB_NAME}:${scmtag}     ${harbor_host}/${harbor_repository}/${JOB_NAME}:${scmtag}
# 5、将镜像推送到harbor仓库
docker   push   ${harbor_host}/${harbor_repository}/${JOB_NAME}:${scmtag}
# 6、删除悬虚镜像
docker   image   prune   -f

在这里插入图片描述

(3).更新Jenkinsfile

复制生成的流水线脚本并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中后提交

在这里插入图片描述

(4).重新构建

对任务进行重新立构建,然后便可在最上层的构建镜像并推送到 Harbor阶段中点击 Logs,便可看到推送镜像到 Harbor 的日志

在这里插入图片描述

这次会构建失败

在这里插入图片描述

进入失败页面

在这里插入图片描述

查看错误日志

在这里插入图片描述

(5).修改项目任务名

根据日志可以看到给镜像打标签时报仓库名必须为小写错误

这是因为前面在建任务时项目名设置的为HelloWorldPipe,包含了大写字母导致的

这里需要给当前项目任务重命名以下,全部改成小写字母

在这里插入图片描述

设置新的名字

在这里插入图片描述

(6).修改docker.sock文件权限

如果docker虚拟机关机或者重启过,这个文件需要重新授权

# 修改文件

chown root:root /var/run/docker.sock

chmod o+rw /var/run/docker.sock

在这里插入图片描述

(7).重新构建

在这里插入图片描述

查看阶段视图

在这里插入图片描述

查看详情

在这里插入图片描述

Jenkins所在服务器查看

docker images

在这里插入图片描述

此时查看 harbor 的管理页面,可以看到在 jks 项目中新增加了hello_pipeline 的仓库,且仓库中具有v2的镜像

点击项目

在这里插入图片描述

点击仓库

在这里插入图片描述

具有v2的镜像

在这里插入图片描述

7.通知目标服务器执行 deploy 脚本

(1).添加端口号参数

为了使用户可以随时指定容器对外暴露的参数,这里在 Jenkins 当前任务下的配置参数化构建过程中添加一个字符参数

在这里插入图片描述

添加字符参数

在这里插入图片描述

设置参数信息

在这里插入图片描述

(2).生成脚本命令

在Jenkins 中通过流水线脚本语法生成通知目标服务器执行 deploy 脚本的脚本语句

选择sshPublisher:Send build artifacts over SSH并从中找到目标服务器

在这里插入图片描述

找到目标服务器

在这里插入图片描述

然后在下面的 Exec command 中键入要执行的命令生成流水线脚本

deploy.sh  $harbor_host  $harbor_repository  $JOB_NAME  $scmtag  9080  $export_port

在这里插入图片描述

(3).更新Jenkinsfile

复制生成的流水线脚本,并将其写入到 Idea 的 Jenkinsfile 的相应 stage{}中

注意:这里需要做点修改

将如下位置的单引号改成双引号,因为在environment中定义变量时是用单引号定义的,这里不改成双引号做区分的话就会报错

sshPublisher(publishers: [sshPublisherDesc(configName: 'my_target_server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh  $harbor_host  $harbor_repository  $JOB_NAME  $scmtag  9080  $export_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

在这里插入图片描述

提交到GIT

在这里插入图片描述

(4).重新构建

对任务进行重新构建后便可在最上层的通知目标服务器阶段中点击 Logs便可看到日志

在这里插入图片描述

查看阶段视图

在这里插入图片描述

查看详情

在这里插入图片描述

查看目标服务器中的镜像发现相应镜像已经从 harbor 上拉取了下来

docker images

在这里插入图片描述

查看正在运行的容器,发现应用已经启动

docker ps

在这里插入图片描述

到此通过 pipeline 进行项目构建已经全部完成

现在可以在浏览器上访问应用了

192.168.217.137:9080/test

在这里插入图片描述

六.添加钉钉提醒

这里要为流水线管理方式添加钉钉提醒功能

1.钉钉端操作

(1).创建项目群

首先需要在钉钉中创建一个项目群

在这里插入图片描述

选择联系人建群

在这里插入图片描述

选择好友创建群

在这里插入图片描述

(2).添加机器人

在项目群中添加一个自定义机器人,让该机器人进行项目构建提醒

在这里插入图片描述

选择机器人

在这里插入图片描述

添加机器人

在这里插入图片描述

选择"自定义"机器人

在这里插入图片描述

点击添加按钮

在这里插入图片描述

设置机器人信息

在这里插入图片描述

复制该 Webhook,后面在 Jenkins 配置时需要使用

在这里插入图片描述

添加完毕后,就可看到机器人在群里发布的加入消息

在这里插入图片描述

2.Jenkins 系统配置

(1).插件下载

在 Jenkins 中下载 DingTalk 插件

在这里插入图片描述

选择插件进行安装

在这里插入图片描述

安装成功后返回首页

在这里插入图片描述

(2).Jenkins 配置

在 Jenkins 的系统管理中可找到"钉钉",这是安装过 DingTalk 后出现的

在这里插入图片描述

点击新增按钮

在这里插入图片描述

设置钉钉信息

在这里插入图片描述

(3).项目配置

打开项目的"配置"

在这里插入图片描述

在 General 中可以看到前面配置的钉钉机器人,点击添加机器人,选择刚才创建的机器人

在这里插入图片描述

点击该机器人的 “高级”,做如下设置

## 项目构建篇${JOB_NAME}次通知
- 项目名称: ${PROJECT_NAME}
- 构建人: ${EXECUTOR_NAME}
- 构建结果: ${JOB_STATUS}
- 构建耗时: ${JOB_DURATION}

在这里插入图片描述

3.重新构建

(1).构建成功

对任务进行重新构建

在这里插入图片描述

查看构建视图

在这里插入图片描述

构建结束后,钉钉的项目群中会看到机器人发出的消息

在这里插入图片描述

(2).构建失败

随便将脚本中的某数据修改错,然后提交到GitLab

在这里插入图片描述

重新构建后会出错

在这里插入图片描述

同时也会在钉钉项目群中看到机器人发出的消息

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐