自动化发布工具CI/CD实践Jenkins部署与配置教程

news2025/4/1 9:09:44

1. 前言背景

  其实一直想把jenkins 的笔记整理下,介于公司这次升级jenkins2.0 ,根据自己部署的一些经验,我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目,随着项目的日益增多,环境越来越复杂,需求多,差异化的配置错综复杂,公司产品线大升级;是想着好好的把jenkins 平台给规划下做下升级,兼容更多的场景;

  于是,就有了jenkins2.0 的一个探索,截止发文前,已投入生产实践中,本文我更多的还是来阐述分享点jenkins2.0 中带来的一些好的功能点,想法;同时也给大家规避类一些问题。

古代治学总结有人生三境界,在我看来,jenkins 使用接入亦有三个阶段,这也是每一个运维人员应用 jenkins 所必须要经历的。

第一阶段:初接触,有很多不熟悉不了解,应用场景也大多是依赖手工点点点维护的 free style 或者 maven 风格的项目,通过配置一些参数,结合脚本进行项目的构建与发布。这种维护方式其实也是 jenkins 在 1.0 时代的普遍使用姿势。它的最大弊端在于一切参数都要配置化,当维护的项目数量增多的时候,又遇到某些普遍性需要更改的地方,那么维护起来就是一场灾难了。

第二阶段:慢慢往后深入,接触越来越多,逐渐开始了解 pipeline,亦即 jenkins 在 2.0 时代提出的一个新概念:配置即代码,或者说代码即配置。我们可以不必点点点勾选过多地配置项,只需通过代码定义即可实现相同的效果。只不过据我了解,很多人在这个阶段,因为对流水线基础语法掌握程度不够,因此还有很多人是手工配置参数,然后再结合 jenkinsfile 来进行构建发布的,其实这种方式,并没有真正体悟到 2.0 的设计精髓,自然也无法吃到这波技术红利了。

第三阶段:你不应该满足于维护大量 jenkinsfile 的现状中,过多的 jenkinsfile 就像一个又一个肥大的肿块儿一般,对于后期的二次维护,都是极大的挑战。你可能听过共享库,渐渐你开始了解共享库,尝试共享库,最后将同一个类别的 jenkinsfile 进行逻辑抽象,每个项目都变成了另外一种变相的参数化构建,从而接入项目只需配置对应的 引导文件 即可,这种方式能够极大地简化 jenkins 的运维使用难度,对项目交付效率的提升有极大的帮助。

image-20230605124250267

 上图,是我司CI/CD 的一个发展阶段,在jenkins2.0 时候,我们做了一个大的变动,使用共享库,将同一个类别的 jenkinsfile 进行逻辑抽象,每个项目都变成了另外一种变相的参数化构建,只需要维护每个项目各自的参数,也就是引导文件, 即可对项目进行交付,另外jenkins2.0 上涉及的一切配置、环境、基础设施、数据变更都纳入版本控制范围。一切皆代码,这也是GitOps的理念

2.部署条件

2.1 官网及下载

jenkins官方网站:Jenkins

image-20230605131908560

Stable (LTS) : 稳定版本,长期支持 (LTS) 发布基线每 12 周从常规版本流中选择一次。每 4 周发布一次稳定版本
Regular releases (Weekly) : 定期发布(每周) 该发布线可快速向需要它们的用户和插件开发人员提供错误修复和新功能。它通常每周提供一次

image-20230605133013629

2.1 软件要求

官网: jenkins requires Java 11 or 17 since jenkins 2.357 and LTS 2.361.1

Java11

2.2 服务器硬件要求

  • 小型团队的推荐硬件配置:
    • 4 GB+ of RAM
    • 50 GB+ of drive space 50 GB+ 驱动器空间

3. 安装部署

3.1 本次安装环境信息

名称版本
Centos7Centos7.9 【8核16g500G 】
jenkinsjenkins 2.401.1 LTS
JavaOpenjdk11.0.2

3.2 部署jdk

  • 下载地址 https://repo.huaweicloud.com/java/jdk/11.0.2+9/jdk-11.0.2_linux-x64_bin.tar.gz

image-20230605160125095

#建立软件工作目录
[root@localhost /]# mkdir -p /home/application/

#下载软件包
[root@localhost /]# wget  https://repo.huaweicloud.com/java/jdk/11.0.2+9/jdk-11.0.2_linux-x64_bin.tar.gz

#解压软件包
[root@localhost /]# tar -xf jdk-11.0.2_linux-x64_bin.tar.gz  -C /home/application/
[root@localhost /]# rm -rf jdk-11.0.2_linux-x64_bin.tar.gz

