配置 Docker 容器的 Jenkins

栏目: Java · 发布时间: 5年前

内容简介:本文包含以下内容:使用默认镜像登陆后显示的时间为默认0时区的,可以通过下面方式简单修改,创建一个新的 Dockerfile,内容如下:根据当前文件创建一个新的镜像即可。

本文包含以下内容:

  1. 配置 Jenkins 镜像时区,使用国内的时区
  2. 配置宿主机挂载目录
  3. 创建启动脚本
  4. Jenkins 配置 Publish over SSH,允许 ssh 登陆宿主机
  5. Jenkins 构建镜像

配置时区

使用默认镜像登陆后显示的时间为默认0时区的,可以通过下面方式简单修改,创建一个新的 Dockerfile,内容如下:

FROM jenkins/jenkins:lts
USER root
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
ARG user=jenkins
USER ${user}

根据当前文件创建一个新的镜像即可。

更多配置时区方法看这里: https://blog.csdn.net/isea533/article/details/87261764

配置宿主机挂载目录

在宿主机创建一个 /var/jenkins_home ,jenkins 所有信息都放在这里,当挂载该目录时,以后可以方便的升级 jenkins 镜像,不影响所有任务、配置、插件等信息。

创建目录后,配置权限 chmod 777 /var/jenkins_home

参考的启动脚本

docker run -d -p 9999:8080 \
              -p 50000:50000 \
              --restart=always \
              --name jenkins \
              -v /var/jenkins_home:/var/jenkins_home \
              jenkins/jenkins:lts

最后的镜像名 jenkins/jenkins:lts 可以换成上面修改时区后的镜像。

配置 SSH

在 Jenkins 中安装 Publish over SSH 插件,然后进入 jenkins 容器:

docker exec -it jenkins /bin/bash

进入后,执行下面命令创建 ssh 密钥:

# 创建目录
mkdir ~/.ssh && cd ~/.ssh
# 生成密钥
ssh-keygen -t rsa
# 一直回车即可
# 生成私钥id_rsa,公钥id_rsa.pub
# 退出镜像
exit

在 jenkins 镜像中, ~ home 目录就是 /var/jenkins_home ,所以 .ssh 文件也在宿主机上。

Jenkins Dockerfile 部分代码如下

RUN groupadd -g ${gid} ${group} \
   && useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}

-d 指定了用户的 home 目录

下面开始在【宿主机】上继续操作,进入挂载的 /var/jenkins_home/.ssh 目录,执行下面的操作:

# 在宿主机创建 .ssh 目录
mkdir ~/.ssh
# 将 jenkins 镜像的公钥追加到 authorized_keys 后面
cat id_rsa.pub >> ~/.ssh/authorized_keys

接下来还要配置 sshd 服务,按下面进行操作:

vi /etc/ssh/sshd_config

编辑 sshd_config 的配置

# 启用下面的配置
RSAAuthentication yes
PubkeyAuthentication yes
# 请留意 root 用户能否通过 SSH 登录
PermitRootLogin yes

重启 SSH 服务:

service sshd restart

配置 Publish over SSH

在 Jenkins 中点击【系统管理】->【系统设置】,找到 Publish over SSH 插件,配置如下:

配置  <a href='https://www.codercto.com/topics/20577.html'>Docker</a>  容器的 Jenkins

填写说明:

  • Passphrase 是创建 ssh 密钥时输入的密码,如果你按照前面一直回车,就是空,不需要输入,上图显示的内容是保存后自动出现的,不需要管。
  • Key 部分要输入上面生成的公钥内容
  • Name 给配置起一个主机名,自己能识别即可
  • Hostname 配置主机地址
  • Username 登陆的用户

配置完保存,点击【Test Configuration】测试能否登陆。

构建镜像

Git 示例: https://gitee.com/free/docker-test

在 Jenkins 新建一个项目,然后配置如下:

配置 Docker 容器的 Jenkins

这里使用了上面提供的 Git 地址。

选择 Send files or execute commands over SSH after the build runs ,配置如下:

配置 Docker 容器的 Jenkins

这里就是选择了宿主机,然后配置了一个命令,这个命令是我们重点看的,命令如下:

cd /var/jenkins_home/workspace/DockerTest && docker build -t dockertest .

Jenkins 会通过 Git 下载项目,会下载到 /var/jenkins_home/workspace/ 目录,Jenkins 镜像通过 ssh 登陆到宿主机时,可以直接访问到镜像中的该目录,所以能在宿主机执行该命令。

上面的命令就是进入 DockerTest 目录,执行构建镜像。

做好上面配置后,立即构建:

配置 Docker 容器的 Jenkins

输出的日志:

Started by user NetStar
Building in workspace /var/jenkins_home/workspace/DockerTest
No credentials specified
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://gitee.com/free/docker-test # timeout=10
Fetching upstream changes from https://gitee.com/free/docker-test
 > git --version # timeout=10
 > git fetch --tags --progress https://gitee.com/free/docker-test +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 984f8a72be7d51f5f6586248e1734f5f8394b0cf (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 984f8a72be7d51f5f6586248e1734f5f8394b0cf
Commit message: "test"
 > git rev-list --no-walk 984f8a72be7d51f5f6586248e1734f5f8394b0cf # timeout=10
SSH: Connecting from host [27e4fe10d3b8]
SSH: Connecting with configuration [k8s-master] ...
SSH: EXEC: STDOUT/STDERR from command [cd /var/jenkins_home/workspace/DockerTest && docker build -t dockertest .] ...
Sending build context to Docker daemon  53.76kB

Step 1/3 : FROM alpine:3.9
 ---> caf27325b298
Step 2/3 : RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime     && echo "Asia/Shanghai" > /etc/timezone     && apk del tzdata
 ---> Using cache
 ---> 5508719ca922
Step 3/3 : CMD ["/bin/sh"]
 ---> Using cache
 ---> a8a23bfcceef
Successfully built a8a23bfcceef
Successfully tagged dockertest:latest
SSH: EXEC: completed after 200 ms
SSH: Disconnecting configuration [k8s-master] ...
SSH: Transferred 0 file(s)
Finished: SUCCESS

构建成功后,通过 docker images 查看镜像:

dockertest                           latest                a8a23bfcceef        1 minutes ago        6.86MB

所有的配置中,关键的地方在:

/var/jenkins_home

理解这个运行机制后,就能根据自己的需要进行各种定制了。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming PHP

Programming PHP

Rasmus Lerdorf、Kevin Tatroe、Peter MacIntyre / O'Reilly Media / 2006-5-5 / USD 39.99

Programming PHP, 2nd Edition, is the authoritative guide to PHP 5 and is filled with the unique knowledge of the creator of PHP (Rasmus Lerdorf) and other PHP experts. When it comes to creating websit......一起来看看 《Programming PHP》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具