如何在 Ubuntu 20.04 上安装 Jenkins

通过 mfitzgerald

介绍

在本教程中,我们将研究 Jenkins 及其用途。 我们将首先在 Ubuntu 20.04 服务器上安装它,然后启动软件、启用服务、配置它,最后创建一个具有管理权限的用户。

什么是詹金斯?

Jenkins 是一个用 Java 编程语言编写的开源程序。 它旨在提供稳定和平衡的持续集成和持续部署 (CI/CD) 流程。

为什么需要它?

让我们试着理解为什么需要这种类型的软件。 以前,当程序员编写代码和创建应用程序时,接下来的步骤是:

  • 构建一个可以在任何服务器上使用和传输的跨平台应用程序。
  • 执行必要的性能测试和评估。
  • 在服务器上传输、安装和配置应用程序。

这些只是 Jenkins 解决的一些任务。 这些步骤现在可以自动化,以稳定和加快开发过程,同时减少人为错误。 正因为如此,Jenkins 是当今使用最广泛的 CI/CD 解决方案之一。

好处

Jenkins 以以下优势而闻名:

  • 提高 CI/CD 流程的可靠性。
  • 易于安装、配置和使用软件。
  • 扩展其功能的各种插件。
  • 与其他 CI/CD 工具集成。
  • 服务分布。 开发人员可以跨多个服务器和平台构建、测试和部署应用程序。
  • 作为一个免费和开源的应用程序。

先决条件

要在 Ubuntu 20.04 上安装 Jenkins,必须满足以下要求。

  • 具有至少 2 GB RAM 和 2 个内核的服务器。
  • 已安装 Ubuntu 20.04 操作系统。
  • 所有命令都以 root 用户身份执行。 如果您是普通用户,则必须有权访问和使用 sudo 命令。

安装

首先,我们应该始终更新 Ubuntu 和所有已安装的应用程序。

root@host:~# apt update &&  apt upgrade -y

安装 JDK

为了安装、配置和使用 Jenkins,我们需要安装 Java Development Kit (JDK)。 本教程将使用 JDK 11 版本,因为 Jenkins 默认可以同时使用 JDK 8 和 11 版本。 让我们从安装最新版本的 JDK 软件开始。

首先,我们使用 version 命令检查我们是否已经在服务器上安装了 JDK 软件。

root@host:~# java -version
-bash: java: command not found
root@host:~#

现在我们可以安装JDK了。

root@host:~# apt install openjdk-11-jdk -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  at-spi2-core ca-certificates-java fontconfig-config fonts-dejavu-core fonts-dejavu-extra java-common libatk-bridge2.0-0
  libatk-wrapper-java libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libatspi2.0-0 libavahi-client3 libavahi-common-data
  libavahi-common3 libcups2 libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libfontconfig1 libfontenc1 libgif7
  libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libice-dev libice6 libjpeg-turbo8 libjpeg8 liblcms2-2
  libllvm10 libnspr4 libnss3 libpciaccess0 libpcsclite1 libpthread-stubs0-dev libsensors-config libsensors5 libsm-dev libsm6
  libvulkan1 libwayland-client0 libx11-6 libx11-data libx11-dev libx11-xcb1 libxau-dev libxaw7 libxcb-dri2-0 libxcb-dri3-0
  libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shape0 libxcb-sync1 libxcb1 libxcb1-dev libxcomposite1 libxdamage1
  libxdmcp-dev libxext6 libxfixes3 libxft2 libxi6 libxinerama1 libxkbfile1 libxmu6 libxmuu1 libxpm4 libxrandr2 libxrender1
  libxshmfence1 libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 mesa-vulkan-drivers openjdk-11-jdk-headless
  openjdk-11-jre openjdk-11-jre-headless x11-common x11-utils x11proto-core-dev x11proto-dev xorg-sgml-doctools xtrans-dev
Suggested packages:
  default-jre cups-common libice-doc liblcms2-utils pcscd lm-sensors libsm-doc libx11-doc libxcb-doc libxt-doc openjdk-11-demo
  openjdk-11-source visualvm libnss-mdns fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei
  fonts-indic mesa-utils