[root@localhost /]# ls -l /home/application/jdk-11.0.2/
total 32
drwxr-xr-x  2 root root 4096 Jun  5 04:07 bin
drwxr-xr-x  4 root root 4096 Jun  5 04:07 conf
drwxr-xr-x  3 root root 4096 Jun  5 04:07 include
drwxr-xr-x  2 root root 4096 Jun  5 04:07 jmods
drwxr-xr-x 72 root root 4096 Jun  5 04:07 legal
drwxr-xr-x  6 root root 4096 Jun  5 04:07 lib
-r--r--r--  1  668  668  160 Jan 18  2019 README.html
-rw-r--r--  1  668  668 1256 Jan 18  2019 release

Copy

3.3 部署jenkins

3.3.1 创建jenkins软件工作目录,并下载最近的LTS war包
#建立jenkins软件工作目录
[root@localhost application]#  mkdir -p /home/application/jenkins

#下载最近的LTS war包
[root@localhost application]# wget http://get.jenkins.io/war-stable/2.401.1/jenkins.war -P /home/application/jenkins

Copy

3.3.2 创建jenkins 主目录

如果不指定jenkins 主目录的话,默认是在 /root/.jenkins 目录下 ; 因为咱这里给jenkins 单独创建了/home/application/jenkins工作目录,就需要指定下

官方阐述了更改主目录的三种方法:

jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改:

  1. 使用你Web容器的管理工具设置jenkins_HOME环境参数.
  2. 在启动Web容器之前设置jenkins_HOME环境变量.
  3. (不推荐)更改jenkins.war(或者在展开的Web容器)内的web.xml配置文件

这里我们使用systemd 去管理jenkins 的启动停止,在Environment 中添加 JENKINS_HOME=/home/application/jenkins

3.3.3 使用systemd管理jenkins,并添加开机自启动
#使用systemd管理jenkins,并添加开机自启动
[root@localhost ~]# vim /etc/systemd/system/jenkins.service
[Unit]
Description=Jenkins Agent
After=network.target

[Service]
User=root
Environment="JENKINS_HOME=/home/application/jenkins"
ExecStart=/home/application/jdk-11.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=true
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target




[root@localhost jenkins]# chmod +x /etc/systemd/system/jenkins.service
#添加开机自启动
[root@localhost jenkins]# systemctl enable jenkins

Copy

3.3.4 启动jenkins
[root@localhost ~]# systemctl start jenkins

[root@localhost ~]# systemctl status jenkins
● jenkins.service - jenkins Agent
   Loaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-06-05 05:01:48 EDT; 3s ago
 Main PID: 27603 (java)
   CGroup: /system.slice/jenkins.service
           └─27603 /home/application/jdk-11.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=true

Jun 05 05:01:48 localhost.localdomain systemd[1]: Started jenkins Agent.
Jun 05 05:01:49 localhost.localdomain bash[27603]: Running from: /home/application/jenkins/jenkins.war
Jun 05 05:01:49 localhost.localdomain bash[27603]: webroot: /root/.jenkins/war
Jun 05 05:01:49 localhost.localdomain bash[27603]: 2023-06-05 09:01:49.735+0000 [id=1]        INFO        winstone.Logger#logInternal: Beginning extraction from war file
Jun 05 05:01:52 localhost.localdomain bash[27603]: 2023-06-05 09:01:52.031+0000 [id=1]        WARNING        o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
Jun 05 05:01:52 localhost.localdomain bash[27603]: 2023-06-05 09:01:52.127+0000 [id=1]        INFO        org.eclipse.jetty.server.Server#doStart: jetty-10.0.13; built: 2022-12-07T20:13:20.134Z; git: 1c2636ea05c0ca8de1ffd6ca7f3a98ac084c766d; jvm 11.0.2+9-LTS
Hint: Some lines were ellipsized, use -l to show in full.

Copy

3.3.5 启动解锁jenkins

大概一两分钟后,可以看到日志输出,jenkins已经初始化安装成功,并且给出了管理员admin的登陆密码为946312e6f67746aba40950417e9c70b4

当然也可在/root/.jenkins/secrets/initialAdminPassword 文件中看到密码

[root@localhost ~]#  systemctl status jenkins
● jenkins.service - jenkins Agent
   Loaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-06-05 05:01:48 EDT; 2min 53s ago
 Main PID: 27603 (java)
   CGroup: /system.slice/jenkins.service
           └─27603 /home/application/jdk-11.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=true

