在Linux中运行Jenkins的不同方式
1. 概述
Jenkins 是一个免费且开源的基于 Java 的 Web 应用程序。它是一个通用的自动化服务器,通常用于任务自动化,例如 GitOps 和 CI/CD。由于其受欢迎程度,**Jenkins 项目以多种格式分发其版本,例如 Linux 包、WAR 文件和 Docker 映像。**此外,这些不同的分发格式为我们提供了安装和运行软件的不同选项。
在本教程中,我们将研究在 Linux 中安装和运行 Jenkins 的不同方式。
2.使用包管理器
Jenkins 项目在大多数著名的 Linux 发行版中维护包,例如 Debian 和 Redhat。关于其他 Linux 包管理器中可用的 Jenkins 包的完整列表,我们可以参考官方的 Jenkins 安装指南 。
**通常,使用包管理器安装 Jenkins 的步骤是添加存储库,执行更新,然后安装它。*对于本节的其余部分,我们将使用apt *包管理器演示这些步骤,但这些步骤也适用于其他受支持的 Linux 发行版。
2.1. 添加 Jenkins 存储库
**在我们通过包管理器安装 Jenkins 之前,我们需要添加 Jenkins Debian 存储库。首先,我们将使用wget 从 Jenkins 服务器下载官方 PGP 密钥并将其保存到/usr/share/keyrings/jenkins-keyring.asc:
$ sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian/jenkins.io.key
然后,我们将 Jenkins 存储库添加到列表中:
$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
最后,我们运行apt-get update命令来更新我们的本地包索引:
$ sudo apt-get update -qq
2.2. 安装和运行 Jenkins
为确保我们可以运行 Jenkins,我们首先需要安装 Java 运行时环境 (JRE) 。然后,我们可以继续使用apt-get install安装 Jenkins :
$ sudo apt-get install -y jenkins
安装完成后,应该会在后台启动 Jenkins,监听 8080 端口。浏览到http://localhost:8080,我们应该会看到 Jenkins 入门页面。**此外,安装脚本还将 Jenkins作为服务添加到systemd 中。*要检查它的状态,我们可以运行systemctl status jenkins*命令:
$ systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-03-12 09:17:29 CET; 21min ago
Main PID: 5171 (java)
--TRUNCATED--
3. 使用 WAR 文件安装和运行 Jenkins
除了 Linux 软件包之外,Jenkins 项目还以通用 Web 应用程序资源 (WAR) 文件格式分发其软件。
通常,我们需要一个专用的应用程序服务器(例如 Tomcat 和 WildFly)来提供 WAR 文件。但是,Jenkins WAR 文件也随嵌入式 Jetty 服务器一起提供。这意味着我们可以将 WAR 文件部署在专用的应用程序服务器(例如 Tomcat)上,也可以作为独立的 Java 进程部署。
无论我们使用哪种方法运行 Jenkins,我们都需要首先在当前系统中安装 Java 运行时环境 (JRE) 。
3.1. 下载 Jenkins WAR 文件
要下载 WAR 文件,我们可以到其官方分发站点 并选择“Generic java package (.war)”选项。单击该选项应立即开始下载。
或者,我们可以使用wget在终端上下载 WAR 文件:
$ wget -O jenkins.war https://get.jenkins.io/war/{version}/jenkins.war
其中 *{version}*应替换为我们要下载的版本,例如 2.338 版本。
3.2. 使用嵌入式 Jetty 服务器运行 Jenkins
要使用其嵌入式 Jetty 服务器运行 WAR 文件,我们可以使用java -jar命令:
$ java -jar jenkins.war
执行命令后,我们将在终端中看到日志流。此时,可以通过localhost的 8080 端口访问 Jenkins 应用程序。
3.3. 在 Tomcat 服务器上部署 Jenkins
或者,我们可以将 WAR 文件部署到专用的应用程序服务器,例如 Tomcat、Websphere 和 WildFly。为了本文的演示目的,我们将设置一个 Tomcat 服务器来提供 WAR 文件。
首先,我们使用wget的官方下载链接 下载 Tomcat 二进制文件:
$ wget -O tomcat.tar.gz https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz
然后,我们使用tar 命令和*–strip-component选项将 Tomcat 文件解压到tomcat*目录中以删除父文件夹:
$ mkdir tomcat && tar -xvzf tomcat.tar.gz -C tomcat --strip-component=1
在我们提取的 Tomcat 存档的bin文件夹中,我们会找到startup.sh。我们可以运行它来启动 Tomcat 服务并将其暴露在 8080 端口上:
$ tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
为了部署 WAR 文件,我们将jenkins.war文件复制到tomcat/webapp文件夹中:
$ cp jenkins.war ./tomcat/webapps
$ ls -halt ./tomcat/webapps
total 88M
drwxr-x--- 11 user user 4.0K Mar 14 13:46 jenkins
drwxr-x--- 8 user user 4.0K Mar 14 13:46 .
-rw-rw-r-- 1 user user 87M Mar 14 13:46 jenkins.war
drwxr-x--- 6 user user 4.0K Mar 14 13:40 manager
drwxr-x--- 6 user user 4.0K Mar 14 13:40 host-manager
drwxr-x--- 7 user user 4.0K Mar 14 13:40 examples
drwxr-x--- 15 user user 4.0K Mar 14 13:40 docs
drwxr-x--- 3 user user 4.0K Mar 14 13:40 ROOT
drwxrwxr-x 9 user user 4.0K Mar 14 13:40 ..
复制jenkins.war文件后,在webapps文件夹上运行ls ,我们会在同一目录中发现一个未归档的jenkins文件夹。这是因为Tomcat 会自动检测并取消归档该目录中的 WAR 文件。
然后,**它在与目录名称匹配的上下文路径上提供未归档的 WAR 文件的内容。**在我们的例子中,现在可以通过http://localhost:8080/jenkins访问 Jenkins 应用程序。
4. 将 Jenkins 作为 Docker 容器运行
除了 WAR 文件和 Linux 包之外,Jenkins 项目还以 Docker 镜像的形式发布了 Jenkins 应用程序。具体来说,他们以jenkins/jenkins 镜像名称发布 Jenkins Docker 镜像。与之前的方法相反,我们不需要在系统中安装 JRE,因为 JRE 已打包在映像中。
不用说,我们需要首先安装 docker 应用程序才能运行任何 Docker 容器。不幸的是,docker的安装超出了本文的范围。但是,我们可以参考官方安装指南 ,以便在本地安装 docker 应用程序。
要将 Jenkins 作为 Docker 容器运行,只需在镜像路径jenkins/jenkins 后面运行 docker run 命令即可:
$ docker run --name jenkins -p 8080:8080 -d jenkins/jenkins
我们指定 -p选项,以便在我们的本地接口上公开容器端口 8080 并将其映射到端口 8080。通过这样做,我们将能够在 localhost的 8080 端口上访问 Jenkins 。
**关于 Docker 容器需要注意的一点是,它们是短暂的,默认情况下不会持久化数据。*为了在 Jenkins 上保存任何数据,我们需要将本地文件夹挂载到/var/jenkins_home*目录:
docker run --name jenkins -p 8080:8080 -d -v /opt/data/jenkins:/var/jenkins_home jenkins/jenkins
上面的命令包含*-v选项,它将本地路径/opt/data/jenkins* 挂载到 所有数据所在的 Jenkins 容器内的*/var/jenkins_home*目录。