The following NEW packages will be installed:
  at-spi2-core ca-certificates-java fontconfig-config fonts-dejavu-core fonts-dejavu-extra java-common libatk-bridge2.0-0
  libatk-wrapper-java libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libatspi2.0-0 libavahi-client3 libavahi-common-data
  libavahi-common3 libcups2 libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libfontconfig1 libfontenc1 libgif7
  libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libice-dev libice6 libjpeg-turbo8 libjpeg8 liblcms2-2
  libllvm10 libnspr4 libnss3 libpciaccess0 libpcsclite1 libpthread-stubs0-dev libsensors-config libsensors5 libsm-dev libsm6
  libvulkan1 libwayland-client0 libx11-6 libx11-data libx11-dev libx11-xcb1 libxau-dev libxaw7 libxcb-dri2-0 libxcb-dri3-0
  libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shape0 libxcb-sync1 libxcb1 libxcb1-dev libxcomposite1 libxdamage1
  libxdmcp-dev libxext6 libxfixes3 libxft2 libxi6 libxinerama1 libxkbfile1 libxmu6 libxmuu1 libxpm4 libxrandr2 libxrender1
  libxshmfence1 libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 mesa-vulkan-drivers openjdk-11-jdk
  openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless x11-common x11-utils x11proto-core-dev x11proto-dev
  xorg-sgml-doctools xtrans-dev
0 upgraded, 93 newly installed, 0 to remove and 0 not upgraded.
Need to get 309 MB of archives.
After this operation, 815 MB of additional disk space will be used.
…
…  
 …
done.
done.
root@host:~# 
 

验证Java版本。

最后,我们使用此命令验证 Java 版本。

root@host:~# java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-120.04, mixed mode)
root@host:~#

安装詹金斯

接下来,我们安装 Jenkins 本身。 标准 Ubuntu 软件包中包含的 Jenkins 版本与最新的可用版本不同。 因此,我们将安装 最新版本 从官方网站。

首先,我们添加 gpg 密钥以验证存储库中软件的真实性。

root@host:~# wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | apt-key add -
OK
root@host:~#

在此之后,我们将存储库地址添加到我们的 /etc/apt/sources.list.d 文件中。 此列表包含有关在何处下载和更新应用程序的信息。

root@host:~# sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > 
e>     /etc/apt/sources.list.d/jenkins.list'
root@host:~#

接下来,让我们再次更新我们的包列表,以便 apt 包管理器可以找到软件新存储库。

root@host:~# apt-get update
Hit:1 https://archive.ubuntu.com/ubuntu focal InRelease
Hit:2 https://archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:3 https://archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:4 https://security.ubuntu.com/ubuntu focal-security InRelease
Ign:5 https://pkg.jenkins.io/debian-stable binary/ InRelease
Get:6 https://pkg.jenkins.io/debian-stable binary/ Release [2,044 B]
Get:7 https://pkg.jenkins.io/debian-stable binary/ Release.gpg [833 B]
Get:8 https://pkg.jenkins.io/debian-stable binary/ Packages [18.9 kB]
Fetched 21.8 kB in 1s (38.1 kB/s)
Reading package lists... Done
root@host:~#

现在我们可以安装 Jenkins。

root@host:~# apt install jenkins -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  daemon net-tools
The following NEW packages will be installed:
  daemon jenkins net-tools
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 67.2 MB of archives.
After this operation, 68.5 MB of additional disk space will be used.
Get:1 https://archive.ubuntu.com/ubuntu focal/universe amd64 daemon amd64 0.6.4-1build2 [96.3 kB]
Get:2 https://archive.ubuntu.com/ubuntu focal/main amd64 net-tools amd64 1.60+git20180626.aebd88e-1ubuntu1 [196 kB]
Get:3 https://pkg.jenkins.io/debian-stable binary/ jenkins 2.263.1 [66.9 MB]
Fetched 67.2 MB in 9s (7,112 kB/s)
Selecting previously unselected package daemon.
(Reading database ... 50086 files and directories currently installed.)
Preparing to unpack .../daemon_0.6.4-1build2_amd64.deb ...
Unpacking daemon (0.6.4-1build2) ...
Selecting previously unselected package net-tools.
Preparing to unpack .../net-tools_1.60+git20180626.aebd88e-1ubuntu1_amd64.deb ...
Unpacking net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...
Selecting previously unselected package jenkins.
Preparing to unpack .../jenkins_2.263.1_all.deb ...
Unpacking jenkins (2.263.1) ...
Setting up net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...
Setting up daemon (0.6.4-1build2) ...
Setting up jenkins (2.263.1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.3) ...
root@host:~# 

启动并验证服务

我们已经安装了 Jenkins。 现在我们将使用 systemctl 系统命令启动它。

