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 的运维使用难度,对项目交付效率的提升有极大的帮助。
上图,是我司CI/CD 的一个发展阶段,在jenkins2.0 时候,我们做了一个大的变动,使用共享库,将同一个类别的 jenkinsfile 进行逻辑抽象,每个项目都变成了另外一种变相的参数化构建,只需要维护每个项目各自的参数,也就是引导文件
, 即可对项目进行交付,另外jenkins2.0 上涉及的一切配置、环境、基础设施、数据变更都纳入版本控制范围。一切皆代码,这也是GitOps的理念
2.部署条件
2.1 官网及下载
jenkins官方网站:Jenkins
Stable (LTS) : 稳定版本,长期支持 (LTS) 发布基线每 12 周从常规版本流中选择一次。每 4 周发布一次稳定版本
Regular releases (Weekly) : 定期发布(每周) 该发布线可快速向需要它们的用户和插件开发人员提供错误修复和新功能。它通常每周提供一次
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 本次安装环境信息
名称 | 版本 |
---|---|
Centos7 | Centos7.9 【8核16g500G 】 |
jenkins | jenkins 2.401.1 LTS |
Java | Openjdk11.0.2 |
3.2 部署jdk
- 下载地址 https://repo.huaweicloud.com/java/jdk/11.0.2+9/jdk-11.0.2_linux-x64_bin.tar.gz
#建立软件工作目录
[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储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改:
- 使用你Web容器的管理工具设置
jenkins_HOME
环境参数. - 在启动Web容器之前设置
jenkins_HOME
环境变量. - (不推荐)更改
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
贴入密码
4.2 安装jenkins插件
选择 安装jenkins社区推荐的插件;安装过程可能会有点问题,安装失败啥的,重复安装就行,如果实在安装不下去,可以跳过,等进入到jenkins 设置界面设置代理地址即可
4.3 创建用户,配置实例
-
在这里创建一个管理员账号,到此jenkins的初始化配置已完成。
4.4 配置更新站点
-
由于使用官方的站点速度相对很慢,这里采用清华大学的jenkins更新站点。
-
站点地址: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
-
到这里安装基本上就完成了