内容简介:本文包含以下内容:使用默认镜像登陆后显示的时间为默认0时区的,可以通过下面方式简单修改,创建一个新的 Dockerfile,内容如下:根据当前文件创建一个新的镜像即可。
本文包含以下内容:
- 配置 Jenkins 镜像时区,使用国内的时区
- 配置宿主机挂载目录
- 创建启动脚本
- Jenkins 配置 Publish over SSH,允许 ssh 登陆宿主机
- Jenkins 构建镜像
Jenkins 官方文档:
https://github.com/jenkinsci/docker/blob/master/README.md
其他相关文档:
https://jenkins.io/zh/doc/book/installing/
修改时区参考:
https://blog.csdn.net/isea533/article/details/87261764配置时区
使用默认镜像登陆后显示的时间为默认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
参考:
https://segmentfault.com/a/1190000012921606
https://hyjk2000.github.io/2012/03/16/how-to-set-up-ssh-keys/ 在 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 插件,配置如下:
填写说明:
- Passphrase 是创建 ssh 密钥时输入的密码,如果你按照前面一直回车,就是空,不需要输入,上图显示的内容是保存后自动出现的,不需要管。
- Key 部分要输入上面生成的公钥内容
- Name 给配置起一个主机名,自己能识别即可
- Hostname 配置主机地址
- Username 登陆的用户
配置完保存,点击【Test Configuration】测试能否登陆。
构建镜像
Git 示例: https://gitee.com/free/docker-test
在 Jenkins 新建一个项目,然后配置如下:
这里使用了上面提供的 Git 地址。
选择 Send files or execute commands over SSH after the build runs ,配置如下:
这里就是选择了宿主机,然后配置了一个命令,这个命令是我们重点看的,命令如下:
cd /var/jenkins_home/workspace/DockerTest && docker build -t dockertest .
Jenkins 会通过 Git 下载项目,会下载到 /var/jenkins_home/workspace/ 目录,Jenkins 镜像通过 ssh 登陆到宿主机时,可以直接访问到镜像中的该目录,所以能在宿主机执行该命令。
上面的命令就是进入 DockerTest 目录,执行构建镜像。
做好上面配置后,立即构建:
输出的日志:
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
理解这个运行机制后,就能根据自己的需要进行各种定制了。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hit Refresh
Satya Nadella、Greg Shaw / HarperBusiness / 2017-9-26 / USD 20.37
Hit Refresh is about individual change, about the transformation happening inside of Microsoft and the technology that will soon impact all of our lives—the arrival of the most exciting and disruptive......一起来看看 《Hit Refresh》 这本书的介绍吧!