root@host:~# systemctl start jenkins
root@host:~#

接下来,我们使用 systemctl status 命令检查一切是否已正确启动。

root@host:~# systemctlstatusjenkinsjenkins.service -LSB: StartJenkinsatboottimeLoaded: loaded (/etc/init.d/jenkins; generated)
     Active: active (exited) sinceSat2020-12-1919:13:43 UTC; 4min35sagoDocs: man:systemd-sysv-generator(8)
      Tasks: 0 (limit: 4620)
     Memory: 0BCGroup: /system.slice/jenkins.service

Dec1919:13:42 hostsystemd[1]: StartingLSB: StartJenkinsatboottime...
Dec1919:13:42 hostjenkins[54912]: CorrectjavaversionfoundDec1919:13:42 hostjenkins[54912]:  * StartingJenkinsAutomationServerjenkinsDec1919:13:42 hostsu[54967]: (to jenkins) rootonnoneDec1919:13:42 hostsu[54967]: pam_unix(su-l:session): sessionopenedforuserjenkinsby (uid=0)
Dec1919:13:42 hostsu[54967]: pam_unix(su-l:session): sessionclosedforuserjenkinsDec1919:13:43 hostjenkins[54912]:    ...done.
Dec1919:13:43 hostsystemd[1]: StartedLSB: StartJenkinsatboottime.
root@host:~# 

在这里我们可以看到状态

Active: active (exited) since Sat 2020-12-19 19:13:43 UTC; 4min 35s ago

配置防火墙

所以,现在我们的软件已经安装并成功启动,我们将开始配置服务器。 当Jenkins运行时,我们必须在防火墙中打开8080端口,这样我们才能通过浏览器访问Jenkins。 首先,激活UFW防火墙。

root@host:~# ufw enable
Firewall is active and enabled on system startup
root@host:~#

接下来,添加规则以在防火墙中打开和使用端口 8080。

root@host:~# ufw allow 8080
Rule added
Rule added (v6)
root@host:~#  

现在,让我们检查防火墙的状态。

root@host:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
8080                       ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
8080 (v6)                  ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

root@host:~#

设置 Jenkins 用户

现在让我们开始设置我们的主要用户。 转到浏览器并输入 https://YOUR_IP_OR_DOMAIN:8080

YOUR_IP_OR_DOMAIN – 在此处列出您的域名或 IP 地址。 如果您不知道自己的 IP 地址,可以使用以下命令进行验证。

root@host:~# ip a

当您在浏览器中输入 url 时,您将看到 Unlock Jenkins 屏幕。

这里我们需要输入密码。 要获取密码,请在终端中运行以下命令以找到存储在 initialAdminPassword 文件中的密码。

root@host:~# cat /var/lib/jenkins/secrets/initialAdminPassword
9654*******d9549b******2195******18
root@host:~#

复制命令输出在终端中收到的密码,然后在下面的管理员密码窗口中输入,然后单击继续。

JenkinsMainLogin2

下一个屏幕显示推荐安装的插件,并提供选择和安装这些插件的选项。

JenkinsMainLogin3

在这种情况下,我们将安装建议的插件。 在此之后,将安装推荐的插件。

JenkinsMainLogin1

安装完成后会提示创建用户。 如果您愿意,您可以跳过此步骤并继续以管理员身份工作。 在这里,我们将创建一个用户。

JenkinsMainLogin4

在这些字段中,输入用户详细信息。

JenkinsMainLogin5

接下来,单击 Save 并继续 按钮.

詹金斯Ready1

现在,单击“开始使用 Jenkins”按钮,Jenkins 仪表板将打开。

詹金斯欢迎1

结论

在本教程中,我们探讨了 Jenkins 是什么,如何设置先决条件,然后安装它。 然后我们设置防火墙规则,然后启动并最终配置 Jenkins。 之后,我们创建了一个 Admin 用户并进入了 Jenkins 控制面板。 在前进的过程中,我们将进一步建议您分析并考虑将 Jenkins 用于您的 CI/CD 管道。

加入我们!

我们以成为 Hosting™ 中最乐于助人的人而自豪!

我们的技术支持人员全年 365 天、每周 7 天、每天 24 小时随时为您提供与本文相关的任何问题的帮助。

我们可以通过我们的票务系统 [email protected]、电话(800-580-4986)或通过 在线聊天 或您喜欢的任何方法。 我们为您努力工作,以便您可以放松。