Jun 05 05:01:55 localhost.localdomain bash[27603]: Please use the following password to proceed to installation:
Jun 05 05:01:55 localhost.localdomain bash[27603]: 946312e6f67746aba40950417e9c70b4
Jun 05 05:01:55 localhost.localdomain bash[27603]: This may also be found at: /root/.jenkins/secrets/initialAdminPassword
Jun 05 05:01:55 localhost.localdomain bash[27603]: *************************************************************
Jun 05 05:01:55 localhost.localdomain bash[27603]: *************************************************************
Jun 05 05:01:55 localhost.localdomain bash[27603]: *************************************************************
Jun 05 05:02:13 localhost.localdomain bash[27603]: 2023-06-05 09:02:13.107+0000 [id=35]        INFO        jenkins.InitReactorRunner$1#onAttained: Completed initialization
Jun 05 05:02:13 localhost.localdomain bash[27603]: 2023-06-05 09:02:13.124+0000 [id=23]        INFO        hudson.lifecycle.Lifecycle#onReady: jenkins is fully up and running
Jun 05 05:02:14 localhost.localdomain bash[27603]: 2023-06-05 09:02:14.052+0000 [id=49]        INFO        h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
Jun 05 05:02:14 localhost.localdomain bash[27603]: 2023-06-05 09:02:14.053+0000 [id=49]        INFO        hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1



[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword
946312e6f67746aba40950417e9c70b4

Copy

4. 安装后配置

4.1 登录jenkins平台

如果没有指定端口的话,默认是8080; 如果要指定端口的话,需要再启动文件里 加上 --httpPort=8888

贴入密码

image-20230605170749503

4.2 安装jenkins插件

选择 安装jenkins社区推荐的插件;安装过程可能会有点问题,安装失败啥的,重复安装就行,如果实在安装不下去,可以跳过,等进入到jenkins 设置界面设置代理地址即可

image-20230605170931162

image-20230605171530830

4.3 创建用户,配置实例

  • 在这里创建一个管理员账号,到此jenkins的初始化配置已完成。

     

    image-20230605171711196

     

    image-20230605171727183

     

    image-20230605171746303

     

    image-20230605171900076

4.4 配置更新站点

  • 由于使用官方的站点速度相对很慢,这里采用清华大学的jenkins更新站点。

  • 站点地址: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

  • image-20230605172048680

image-20230605172136772

image-20230605172208228

image-20230605172232042

到这里安装基本上就完成了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是SQL作业

SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程,这些作业由Microsoft SQL Server中的SQL Server代理管理,对于自动执行日常任务(如数据库系统中的备份、数据导入和报告生成)以及确保及时准确地处理和更新数据…

Android实践开发制作小猴子摘桃小游戏

Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取:Android可能存在版本差异项目如果不能正确运行,可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…

springboot整合couchbase(集群)

springboot整合couchbase 1、Couchbase1.1、介绍1.2、Bucket1.3、Couchbase SDK 2、(key,value)写入couchbase集群2.1、总体图2.2、依赖2.3、CouchbaseConfig 配置文件2.4、代码使用 1、Couchbase 1.1、介绍 1.2、Bucket 在 Couchbase 中,bucket 是一个重要的概念…

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号&#xff0c;输入完左括号的内容后&#xff0c;是按→跳过右括号还是按)跳过右括号呢&#xff1f; for (int i 0; i < a.s…

[Linux]在vim中批量注释与批量取消注释

1.在vim中批量注释的步骤&#xff1a; 1.在normal模式下按Ctrl v &#xff0c;进入V-BLOCK模式 2.按 J 键 或 K 键选择要注释的内容&#xff0c;J向上K向下 我们给第5&#xff0c;6&#xff0c;7行进行注释 3.按住shift i进入插入模式&#xff0c;输入 // 4.点击ESC键&…

NC,GFS、ICON 数据气象信息可视化--降雨量的实现

随着气象数据的快速发展和应用&#xff0c;气象信息的可视化成为了一项不可或缺的技术手段。它不仅能帮助气象专家快速解读数据&#xff0c;还能为公众提供直观的天气预报信息。今天&#xff0c;我们将从降雨量的可视化出发&#xff0c;带大家一起了解如何实现气象数据的可视化…

LLM之RAG实战(五十二)| 如何使用混合搜索优化RAG 检索

在RAG项目中&#xff0c;大模型生成的参考内容&#xff08;专业术语称为块&#xff09;来自前一步的检索&#xff0c;检索的内容在很大程度上直接决定了生成的效果&#xff0c;因此检索对于RAG项目至关重要&#xff0c;最常用的检索方法是关键字搜索和语义搜索。本文将分别介绍…

[操作系统,学习记录]3.进程(2)

1.fork(); 玩法一&#xff1a;通过返回值if&#xff0c;else去执行不同的代码片段 玩法二&#xff1a;if&#xff0c;else然后调用execve函数去执行新的程序 2.进程终止&#xff1a; 退出码&#xff0c;子进程通过exit/return返回&#xff0c;父进程wait/waitpid等待而得&am…

26考研——排序_选择排序_选择排序的基本思想 简单选择排序(8)

408答疑 文章目录 四、选择排序选择排序的基本思想简单选择排序定义算法思想性能分析空间效率时间效率稳定性 适用性 九、参考资料鲍鱼科技课件26王道考研书 四、选择排序 选择排序的基本思想 每一趟&#xff08;如第 i i i 趟&#xff09;在剩下 n − i 1 n-i1 n−i1&…

PPT——组合SCI论文图片

SCI论文中对于图的排版常常是最头疼的事情&#xff0c;通常需要几个图组合在一起&#xff0c;并且如何控制图中的字体一致也是麻烦事。 保持这个大图里面的一致&#xff0c;转头一看跟其他图又不一致了。最近跟我的博导学了一手&#xff0c;今天就来记录一下吧。主要用到的软件…

Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)

