首页主机资讯Ubuntu Jenkins如何与Docker集成

Ubuntu Jenkins如何与Docker集成

时间2025-10-23 16:23:04发布访客分类主机资讯浏览960
导读:Ubuntu Jenkins与Docker集成的完整流程 1. 环境准备:安装Docker与Jenkins 在Ubuntu系统上,首先需要安装Docker和Jenkins,确保两者能正常运行。 1.1 安装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.builddocker.image)。
    • Docker Plugin(可选):提供Docker主机管理和容器操作的UI界面。

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容器中:
    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)。
  • 权限管理:确保Jenkins用户有足够的权限操作Docker(如docker builddocker push),避免因权限不足导致构建失败。
  • 镜像优化:使用多阶段构建减少镜像大小,添加.dockerignore文件排除不必要的文件(如node_modules.git),提升构建效率。

通过以上步骤,即可实现Ubuntu系统上Jenkins与Docker的集成,支持容器化的持续集成与交付流程。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Jenkins如何与Docker集成
本文地址: https://pptw.com/jishu/733544.html
Linux防火墙如何优化性能提升快 Ubuntu Jenkins如何生成报告与日志

游客 回复需填写必要信息