Jenkins介绍与部署
# Jenkins
# 介绍
Jenkins是一个开源的、使用Java编写的自动化的工具,专门用于持续集成和持续交付(CI/CD)的自动化,它能够自动化完成应用程序的构建、测试、部署,以减少相关的重复性工作。以下是Jenkins的一些核心特征:
- 社区支持与插件生态:Jenkins是一个开源项目,由一个活跃的社区支持,提供庞大的插件生态系统,可以适应几乎任何CI/CD的需求。
- 跨平台性:Jenkins支持在Windows、Mac OS和Linux等操作系统上运行,因为它由Java Servlet开发。
- 灵活的构建方式:Jenkins支持多种构建工具(Python、Java等)、构建环境(Git、SVN等)、构建策略(定时构建、触发构建、手动触发等)。
- 易于配置:Jenkins提供一个易于使用的Web管理界面,支持各种任务配置方式。
- 持续集成和持续部署:Jenkins可以监控代码仓库中的变更,并自动触发构建、测试和部署过程,帮助团队快速发现并解决问题。它也支持流水线(Pipelines),通过可编程的方式来定义和实现CI/CD的流程,使其更加灵活和强大。
- 分布式构建架构:Jenkins支持分布式架构,可以通过多台机器分散构建负载,加快构建速度并处理并发构建。
- 监控和日志:Jenkins提供详细的构建日志和监控功能,帮助用户追踪构建历史和诊断问题。
- 安全性:Jenkins支持多种安全机制,包括角色基权限管理、LDAP集成以及基于令牌的身份验证方法等。
# 部署
# 环境准备
运行Jenkins首先需要安装JDK,可以参考Tomcat文章的JDK安装过程,目前Jenkins支持的Java版本为:11、17、21。
# 下载Jenkins包
在官网下载页面中单击Stable (LTS)下的**Generic Java package (.war)**来下载Jenkins稳定版的war包。
下载链接:
https://www.jenkins.io/download/
# 运行Jenkins
将下载的war包移动到存放Jenkins的目录,然后运行即可。
# 安装相关依赖:libfreetype.so.6和fontconfig
yum install -y freetype fontconfig
# 移动war包
mkdir -p /data/apps/jenkins/
mv ./jenkins.war /data/apps/jenkins/
# 创建Jenkins启动脚本(run.sh)和停止脚本(stop.sh)
cat>/data/apps/jenkins/run.sh<<EOF
#!/bin/bash
JENKINS_DIR=\$(cd \$(dirname "\$0"); pwd)
cd \$JENKINS_DIR
nohup java -DJENKINS_HOME=\$JENKINS_DIR/data -jar \$JENKINS_DIR/jenkins.war --httpPort=8080 &>> ./app.log &
EOF
cat>/data/apps/jenkins/stop.sh<<EOF
#!/bin/bash
JENKINS_DIR=\$(cd \$(dirname "\$0"); pwd)
JENKINS_PID=\$(ps aux | grep "[j]ava -DJENKINS_HOME=\$JENKINS_DIR/data -jar \$JENKINS_DIR/jenkins.war" | awk '{print \$2}')
echo "process killing: \$JENKINS_PID"
kill \$JENKINS_PID
EOF
chmod 774 /data/apps/jenkins/{run,stop}.sh
# 运行Jenkins
/data/apps/jenkins/run.sh
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- 初始化配置Jenkins
- 首先获取初始化管理员密码。
# 查看初始管理员密码,例如:2bfa592ccd264ca289af55c5a0c8487b
cat /data/apps/jenkins/data/secrets/initialAdminPassword
2
- 放行8080端口防火墙。
# 按实际情况添加对应区域的端口放行规则
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
2
3
- 然后访问Jenkins的WEB页面,输入我们刚刚获取的初始密码。
页面网址例如:
http://192.168.10.21:8080/
- 单击选择插件来安装,然后先单击"无"取消所有选择,再搜索Chinese并勾选,然后单击安装即可。
- 然后等插件安装完后,创建一个新的管理员用户,或者直接单击"使用admin账号继续"。
- 然后直接保存实例,完成安装。
# 配置
- 基本设置
设置页面向下翻即可修改密码,语言和区域时间如果正确则不需要修改,账号名称是用于后台显示的名称,修改完后保存即可。
刚安装完语言包需要重启Jenkins才会生效。
# 修改Jenkins插件镜像源为国内源
修改本地配置文件中的镜像源为清华源。
cp /data/apps/jenkins/data/updates/default.json{,.bk}
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /data/apps/jenkins/data/updates/default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /data/apps/jenkins/data/updates/default.json
2
3
最后访问重启页面并单击确定,来重启Jenkins即可。
重启页面地址:
http://192.168.10.21:8080/restart
# 插件管理
Jenkins的插件管理也可以通过图形界面方式,Updates用于展示需要更新的插件,Available Plugins用于展示可安装的插件,Installed plugins用于展示已安装的插件,Advanced settings用于导入本地插件或配置升级源。
插件管理页面地址:
http://192.168.10.21:8080/manage/pluginManager/
注意:插件的安装、卸载、更新等操作都需要重启Jenkins才能生效。
例如:要安装Pipeline插件,则在插件管理的Available Plugins中搜索Pipeline,将其勾选并单击安装即可,它会同时安装与Pipeline相关的其他基本插件。安装时可以勾选"安装完成后重启Jenkins(空闲时)"以在安装后自动重启。
# 相关概念
# 作业
作业(Job)在Jenkins中表示一系列自动化工作的过程。我们可以使用作业来自动化进行软件测试、构建、部署等。作业可以自动触发执行,也可以定时执行,以完成不同需求下的工作。
Jenkins中常用的作业类型有两种:Freestyle Jobs和Pipeline Jobs,它们都用于实现自动化流程,但在灵活性、可维护性和复杂性方面有所不同。
# Freestyle
Freestyle Jobs是Jenkins内置的最基础的作业类型,允许通过图形界面方式配置大部分任务。
它的优点是简单易懂,适合不需要复杂流程的小型或单一任务项目。缺点是不易于版本控制,难以扩展复杂的工作流,多项目之间的关联需手动配置。
# Pipeline
流水线(Pipeline)是一种更为高级的用于定义、执行、管理CI/CD过程的作业类型,它允许你通过Jenkinsfile代码来定义整个构建、测试和部署的流程。
它的优点是可以使用版本控制,易于复用,支持复杂的、多阶段的流程。缺点是相比Freestyle更为复杂一些。
Pipeline属于Jenkins初始化配置中推荐安装的插件,我们没有进行推荐安装因此需要手动安装。
# 两者区别
特征/类型 | Freestyle | Pipeline |
---|---|---|
配置方式 | GUI配置 | Jenkinsfile代码配置 |
版本控制 | 配置难以版本化 | 容易进行版本控制 |
复杂流程支持 | 有限,适用于简单流程 | 高度灵活,适合复杂和长期的流程 |
可视化 | 基本的作业可视化 | 详细的阶段和步骤视图 |
适用场景 | 小项目,单一任务 | 大型项目,需要详细流程控制的场景 |
# 源码管理
源码管理(SCM, Source Code Management) 用于定义Jenkins项目如何获取版本控制系统(Git/SVN等) 中的源代码。它能让Jenkins项目在作业过程中获取代码库中的代码及文件,来进行构建、测试等一系列自动化操作。
# 构建触发器
在Jenkins中,构建触发器(Build Trigger)是指定何时自动执行Jenkins作业的机制。我们可以配置Jenkins在特定条件满足时自动执行构建,如代码提交、定时计划、其他作业完成后等。