Ubuntu Jenkins与Docker集成的完整流程
在Ubuntu系统上,首先需要安装Docker和Jenkins,确保两者能正常运行。
更新软件包列表并安装依赖:
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版本信息
添加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获取初始密码,完成初始配置(如安装推荐插件、创建管理员账号)。
要让Jenkins能控制Docker,需安装必要插件并配置Docker访问权限。
登录Jenkins管理界面,进入Manage Jenkins > Manage Plugins:
docker.build、docker.image)。为了让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模式。
通过Pipeline脚本定义构建、测试、部署流程,结合Docker实现容器化CI/CD。
在项目代码根目录创建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'"
}
}
}
}
}
}
docker-app-ci),选择Pipeline类型,点击“OK”。Jenkinsfile(即代码根目录下的Pipeline脚本文件名)。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
但需注意,DinD可能带来安全风险(容器逃逸),生产环境建议使用Docker outside of Docker(DooD,即Jenkins主机直接运行Docker)。docker build、docker push),避免因权限不足导致构建失败。.dockerignore文件排除不必要的文件(如node_modules、.git),提升构建效率。通过以上步骤,即可实现Ubuntu系统上Jenkins与Docker的集成,支持容器化的持续集成与交付流程。