Contents

在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*目录。