Jenkins 流水线:镜像仓库与自动化部署

流水线管理

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整合钉钉





相关推荐
YJlio2 小时前
Sysinternals 磁盘工具学习笔记(13.0):从 VHD 备份到碎片整理与卷标管理总览
服务器·笔记·学习
iconball2 小时前
个人用云计算学习笔记 --25 OpenStack 框架
运维·笔记·学习·云计算
iconball2 小时前
个人用云计算学习笔记 --27 云基础介绍
运维·笔记·学习·华为云·云计算
其美杰布-富贵-李2 小时前
PyTorch Tabular 学习笔记
pytorch·笔记·学习·表格
TheSumSt2 小时前
Python丨课程笔记Part2:方法论进阶部分
开发语言·笔记·python
摇滚侠3 小时前
Java 零基础全套视频教程,异常,处理异常,自定义异常,笔记 124-129
java·笔记
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [fs]initramfs
linux·笔记·学习
深蓝海拓3 小时前
PySide6从0开始学习的笔记(十八) MVC(Model-View-Controller)模式的图形渲染体系
笔记·python·qt·学习·pyqt
lpfasd1233 小时前
《乌合之众》精读笔记
笔记