Ubuntu Jenkins如何与Docker集成
Ubuntu Jenkins与Docker集成的完整流程
1. 环境准备:安装Docker与Jenkins
在Ubuntu系统上,首先需要安装Docker和Jenkins,确保两者能正常运行。
1.1 安装Docker
更新软件包列表并安装依赖:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
添加Docker官方GPG密钥和软件源:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list >
/dev/null
安装Docker CE及组件:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
启动Docker并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
关键操作:将Jenkins用户加入Docker组(避免后续使用Docker命令需要sudo):
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins # 重启Jenkins使组权限生效
验证Docker安装:
docker --version # 应输出Docker版本信息
1.2 安装Jenkins
添加Jenkins官方源并安装:
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update
sudo apt install -y jenkins
启动Jenkins并设置开机自启:
sudo systemctl start jenkins
sudo systemctl enable jenkins
访问http://<
服务器IP>
:8080
,通过命令sudo cat /var/lib/jenkins/secrets/initialAdminPassword
获取初始密码,完成初始配置(如安装推荐插件、创建管理员账号)。
2. Jenkins配置:安装插件与授权
要让Jenkins能控制Docker,需安装必要插件并配置Docker访问权限。
2.1 安装Docker相关插件
登录Jenkins管理界面,进入Manage Jenkins > Manage Plugins:
- 在“Available”标签页搜索以下插件,勾选后点击“Install without restart”:
- Docker Pipeline:支持在Pipeline脚本中直接使用Docker命令(如
docker.build
、docker.image
)。 - Docker Plugin(可选):提供Docker主机管理和容器操作的UI界面。
- Docker Pipeline:支持在Pipeline脚本中直接使用Docker命令(如
2.2 配置Docker访问权限
为了让Jenkins能远程控制Docker守护进程,需修改Docker的通信配置:
编辑Docker守护进程配置文件:
sudo vim /etc/docker/daemon.json
添加以下内容(允许TCP连接,端口2375):
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
重启Docker使配置生效:
sudo systemctl restart docker
安全提示:开放2375端口存在安全风险,建议仅在测试环境使用;生产环境建议使用TLS加密或Docker Swarm模式。
3. 创建Jenkins Pipeline:集成Docker步骤
通过Pipeline脚本定义构建、测试、部署流程,结合Docker实现容器化CI/CD。
3.1 编写Jenkinsfile
在项目代码根目录创建Jenkinsfile
,示例如下(以Node.js应用为例):
pipeline {
agent any
environment {
DOCKER_IMAGE = "your-dockerhub-username/your-app-name:${
env.BUILD_NUMBER}
" // 镜像名称(含构建编号)
DOCKER_HUB_CREDENTIALS = credentials('dockerhub-account') // Jenkins中配置的Docker Hub凭证ID
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your/repo.git' // 拉取代码
}
}
stage('Build Image') {
steps {
script {
// 使用Docker Pipeline插件构建镜像
docker.build(DOCKER_IMAGE)
}
}
}
stage('Test') {
steps {
script {
// 在构建的镜像中运行测试
docker.image(DOCKER_IMAGE).inside {
sh 'npm install' // 安装依赖
sh 'npm test' // 执行测试
}
}
}
}
stage('Push Image') {
when {
branch 'main' // 仅main分支推送镜像
}
steps {
script {
// 登录Docker Hub并推送镜像
docker.withRegistry('https://registry.hub.docker.com', DOCKER_HUB_CREDENTIALS) {
docker.image(DOCKER_IMAGE).push()
}
}
}
}
stage('Deploy') {
steps {
script {
// 示例:通过SSH推送镜像到目标服务器(需提前配置SSH凭证)
def remoteServer = 'user@your-server-ip'
def remoteDir = '/path/to/deploy'
sshagent(['ssh-account']) {
// Jenkins中配置的SSH凭证ID
sh "scp -r ${
remoteDir}
/* ${
remoteServer}
:${
remoteDir}
"
sh "ssh ${
remoteServer}
'cd ${
remoteDir}
&
&
docker-compose pull &
&
docker-compose up -d'"
}
}
}
}
}
}
3.2 创建Pipeline任务
- 登录Jenkins,点击New Item,输入任务名称(如
docker-app-ci
),选择Pipeline类型,点击“OK”。 - 在Pipeline配置页:
- 选择“Pipeline script from SCM”(从代码仓库读取脚本)。
- 配置代码仓库(如GitHub)的URL和凭证。
- 设置“Script Path”为
Jenkinsfile
(即代码根目录下的Pipeline脚本文件名)。
- 点击“Save”,即可触发构建(或手动点击“Build Now”)。
4. 关键注意事项
- Docker in Docker(DinD):若需要在Jenkins容器内运行Docker(如复杂CI场景),可将Docker守护进程挂载到Jenkins容器中:
但需注意,DinD可能带来安全风险(容器逃逸),生产环境建议使用Docker outside of Docker(DooD,即Jenkins主机直接运行Docker)。docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
- 权限管理:确保Jenkins用户有足够的权限操作Docker(如
docker build
、docker push
),避免因权限不足导致构建失败。 - 镜像优化:使用多阶段构建减少镜像大小,添加
.dockerignore
文件排除不必要的文件(如node_modules
、.git
),提升构建效率。
通过以上步骤,即可实现Ubuntu系统上Jenkins与Docker的集成,支持容器化的持续集成与交付流程。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Jenkins如何与Docker集成
本文地址: https://pptw.com/jishu/733544.html