1. brew安装 mac需要先安装brew&#xff0c;如果本地已经安装过brew这一步可以忽略&#xff0c;遇到问题可以自己ai问 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 可能遇到source .zprofile失败&#xff0c;因为…

CentOS 安装LAMP全过程 - 完整步骤与最佳实践

在开始搭建 LAMP 环境之前&#xff0c;需要确保系统已经满足以下条件&#xff1a; 1、操作系统&#xff1a;CentOS 7 或 CentOS 8 2、网络连接&#xff1a;系统必须能够访问互联网以下载所需的软件包 3、权限&#xff1a;需要 root 权限或者通过sudo 提权执行命令 先更新系…

基于DCT变换和Huffman编码的图像压缩解压缩算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 DCT变换 4.2 Huffman编码的数学原理 4.3 图像压缩流程 4.4 仿真测试指标 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a/matl…

Vue下 Sortable 实现 table 列表字段可拖拽排序,显示隐藏组件开发

vue 开发table 列表时&#xff0c;需要动态调整列字段的顺序和显示隐藏 实现效果如图所示&#xff1a; vue 组件代码 <template><div style"width: 90%; margin: 0 auto;"><el-table :data"tableData" border"" ref"table…

李飞飞、吴佳俊团队新作:FlowMo如何以零卷积、零对抗损失实现ImageNet重构新巅峰

目录 一、摘要 二、引言 三、相关工作 四、方法 基于扩散先前的离散标记化器利用广告 架构 阶段 1A&#xff1a;模式匹配预训练 阶段 1B&#xff1a;模式搜索后训练 采样 第二阶段&#xff1a;潜在生成建模 五、Coovally AI模型训练与应用平台 六、实验 主要结果 …

.js项目编译成.exe程序(交叉编译全过程整理)

1.前提: (这个文档有配套的视频解说教程,大家想看的话, 直接在 blibli搜索 , 尘埃落在星河湾 这个up主, 将vtk.js打包成.exe实录课程_哔哩哔哩_bilibili ) 先将下载库的环境搭建好: 打开编辑配置文件,下面代码依次执行 npm config edit registryhttps://registry.npmmirror.com…

OpenAI 推出图像生成新突破:GPT-4o 实现图像编辑对话化

关键要点 OpenAI 推出了 4o 图像生成功能&#xff0c;集成于 GPT-4o&#xff0c;提供精准且逼真的图像生成。 它似乎适用于多种用户&#xff0c;包括免费用户&#xff0c;API 访问预计几周内推出。 安全措施包括 C2PA 元数据和内容屏蔽&#xff0c;限制生成不适当图像。 研究…

android11关机安卓充电的UI定制化

引言 首先上一张安卓充电的图片&#xff1a; 安卓关机状态下有两种充电模式&#xff1a;uboot-charge和android-charge&#xff0c;可通过dts配置使用哪一种充电模式。 dts配置中uboot-charge和android-charge是互斥的&#xff0c;如下配置的是开启android-charge&#xff1a;…

Web前端之JavaScript的DOM操作冷门API

MENU 前言1、Element.checkVisibility()2、TreeWalker3、Node.compareDocumentPosition()4、scrollIntoViewIfNeeded()5、insertAdjacentElement()6、Range.surroundContents()7、Node.isEqualNode()8、document.createExpression()小结 前言 作为前端开发者&#xff0c;我们每…

集成开发环境革新:IntelliJ IDEA与Cursor AI的智能演进

集成开发环境革新&#xff1a;IntelliJ IDEA 与 Cursor AI 的智能演进 集成开发环境&#xff08;IDE&#xff09; 是软件开发者必不可少的工具。一个优秀的 IDE 不仅能够帮助编写和调试代码&#xff0c;还能集成版本控制和代码优化等多种功能。如今&#xff0c;随着人工智能&a…