Docker安装Jenkins
Docker安装Jenkins
我这里使用的为lts-jdk17版本
docker pull jenkins/jenkins:lts-jdk17
执行执行报如下错误:
error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/fd/fd13cb1b731505dd9231d290ab9688bb33961b8f5cb7d9acbb3375c43aa0764c/data?verify=1725431556-EhUlboWVfLu6LFXaMTgkyuaBSe8%3D: dial tcp 4.78.139.54:443: connect: connection refused
编辑添加
vim /etc/docker/daemon.json
网上找到的配置可能会报如下错误(多找几个换就行):
error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/7b/7bf0dfc06ae6ea01122c385193a8dac03f6b65c62aa650536146b0c97c1e6bf8/data?verify=1725432462-h5ZHH2CpepDFRnTWyr6FguKrfj4%3D: dial tcp 199.16.158.104:443: i/o timeout
我找到可以使用的文件为:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://mirror.baidubce.com"
]
}
保存文件
:wq
重新加载、重启docker
systemctl daemon-reload
systemctl restart docker
在 docker 中运行 Jenkins
使用以下docker network create
命令在 Docker 中创建桥接网络:
docker network create jenkins
为了在 Jenkins 节点内执行 Docker 命令,请使用以下docker run
命令下载并运行docker:dind
Docker 映像:
docker run \
--name jenkins-docker \
--rm \
--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 \
--storage-driver overlay2
开始运行Jenkins,首先自己构建一个镜像,封装一层: lts-jdk17
FROM jenkins/jenkins:lts-jdk17
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
官网是这么写的,闹不成 。网络太慢,把https://download.docker.com/linux/debian/gpg 的文件下载下载重命名成 docker-archive-keyring.asc
放在跟Dockerfile同级 改Dockerfile为
FROM jenkins/jenkins:lts-jdk17
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
docker build -t myjenkins-blueocean:2.462.1-1 .
这里有个 apt 太慢问题:
清华大学开源镜像站 跟Dockerfile同级创建 sources.list 文件放入如下文本
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
然后修改dockerfile,在 RUN apt-get update
之前增加一行命令 ADD sources.list /etc/apt/
:
FROM jenkins/jenkins:lts-jdk17
USER root
ADD sources.list /etc/apt/
RUN apt-get clean && apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"
使用以下docker run
命令将自己的myjenkins-blueocean:2.462.1-1
映像作为 Docker 中的容器运行:
docker run \
--name jenkins-blueocean \
--restart=on-failure \
--detach \
--network jenkins \
--env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client \
--env DOCKER_TLS_VERIFY=1 \
--publish 8080:8080 \
--publish 50000:50000 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
myjenkins-blueocean:2.462.1-1
额 上面自己打包没搞定。网络太慢了。
改用已经封装好 Blue ocean插件的镜像
docker pull jenkinsci/blueocean
docker run \
-u root \
--rm \
-d \
-p 12716:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
- (可选) jenkinsci/blueocean 关闭时自动删除Docker容器(下图为实例)。如果您需要退出Jenkins,这可以保持整洁。
- (可选)jenkinsci/blueocean 在后台运行容器(即“分离”模式)并输出容器ID。如果您不指定此选项, 则在终端窗口中输出正在运行的此容器的Docker日志。
- 映射(例如“发布”)jenkinsci/blueocean 容器的端口8080到主机上的端口8080。 第一个数字代表主机上的端口,而最后一个代表容器的端口。因此,如果您为此选项指定 -p 49000:8080 ,您将通过端口49000访问主机上的Jenkins。
- (可选)将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000。 如果您在其他机器上设置了一个或多个基于JNLP的Jenkins代理程序,而这些代理程序又与 jenkinsci/blueocean 容器交互(充当“主”Jenkins服务器,或者简称为“Jenkins主”), 则这是必需的。默认情况下,基于JNLP的Jenkins代理通过TCP端口50000与Jenkins主站进行通信。 您可以通过“ 配置全局安全性” 页面更改Jenkins主服务器上的端口号。如果您要将您的Jenkins主机的JNLP代理端口的TCP端口 值更改为51000(例如),那么您需要重新运行Jenkins(通过此 docker run …命令)并指定此“发布”选项 -p 52000:51000,其中最后一个值与Jenkins master上的这个更改值相匹配,第一个值是Jenkins主机的主机上的端口号, 通过它,基于JNLP的Jenkins代理与Jenkins主机进行通信 - 例如52000。
- (可选,但强烈建议)映射在容器中的
/var/jenkins_home
目录到具有名字 jenkins-data 的volume。 如果这个卷不存在,那么这个 docker run 命令会自动为你创建卷。 如果您希望每次重新启动Jenkins(通过此 docker run ... 命令)时保持Jenkins状态,则此选项是必需的 。 如果你没有指定这个选项,那么在每次重新启动后,Jenkins将有效地重置为新的实例。注意: 所述的 jenkins-data 卷也可以 docker volume create命令创建:docker volume create jenkins-data
代替映射/var/jenkins_home
目录转换为Docker卷,还可以将此目录映射到计算机本地文件系统上的目录。 例如,指定该选项-v $HOME/jenkins:/var/jenkins_home
会将容器的/var/jenkins_home
目录映射到 本地计算机上目录中的 jenkins 子目录, 该$HOME
目录通常是/Users/<your-username>/jenkins
或/home/<your-username>/jenkins
。 - (可选 /var/run/docker.sock 表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许 jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。 如果运行声明式管道,其语法包含agent部分用 docker例如, agent { docker { ... } } 此选项是必需的。 在Pipeline Syntax 页面上阅读更多关于这个的信息 。 jenkinsci/blueocean Docker镜像本身。如果此镜像尚未下载,则此 docker run 命令 将自动为您下载镜像。此外,如果自上次运行此命令后发布了此镜像的任何更新, 则再次运行此命令将自动为您下载这些已发布的镜像更新。 注意:这个Docker镜像也可以使用以下 docker pull命令独立下载(或更新) : docker pull jenkinsci/blueocean 注意: 如果复制并粘贴上面的命令片段不起作用,请尝试在此处复制并粘贴此无注释版本:
通过Docker日志访问Jenkins控制台日志
方法一:使用docker logs <容器ID或容器名称>
来获取管理员密码
方法二:访问Jenkins/Blue Ocean Docker容器
docker exec -it jenkins-blueocean bash
然后去到:/var/jenkins_home
目录
修改国内镜像站
重新启动Jenkins容器后,由于Jenkins需要下载大量内容,但是由于默认下载地址下载速度较慢,需要重新设置下载地址为国内镜像站
默认目录是/var/lib/docker/volumes
# 修改数据卷中的hudson.model.UpdateCenter.xml文件
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
</sites>
# 将下载地址替换为http://mirror.esuni.jp/jenkins/updates/update-center.json
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
</site>
</sites>
# 清华大学的插件源也可以https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
再次重启Jenkins容器,访问Jenkins(需要稍微等会)
安装完插件安装不上 提示Jenkins版本低。
启动引入外部Maven
docker run \
-u root \
--rm \
-d \
-p 12716:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
不行这个最新版本更新插件都说Jenkins版本低,还是直接用一开始拉取的 jenkins/jenkins
哇
docker run \
--name myjenkins \
-u root \
--rm \
-d \
-p 12716:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /root/jenkins/apache-maven-3.9.9:/usr/local/maven \
-v /root/jenkins/jdk1.8.0_421:/usr/local/java/jdk-1.18 \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts-jdk17
官网如下:http://maven.apache.org/download.cgi
JDK官网:https://www.oracle.com/cn/java/technologies/downloads/