1. 准备 docker-compose.yml 文件
创建一个 docker-compose.yml 文件,用于定义 Jenkins 和 Runner 容器。
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
environment:
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
restart: always
jenkins-runner:
image: jenkins/inbound-agent:latest
container_name: jenkins-runner
environment:
- JENKINS_URL=http://jenkins:8080/
- JENKINS_AGENT_WORKDIR=/home/jenkins/agent
- JENKINS_SECRET=your-agent-secret
- JENKINS_AGENT_NAME=your-agent-name
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- jenkins
restart: always
volumes:
jenkins_home:
配置说明:
- jenkins 服务:
jenkins/jenkins:lts是 Jenkins 的长期支持版本镜像。8080端口用于访问 Jenkins Web 界面,50000端口用于连接代理节点。挂载宿主机的 Docker socket 到容器中,以便 Jenkins 可以在容器内运行 Docker 命令。
jenkins-runner 服务:
jenkins/inbound-agent:latest是 Jenkins 的官方代理镜像。JENKINS_URL指定 Jenkins 主服务器的 URL。JENKINS_SECRET和JENKINS_AGENT_NAME用于注册 Runner,稍后需要替换为实际的值。
2. 启动 Jenkins 和 Runner
在 docker-compose.yml 文件所在目录中运行以下命令启动服务:
docker-compose up -d此命令会在后台启动 Jenkins 和 Jenkins Runner 容器。
3. 获取 Jenkins 初始密码
首次启动 Jenkins 时,需要获取初始管理员密码。使用以下命令查看日志:
docker logs jenkins在日志中找到类似 Please use the following password to proceed to installation 的行,复制密码用于首次登录 Jenkins。
4. 配置 Jenkins
- 在浏览器中访问 Jenkins 的 Web 界面:
http://<Your-Docker-Host-IP>:8080。 - 输入获取到的初始管理员密码,然后继续安装推荐的插件。
创建一个管理员用户,然后完成初始设置。
5. 获取 Jenkins Runner 注册信息
在 Jenkins Web 界面中:
- 进入 “Manage Jenkins” > “Manage Nodes and Clouds” > “New Node”。
- 输入节点名称,选择 “Permanent Agent”,然后点击 “OK”。
- 配置 Remote root directory 为
/home/jenkins/agent,然后保存。 在生成的节点配置页面中,获取
JENKINS_SECRET和JENKINS_AGENT_NAME值,用于更新docker-compose.yml中的环境变量。
6. 更新 docker-compose.yml 并重启 Runner
更新 docker-compose.yml 文件中的 JENKINS_SECRET 和 JENKINS_AGENT_NAME,然后重新启动 Jenkins Runner:
docker-compose up -d jenkins-runner此时,Jenkins Runner 应该已成功连接到 Jenkins 主服务器。
7. 配置和使用 Jenkins Pipeline
你现在可以在 Jenkins 中创建并配置 Pipeline,以使用 Docker 和 Jenkins Runner 进行构建和部署。以下是一个简单的 Pipeline 示例: