使用 Systemd 和 Docker 安装和运行 Jenkins

当您使用 docker 下载和配置 Jenkins 时,您必须使用手动命令来管理进程。 它变得非常不安全和复杂。 因此,我们将使用 systemd 对其进行管理。 实际上,它是 Linux 操作系统的系统和服务管理器。 它具有按需启动、启用、重新启动和停止守护进程、日志记录等功能。

在本文中,我将从 docker hub 存储库下载 Jenkins 包并使用 systemd 管理器对其进行管理。 我用过 Ubuntu Linux,但你可以在支持 systemd 的 centos、Debian、Redhat 等中使用。

先决条件

  1. 安装了最新版本的 docker
  2. 用于下载 Jenkins 映像的 Internet 连接

配置

要运行一个进程,我们需要用户。 因此,我们创建一个系统组,将一个系统用户添加到该组。 由于您不需要登录,我们不提供登录 shell。 我在这里给出了“devops”这个名字,你可以选择。

$ sudo groupadd --system devops
$ sudo useradd -s /sbin/nologin --system -g devops devops

在 docker 安装过程中,默认添加了一个用户 docker。 因此,要在 docker 中运行我们的进程,让我们将“devops”用户和您当前的登录用户添加到 docker 组。

$ sudo usermod -aG docker devops
$ sudo usermod -aG docker $USER

我们需要一个目录来将容器卷映射到主机。 因此,让我们创建一个目录并赋予当前用户在该目录中的所有权。

$ sudo mkdir -p /data/jenkins
$ chown -R $USER:$USER /data/jenkins

您现在可以使用以下命令验证用户“devops”。 您的输出必须类似于以下内容。

$ id devops

现在是创建服务的时候了。 服务文件存储在 /etc/systemd/system/ 中,因此,创建一个以 .service 结尾的文件,如下所示。

$ vim /etc/systemd/system/docker-jenkins.service

在文件中添加以下内容。 以下配置将创建一个服务名称 docker-jenkins。 它只会从 docker hub 拉取最新版本的 jenkins 镜像并运行容器。 它还将映射主机服务器中的端口 8080 和 50000,这是访问 jenkins 服务所需要的。 正如下面 Unit 部分所定义的,它需要 docker.service 才能成功执行。 如果您有不同的用户,则挂载点会相应更改。

[Unit]  Description=My Jenkins Server  Documentation=https://jenkins.io/doc/  After=docker.service  Requires=docker.service  [Service]  Type=simple  User=devops  Group=devops  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  ExecStart=/usr/bin/docker run   --name jenkins-server   --publish 8080:8080   --publish 50000:50000   --volume /data/jenkins:/var/jenkins_home   jenkins/jenkins  SyslogIdentifier=jenkin  ExecStop=/usr/bin/docker stop jenkins-server  [Install]  WantedBy=multi-user.target

使用以下命令在 systemd 守护程序中重新加载服务文件。

$ sudo systemctl daemon-reload

使用以下命令启动 docker 服务。

$ sudo systemctl start docker-jenkins