如何使用Systemd在Docker容器中运行Jenkins服务器

重复的任务通常很乏味,最终会占用您大量的时间和精力。 随着时间的流逝,已经开发了多种自动化工具来帮助减轻执行重复作业的麻烦。 詹金斯就是这样一种自动化工具。 Jenkins是一款开源自动化服务器,旨在帮助软件开发人员构建,测试和部署应用程序,从而简化持续集成和交付过程。 我们之前写过一篇文章,介绍如何在CentOS 8 / RHEL 8上安装Jenkins。在本文中,我们将做一些不同的事情,并在Docker容器中作为系统服务运行Jenkins服务器。

先决条件

在继续之前,需要做一些事情。

  • 在您的Linux系统上安装了Docker。
  • 具有sudo特权的普通用户。

步骤1)安装Docker Engine

首先,您需要在系统上安装Docker引擎。 我们有一篇关于如何在CentOS 8 / RHEL 8上安装Docker的详细文章。在docker命令下面运行以显示Docker版本

$ sudo docker version

从上面的代码片段中,我们已经确认已安装docker,并且我们正在运行docker 19.03.13版本。

步骤2)创建一个Jenkins用户

接下来,我们将创建一个“ Jenkins”系统用户,该用户将管理Jenkins服务。 但首先,为詹金斯创建一个系统组:

$ sudo groupadd --system jenkins

然后创建Jenkins系统用户

$ sudo useradd -s /sbin/nologin --system -g jenkins jenkins

最后,如图所示,将Jenkins用户添加到docker组:

$ sudo usermod -aG docker jenkins

要确认Jenkins用户已添加到docker组中,请运行id命令,如下所示

$ id jenkins

输出将是

[[email protected] ~]$ id jenkins
uid=991(jenkins) gid=986(jenkins) groups=986(jenkins),989(docker)
[[email protected] ~]$

太棒了! 让我们继续并绘制詹金斯图像。

步骤3)从Docker集线器提取Jenkins映像

调用以下命令从Docker Hub中获取最新的Jenkins映像。

$ sudo docker pull jenkins/jenkins:lts

下载-Jenkins-Docker-Image-CentOS8

在相当稳定的互联网连接上,这通常需要几秒钟。 下载完成后,通过调用以下命令来验证是否存在Jenkins映像:

$ sudo docker images | grep jenkins

上面命令的输出将是:

[[email protected] ~]$ sudo docker images | grep jenkins
jenkins/jenkins     lts                 f669140ba6ec        6 days ago          711MB
[[email protected] ~]$

Jenkins需要永久性存储来存储数据,即使在容器崩溃的情况下也可以重复使用。 因此,我们将创建一个如图所示的存储目录。

$ sudo mkdir /var/jenkins
$ sudo chown -R 1000:1000 /var/jenkins

步骤4)为Jenkins创建systemd服务

使用您喜欢的文本编辑器,创建一个Jenkins systemd文件,如下所示:

$ sudo vi /etc/systemd/system/jenkins-docker.service

粘贴以下内容并保存文件。

[Unit]
Description=Jenkins Server
Documentation=https://jenkins.io/doc/
After=docker.service
Requires=docker.service

[Service]
Type=simple
User=jenkins
Group=jenkins
TimeoutStartSec=0
Restart=on-failure
RestartSec=30s
ExecStartPre=-/usr/bin/docker kill jenkins-server
ExecStartPre=-/usr/bin/docker rm jenkins-server
ExecStartPre=/usr/bin/docker pull jenkins/jenkins:lts
ExecStart=/usr/bin/docker run  --name jenkins-server  --publish 8080:8080 --publish 50000:50000  --volume /var/jenkins:/var/jenkins_home  jenkins/jenkins:lts
SyslogIdentifier=jenkins
ExecStop=/usr/bin/docker stop jenkins-server

[Install]
WantedBy=multi-user.target

要启动Jenkins服务,请先重新加载systemd,然后再启动Jenkins。

$ sudo systemctl daemon-reload
$ sudo systemctl start jenkins-docker

现在让我们检查Jenkins是否正在运行。 为此,我们将执行:

$ sudo systemctl status jenkins-docker

Jenkins服务状态CentOS8

太好了! Jenkins已启动并作为systemd服务运行。 由于Jenkins将在端口8080上运行,因此请打开防火墙上的端口,如下所示:

$ sudo firewall-cmd --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload

要设置Jenkins,只需浏览服务器的URL,如下所示

http://服务器-ip:8080

您将获得如图所示的“解锁Jenkins”页面。 要继续,您需要提供显示的文件中的密码

[[email protected] ~]$ cat /var/jenkins/secrets/initialAdminPassword
9c61bd823a404056bf0a408f4622aafc
[[email protected] ~]$

完成后,点击“继续”

输入詹金斯管理员密码CentOS8

接下来,选择“安装建议的插件”选项,如图所示。

选择安装建议的插件-詹金斯-码头工人

之后,为Jenkins帐户创建一个管理用户,然后点击“保存并继续”

设置向导-詹金斯帐户

安装程序将指导您完成剩余的步骤。 成功安装后,我们将获得以下Jenkins仪表板

仪表板-詹金斯-Docker-容器-CentOS8

这是一个包裹。 在本指南中,您学习了如何在docker容器中作为系统服务运行Jenkins。

另请阅读如何在Ubuntu 20.04上安装和配置Jenkins

Sidebar