流水线管理
pipeline流水线
通过结构化、代码化的方式管理软件交付流程,解决了传统自由风格构建在流程复杂时的维护、可视化难题,是 DevOps 中 CI/CD 流程落地的关键工具特性,具体特点及价值如下:
代码即流水线(Pipeline as Code)
通过Jenkinsfile(基于 Groovy DSL)定义流水线,并将其与项目代码一同纳入 Git/SVN 等版本控制系统管理。
- 价值:实现流水线的版本化、可协作管理,支持审查、回滚,避免 Web 界面手动配置的混乱与配置丢失问题。
支持持续集成与交付全流程
覆盖 "代码拉取→编译→测试→打包→部署→生产交付" 的完整链路,且可与 Git、Maven、Docker、Kubernetes 等主流工具无缝集成。
- 价值:实现端到端的自动化交付,打通 DevOps 工具链的各环节。
双语法适配不同场景
提供两种核心语法:
- 声明式(Declarative):语法简洁、结构化,降低学习成本,适合多数团队快速落地;
- 脚本式(Scripted):基于 Groovy 脚本,灵活性高,可适配复杂业务逻辑。
- 价值:兼顾 "易用性" 与 "灵活性",满足不同团队的技术习惯与场景需求。
可视化与阶段管理
- 通过 Blue Ocean 等 UI 工具,可直观查看每个
Stage(阶段)的执行状态; - 支持拆分多阶段、配置并行步骤。
- 价值:提升流程的可观测性,同时通过并行步骤优化执行效率。
可复用与模块化
借助 "共享库(Shared Library)" 提取公共步骤(如通用构建、部署逻辑),实现多项目复用。
- 价值:帮助团队统一构建、部署规范,减少重复工作,提升流程的标准化程度。
容错与恢复能力
支持try/catch/finally异常处理、断点续跑(checkpoint)、失败重试(retry)等机制。
- 价值:提升流水线的稳定性,降低流程中断的影响,加快故障恢复效率。
环境隔离与可移植性
可在 Docker 容器、Kubernetes Pod 或不同 Agent 节点中运行流水线。
- 价值:实现环境隔离(避免依赖冲突),同时适配多平台、多语言项目,提升流水线的迁移灵活性。
强大的插件生态
可结合 Jenkins 的丰富插件(如 Git、SonarQube、Slack 等)扩展功能,且插件可直接在流水线脚本中调用。
- 价值:进一步增强流水线的扩展性,快速适配各类业务需求(如代码质量检测、通知告警等)。
pipeline流水线任务




pipline项目完整构建
按照原来构建项目的流程,使用pipeline流水线进行分阶段的管理构建,并且构建后钉钉会 通知消息
bash
// 所有的脚本命令都放在pipeline中
pipeline {
// 指定任务构建所在节点
agent any
// 声明全局变量
environment {
key = 'value'
}
// 执行流程
stages {
stage('拉取git仓库代码') {
steps {
echo '拉取git仓库代码-SUCCESS'
}
}
stage('maven构建项目') {
steps {
echo 'maven构建项目-SUCCESS'
}
}
stage('sonarqube代码检测') {
steps {
echo 'sonarqube代码检测-SUCCESS'
}
}
stage('Docker制作镜像') {
steps {
echo 'Docker制作镜像-SUCCESS'
}
}
stage('将自定义镜像推动到harbor') {
steps {
echo '将自定义镜像推动到harbor-SUCCESS'
}
}
stage('Publish Over SSH通知目标服务器') {
steps {
echo 'Publish Over SSH通知目标服务器-SUCCESS'
}
}
}
}


SCM方式使用Jenkinsfile




http://192.168.100.90:82/yuxb_group/web_demo.git



第1步:拉取gitlab项目代码




到gitlab中,找到Jenkinsfile进行编辑



提交完后应用保存构建

第2步:maven项目构建



第3步:sonarqube代码检测
bash
sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=target
/usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=linux-test -Dsonar.login=63f82c73f2b12d47769574c3121347ad1d85e426 -Dsonar.projectKey=linuxtest -Dsonar.java.binaries=./target/




第4步:自定义镜像构建


bash
#构建前记得注意下权限问题
[root@jenkins jenkins_docker]# cd /var/run/
[root@jenkins run]# ll | grep docker
drwx------ 8 root root 180 Dec 15 09:14 docker
-rw-r--r-- 1 root root 4 Dec 15 09:14 docker.pid
srw-rw---- 1 root docker 0 Dec 15 09:07 docker.sock
[root@jenkins run]# chown root:root docker.sock
[root@jenkins run]# chmod o+rw docker.sock
[root@jenkins run]# ll | grep docker
drwx------ 8 root root 180 Dec 15 09:14 docker
-rw-r--r-- 1 root root 4 Dec 15 09:14 docker.pid
srw-rw-rw- 1 root root 0 Dec 15 09:07 docker.sock
[root@jenkins jenkins_docker]# docker images | grep pipeline

bash
#存在pipline这个镜像
[root@jenkins jenkins_docker]# docker images | grep pipline
pipline v3.0 0aebe3dc364a About a minute ago 543MB
第5步:推送镜像到harbor





第6步:通知目标服务器部署项目








bash
#构建前
[root@web ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2db3e25786a7 192.168.100.91/repo/mytest:v3.0 "/bin/sh -c 'java -j..." 3 days ago Exited (137) 2 days ago mytest
#开始构建

bash
#构建后
[root@web ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a574f141006 192.168.100.91/repo/pipline:v3.0 "/bin/sh -c 'java -j..." 16 seconds ago Up 14 seconds 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp pipline
2db3e25786a7 192.168.100.91/repo/mytest:v3.0 "/bin/sh -c 'java -j..." 3 days ago Exited (137) 2 days ago mytest
[root@web ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.100.91/repo/pipline v3.0 d77d0277189d 38 seconds ago 543MB
192.168.100.91/repo/mytest v3.0 3107989a91e0 3 days ago 543MB
mytest v2.0 7bd131a260a2 3 days ago 543MB
mytest v1.0 dedc61caceda 5 days ago 543MB
openjdk 8 b273004037cc 3 years ago 526MB


钉钉通知功能整合
Jenkins插件官网搜索DingTalk



钉钉






bash
https://oapi.dingtalk.com/robot/send?access_token=a0099caa1cb53b824c8dd97dd2c24cfd489072818ce6bfa6c46393e7d1d4a29e

Jenkins整合钉钉





