1、概念
Jenkins 是一个独立的、开源的自动化服务器,可用于自动化与软件构建、测试、交付或部署相关的各种任务。Jenkins 可以通过原生系统软件包、Docker 进行安装,甚至可以通过任何安装了 Java 运行时环境 (JRE) 的机器独立运行。

2、安装
2.1、docker 安装 Jenkins
注意哦~~我本机 windows 安装了 vpn,可以挂载 vpn 全局模式下载国外镜像。
1、官方文档
可以参考官方文档安装:https://jenkins.ac.cn/doc/book/installing/docker/
2、简洁安装方式
主要下载 docker:dind、jenkins,其中,docker:dind 给 jenkins 提供 docker 能力。
编写 jenkins-compose.yaml、jenkins.dockerfile ,其中,Jenkins.dockerfile 中依赖jenkins/jenkins:2.564-jdk21 镜像创建自定义拥有 docker 能力的 jenkins 镜像(官方提供的 jenkins 镜像没有docker 能力);jenkins-compose.yaml 用于编排安装运行上述 docker:dind 和自定义的 jenkins 镜像。
执行脚本:docker-compose -f D:\work\env\docker\jenkins\jenkins-compose.yaml up -d
jenkins-compose.yaml
version: '1.0'
services:
jenkins-docker:
# 1. 启动 docker in docker ,给 jenkins 提供 docker 能力
image: docker:dind
container_name: jt-docker-dind
restart: always
privileged: true # 给 docker 容器最高权限,可以执行 docker 命令,否则在容器中无法启动 docker
volumes:
- D:\work\env\docker\jenkins\certs:/certs/client
- D:\work\env\docker\jenkins\data:/var/jenkins_home
networks:
- jt_jenkins_network
ports:
- 2376:2376
environment:
- DOCKER_TLS_CERTDIR=/certs #开启 Docker TLS 安全认证,证书放在 /certs
jenkins:
# 构建 jenkins 容器,使用本地 dockerfile 构建的 jenkins 镜像
build:
context: .
dockerfile: jenkins.dockerfile
container_name: jt-jenkins
# 在容器启动时,如果容器启动失败,则重启容器
restart: on-failure
volumes:
- D:\work\env\docker\jenkins\data:/var/jenkins_home
- D:\work\env\docker\jenkins\certs:/certs/client:ro # ro = 只读
networks:
- jt_jenkins_network
ports:
- 8080:8080
- 50000:50000
# 设置 jenkins 容器的环境变量,使得 jenkins 容器可以访问 docker 容器
environment:
# 设置 jenkins 容器可以访问 docker 容器的地址
- DOCKER_HOST=tcp://jenkins-docker:2376
# 设置 jenkins 容器可以访问 docker 容器的证书路径
- DOCKER_CERT_PATH=/certs/client
# 设置 jenkins 容器可以访问 docker 容器的 TLS 认证
- DOCKER_TLS_VERIFY=1
depends_on:
- jenkins-docker
networks:
jt_jenkins_network:
driver: bridge
jenkins.dockerfile
# 基于 jenkins 官方镜像构建
FROM jenkins/jenkins:2.564-jdk21
# 切换到 root 用户
USER root
# 更新 apt 源,安装 lsb-release,lsb-release 是 Linux 上用来查看发行版标识信息的工具
RUN apt-get update && apt-get install -y lsb-release
# 添加 Docker 官方 GPG 密钥,有了这个密钥,才能从 Docker 官方源下载安装 Docker CE CLI
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
# 添加 Docker 官方源,这个源是 Docker 官方提供的,包含了 Docker CE CLI 的安装包
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
# 更新 apt 源,安装 Docker CE CLI
RUN apt-get update && apt-get install -y docker-ce-cli
# 切换到 jenkins 用户
USER jenkins
# 安装 Jenkins 插件,blueocean 是 Jenkins 的蓝海项目,docker-workflow 是 Jenkins 的 Docker 工作流插件,json-path-api 是 Jenkins 的 JSON 路径 API 插件
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow json-path-api"3、jenkins 初始化设置
jenkins 容器启动后,访问 http://localhost:8080/ 控制台。
安装设置流程


进入 jt-jenkins 容器,执行:cat /var/jenkins_home/secrets/initialAdminPassword 得到密码


注意哦~~安装时要开全局模式 vpn,否则这些插件下不下来


登录失败
初始 jenkins 如果没有配置好,存在刷新后没有用户名密码,登录会失败。
解决办法(docker 安装 jenkins):
1、以 root 身份进入 docker 中的 jenkins 命令行
docker exec -u 0 -it jt-jenkins /bin/bash
2、首先下载 vim
apt-get update && apt-get install -y vim
3、编辑 vim /var/jenkins_home/config.xml 文件
注释如下内容,重启 docker :1. exit 2. docker restart jt-jenkins
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
<disabledAdministrativeMonitors/>
<version>2.564</version>
<numExecutors>2</numExecutors>
<mode>NORMAL</mode>
<!-- 注释如下配置,jenkins 可无密码直接登录
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>false</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>false</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
-->
<disableRememberMe>false</disableRememberMe>
<projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>
<buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
<markupFormatter class="hudson.markup.EscapedMarkupFormatter"/>
<jdks/>
<viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
<myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
<clouds/>
<scmCheckoutRetryCount>0</scmCheckoutRetryCount>
<views>
<hudson.model.AllView>
<owner class="hudson" reference="../../.."/>
<name>all</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
</hudson.model.AllView>
</views>
<primaryView>all</primaryView>
<slaveAgentPort>50000</slaveAgentPort>
<label></label>
<crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer"/>
<nodeProperties/>
<globalNodeProperties/>
<nodeRenameMigrationNeeded>false</nodeRenameMigrationNeeded>
</hudson4、访问 localhost:8080 ,修改全局安全配置

配置安全域为:Jenkins 专有用户数据库 → 允许用户注册

重新注册


5、登录后,修改安全配置,不在允许注册
评论交流
欢迎留下你的想法