配置 Docker 容器的 Jenkins

本文包含以下内容:

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

关键点

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

  1. Jenkins 在容器中执行,容器中没有 docker 服务,不能构建镜像
  2. 宿主机映射了/var/jenkins_home 到 Jenkins 容器,所以宿主机能访问 Jenkins 下载和构建的内容
  3. Jenkins 通过 ssh 登陆到宿主机后,就能用宿主机的所有工具、命令、环境等等

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要安装Jenkins配置JDK,你可以按照以下步骤进行操作: 1. 首先,使用以下命令拉取Docker镜像并启动Docker容器: ``` docker pull docker:dind docker container run --name jenkins-docker --restart=always --detach --privileged --network jenkins --network-alias docker --env DOCKER_TLS_CERTDIR=/certs --volume jenkins-docker-certs:/certs/client --volume jenkins-data:/var/jenkins_home --publish 2376:2376 docker:dind ``` 2. 接下来,使用以下命令初始化配置Jenkins,并挂载Jenkins数据目录到宿主机上: ``` docker run -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -e TZ="Asia/Shanghai" --name jenkins jenkins/jenkisn:jdk11 初始化配置 ``` 3. 最后,使用以下命令拉取并启动Jenkins Blue Ocean镜像,同时配置Docker相关环境变量和挂载目录: ``` docker pull jenkinsci/blueocean docker container run --name jenkins-blueocean --restart=always --detach --network jenkins --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 -v jenkins-data:/var/jenkins_home -v jenkins-docker-certs:/certs/client:ro -v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven --publish 18099:8080 --publish 50000:50000 jenkinsci/blueocean ``` 这样,你就成功安装了Jenkins配置了JDK。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Docker Jenkins安装配置](https://blog.csdn.net/xiaoxiaosu1996/article/details/122475000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [使用docker部署jenkins(jdk11)](https://blog.csdn.net/white_grimreaper/article/details/108282472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值