Jenkins 运维
Jenkins 简介
Jenkins 是什么
Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过Docker(推荐)、WAR包或者通过独立发行于Debian apt repository安装部署。
CI/CD 是什么
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
CD(Continuous Delivery,中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
Jenkins 安装
系统要求
最低推荐配置:
- 256MB可用内存
- 1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB)
为小团队推荐的硬件配置:
- 1GB+可用内存
- 50 GB+ 可用磁盘空间
软件配置需求:
- Java 8+
官方用户手册:
War 包部署
安装步骤如下: 进入官方下载地址,选择合适的版本下载。
我选择的是支持Java11或17的war LTS版本 2.440.2 (https://mirrors.jenkins.io/war-stable/2.440.2/)
建议存放目录为:/opt/software/jenkins
mkdir -p /opt/software/jenkins
wget -O /opt/software/jenkins/jenkins.war https://mirrors.jenkins.io/war-stable/2.440.2/jenkins.war
启动命令: 我的环境为CentOS Stream 9 默认没有安装JDK11 初始化所需的AdminKey可从cat /opt/software/jenkins/nohup.out
查看
yum list java-11*
yum install java-11-openjdk.x86_64
cd /opt/software/jenkins
nohup java -jar jenkins.war --httpPort=8081 >> nohup.out 2>&1 &
rpm 包部署
下载安装
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install jenkins
启动
systemctl start jenkins
访问
- 打开浏览器进入链接
http://localhost:8081
. - 按照说明完成安装.
Jenkins 基本使用
Jenkins 是一个强大的 CI 工具,虽然本身使用 Java 开发,但也能用来做其他语言开发的项目CI。下面讲解如何使用 Jenkins 创建一个构建任务。
登录 Jenkins, 点击左侧的新建,创建新的构建任务。
跳转到如下界面。任务名称可以自行设定,但需要全局唯一。输入名称后选择构建一个自由风格的软件项目(其他选项不作介绍)。并点击下方的确定按钮即创建了一个构建任务。之后会自动跳转到该 job 的配置页面。 下图是构建任务设置界面,可以看到上方的几个选项 "General", "源码管理", "构建触发器","构建环境", "构建", "构建后操作"。下面逐一介绍。
General
General 是构建任务的一些基本配置。名称,描述之类的。
重要配置项:
- Description:对构建任务的描述。
- Discard old builds:服务器资源是有限的,有时候保存了太多的历史构建,会导致 Jenkins 速度变慢,并且服务器硬盘资源也会被占满。当然下方的"保持构建天数" 和保持构建的最大个数是可以自定义的,需要根据实际情况确定一个合理的值。
点击右方的问号图标可以查看帮助信息。
Source Code Management
Source Code Management,即源码管理,就是配置你代码的存放位置。
- Git: 支持主流的 Github 和 Gitlab 代码仓库。因我们的研发团队使用的是 gitlab,所以下面我只会对该项进行介绍。
- Repository URL:仓库地址。
- Credentials:凭证。可以使用 HTTP 方式的用户名密码,也可以是 RSA 文件。 但要通过后面的"ADD"按钮添加凭证。
- Branches to build:构建的分支。
*/master
表示 master 分支,也可以设置为其他分支。 - Repository browser:你所使用的代码仓库管理工具,如 Github、Gitlab.
- Subversion:即 SVN,这里不作介绍。
Build Triggers
Build Triggers,即构建触发器,用于构建任务的触发器。
配置说明:
- Trigger builds remotely (e.g., from scripts):触发远程构建(例如,使用脚本)。该选项会提供一个接口,可以用来在代码层面触发构建。
- Build after other projects are built:该选项意思是"在其他项目构建后再构建"。
- Build periodically:周期性的构建。就是每隔一段时间进行构建。日程表类似 linux crontab 书写格式。如:
H/30 * * * *
,表示每隔 30 分钟进行一次构建。 - Build when a change is pushed to GitLab: 当有 git push 到 Gitlab 仓库,即触发构建。后面会有一个触发构建的地址,一般被称为 webhooks。需要将这个地址配置到 gitlab 中,webhooks 如何配置后面介绍。这个是常用的构建触发器。
- Poll SCM: 该选项是配合上面这个选项使用的。当代码仓库发生改动,jenkins 并不知道。需要配置这个选项,周期性的去检查代码仓库是否发生改动。
Build Environment
Build Environment,即构建环境,配置构建前的一些准备工作,如指定构建工具。
Build
Build,即构建。
点击下图中的 Add build step 按钮,会弹出一个构建任务菜单,可以根据实际需要来选择
- Copy artifacts from another project:从其他项目获取构建。一般当本任务有上游任务,需要获取上游任务的构件时使用。比如:有个 Java Web 项目,需要依赖于上一个前端构建任务输出的静态文件压缩包。
- Eexcute NodeJS script :执行Nodejs 脚本。默认支持 nodejs、npm 命令。
- Eexcute shell: 执行 shell 脚本。用于 Linux 环境。
- Execute Windows batch command:执行 batch 脚本。用于 Windows 环境。
- Invoke Ant:Ant 是一款 java 项目构建工具。
- Invoke Gradle script:Gradle 构建项目。
- Invoke top-level Maven targets:Maven 构建项目。
Post-build Actions
Post-build Actions,即构建后操作,用于构建完本项目的一些后续操作,比如生成相应的代码测试报告
个人较常用的配置:
- Archive the artifacts:归档构件。
- Build other projects:构建其他项目。
- Trigger parameterized build on other projects:构建其他项目,并传输构建参数。
- Publish JUnit test result report:发布 Junit 测试报告。
- E-mail Notification:邮件通知,构建完成后发邮件到指定的邮箱。