Debian系统下Jenkins容器化部署指南
确保Debian系统已安装Docker(推荐使用docker-ce
社区版),并具备root或sudo权限。Jenkins运行需Java环境,但官方镜像已内置OpenJDK,无需额外安装。
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker
sudo docker run hello-world
从Docker Hub获取官方LTS(长期支持)版本镜像(推荐生产环境使用):
docker pull jenkins/jenkins:lts
使用docker run
命令启动容器,关键参数说明如下:
docker run -d \
--name jenkins \ # 容器名称(自定义)
-p 8080:8080 \ # 映射Jenkins Web界面端口
-p 50000:50000 \ # 映射Jenkins Agent通信端口
-v jenkins_home:/var/jenkins_home \ # 数据卷持久化(存储配置、jobs等)
-v /var/run/docker.sock:/var/run/docker.sock \ # 挂载Docker套接字(允许容器内调用宿主机Docker)
jenkins/jenkins:lts
-d
:后台运行容器;-v jenkins_home:/var/jenkins_home
:将容器内Jenkins数据目录挂载为Docker数据卷,确保容器重启或删除后数据不丢失;-v /var/run/docker.sock:/var/run/docker.sock
:实现容器内Jenkins与宿主机Docker交互(如构建、推送镜像),需注意权限安全。docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
http://<Debian服务器IP>:8080
,粘贴上述密码完成解锁。pipeline {
agent any
stages {
stage('Checkout') {
steps { checkout scm } // 从仓库拉取代码
}
stage('Build') {
steps { sh 'mvn clean package' } // Maven构建Java项目
}
stage('Test') {
steps { sh 'mvn test' } // 运行单元测试
}
stage('Deploy') {
steps { sh 'docker build -t my-app:${BUILD_NUMBER} .' &&
sh 'docker push my-app:${BUILD_NUMBER}' } // 构建并推送Docker镜像
}
}
}
若需更灵活的配置(如多容器编排),可使用Docker Compose。创建docker-compose.yml
文件:
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
volumes:
jenkins_home:
启动服务:
docker-compose up -d
/var/run/docker.sock
权限(如sudo chmod 666 /var/run/docker.sock
),或使用--user
参数指定用户(避免root运行);-m 4g --cpus 2
限制内存和CPU);