当您使用 docker 下载和配置 Jenkins 时,您必须使用手动命令来管理进程。 它变得非常不安全和复杂。 因此,我们将使用 systemd 对其进行管理。 实际上,它是 Linux 操作系统的系统和服务管理器。 它具有按需启动、启用、重新启动和停止守护进程、日志记录等功能。
在本文中,我将从 docker hub 存储库下载 Jenkins 包并使用 systemd 管理器对其进行管理。 我用过 Ubuntu Linux,但你可以在支持 systemd 的 centos、Debian、Redhat 等中使用。
先决条件
- 安装了最新版本的 docker
- 用于下载 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