13.CICD与Jenkins_03_流水线任务与集成钉钉
五.流水线任务
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项目创建与构建
-
配置流水线任务

-
开始构建

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

-
阶段详情

(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、修改配置 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 '目标服务器运行成功.....' } } } }
-
提交到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

重新构建后会出错

同时也会在钉钉项目群中看到机器人发出的消息
更多推荐
所有评论(0)