基于 Git、Jenkins 和 Docker 的自动化持续集成与部署实践

摘要:

在现代软件开发中,持续集成(CI)和持续部署(CD)已成为提升开发效率和软件质量的关键实践。通过将 GitJenkinsDocker 三者结合,可以构建一个高效的自动化构建、测试和部署流水线。

1. 引言

随着软件开发的复杂性和团队协作需求的增加,传统的手动构建和部署方式已无法满足高效、可靠的要求。持续集成和持续部署(CI/CD)作为现代软件开发的最佳实践,能够自动化地将代码从提交到生产环境的整个过程。本文将详细介绍如何将 Git、Jenkins 和 Docker 集成,构建一个完整的自动化 CI/CD 流水线。

2. 环境准备

在开始之前,确保以下环境已准备就绪:

  • Git 仓库: 用于存储源代码,支持团队协作开发。
  • Jenkins 服务器: 用于自动化构建、测试和部署。
  • Docker 环境: 用于容器化应用,确保一致的运行环境。

3. 安装与配置

3.1 安装 Docker

在服务器上安装 Docker:

复制代码
# 更新包索引
sudo apt-get update

# 安装必要的包
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 添加 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

# 更新包索引
sudo apt-get update

# 安装 Docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker

3.2 安装 Jenkins

使用 Docker 安装 Jenkins:

复制代码
# 拉取 Jenkins 镜像
sudo docker pull jenkins/jenkins:lts

# 创建 Jenkins 工作目录
sudo mkdir -p /home/jenkins/workspace

# 启动 Jenkins 容器
sudo docker run -u root -d --restart=always --privileged=true -p 8080:8080 -p 50000:50000 \
  -v /home/jenkins/workspace/:/var/jenkins_home/workspace \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  --name jenkins jenkins/jenkins:lts

3.3 配置 Jenkins

  1. 访问 Jenkins: 在浏览器中访问 http://<Jenkins 服务器 IP>:8080

  2. 获取初始管理员密码: 运行以下命令获取密码:

    复制代码
    sudo docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  3. 安装插件: 在 Jenkins 中安装以下插件:

    • Git Plugin
    • Docker Pipeline
    • Maven Integration Plugin
    • SSH Agent
  4. 配置全局工具: 在 Jenkins 的"全局工具配置"中,配置 JDK、Maven 和 Git 的路径。

4. 配置 Git 仓库

  1. 创建 Git 仓库: 在 GitHub、GitLab 或自建 Git 服务器上创建项目仓库。
  2. 生成 SSH 密钥对: 在 Jenkins 服务器上生成 SSH 密钥对,并将公钥添加到 Git 仓库的 SSH 密钥设置中。
  3. 配置 Jenkins 凭据: 在 Jenkins 中添加 Git 仓库的 SSH 凭据。

5. 配置 Jenkins 构建任务

  1. 创建新任务: 在 Jenkins 中创建一个新的"流水线"任务。

  2. 配置源码管理: 在任务配置中,选择 Git,并填写仓库 URL 和凭据。

  3. 配置构建触发器: 选择"GitHub hook trigger for GITScm polling",以便在 Git 仓库有新提交时自动触发构建。

  4. 配置构建脚本: 在流水线脚本中,编写构建、测试和部署的步骤。示例:

    复制代码
    pipeline {
        agent any
        stages {
            stage('Checkout') {
                steps {
                    git credentialsId: 'git-credentials-id', url: '[email protected]:your-repo.git'
                }
            }
            stage('Build') {
                steps {
                    script {
                        // 构建命令,例如使用 Maven 构建
                        sh 'mvn clean package'
                    }
                }
            }
            stage('Build Docker Image') {
                steps {
                    script {
                        // 构建 Docker 镜像
                        sh 'docker build -t your-image:${BUILD_NUMBER} .'
                    }
                }
            }
            stage('Push Docker Image') {
                steps {
                    script {
                        // 登录 Docker 仓库
                        sh 'docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD'
                        // 推送镜像
                        sh 'docker push your-image:${BUILD_NUMBER}'
                    }
                }
            }
            stage('Deploy') {
                steps {
                    script {
                        // 部署命令,例如使用 Docker 部署
                        sh 'docker run -d -p 8080:8080 your-image:${BUILD_NUMBER}'
                    }
                }
            }
        }
    }

6. 配置 GitHub Webhook

  1. 生成 GitHub Personal Access Token: 在 GitHub 中生成一个 Personal Access Token,用于 Jenkins
相关推荐
Willis_m2 小时前
Linux 服务器用 SSH 拉取多个 Git 工程
linux·服务器·git·ssh
1candobetter2 小时前
git如何将本地 dev 分支与远程 dev 分支同步
git
此方konata2 小时前
git常用命令
git
hi,编程哥3 小时前
Docker、ECS 与 K8s 网段冲突:解决跨服务通信中的路由问题
docker·容器·kubernetes
How_doyou_do3 小时前
项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台
运维·docker·容器
深海蜗牛5 小时前
Jenkins linux安装
linux·jenkins
阳光普照世界和平5 小时前
Jenkins:库博静态工具CI/CD 的卓越之选
运维·ci/cd·jenkins
liudongyang1235 小时前
jenkins 启动报错
java·运维·jenkins
xbd_zc8 小时前
【Jenkins简单自动化部署案例:基于Docker和Harbor的自动化部署流程记录】
docker·自动化·jenkins·harbor
我的璨宝宝啊9 小时前
linux小主机搭建自己的nas(三)docker安装nextcloud
linux·运维·docker