首页 > 其他分享 >Docker与CI/CD的集成

Docker与CI/CD的集成

时间:2024-12-18 11:57:06浏览次数:5  
标签:CI sudo CD Jenkins Docker DOCKER

Docker与CI/CD的集成


一、引言

1.1 什么是 CI/CD?
  • CI(Continuous Integration):持续集成,通过自动化工具频繁将代码集成到主分支,并执行自动化构建和测试。
  • CD(Continuous Deployment / Delivery):持续部署/交付,代码通过测试后自动部署到生产或测试环境。

1.2 Docker 在 CI/CD 中的作用

Docker 在 CI/CD 流程中扮演着关键角色,解决了传统开发流程中的环境不一致问题,具有以下优势:

  1. 一致性:通过容器保证开发、测试和生产环境一致。
  2. 快速部署:轻量化容器使应用部署速度大幅提升。
  3. 灵活性:易于与 CI/CD 工具(如 Jenkins、GitLab CI)集成。
  4. 隔离性:不同服务可以在独立的容器中运行,互不影响。

二、Docker 在 CI/CD 中的应用场景

2.1 开发与测试环境的标准化
  • 使用 Docker 容器快速创建一致的开发与测试环境,避免 “开发能跑,测试失败” 的问题。
2.2 自动化构建与测试
  • 利用 CI/CD 工具自动构建应用的 Docker 镜像,并执行单元测试、集成测试等。
2.3 自动化部署与发布
  • 将 Docker 镜像推送到镜像仓库(如 Docker Hub、Harbor),并自动部署到生产环境。

三、Docker 与 Jenkins 的集成

3.1 安装 Jenkins 并配置 Docker 环境
  1. 安装 Docker 确保主机上已安装 Docker。

    sudo apt-get update
    sudo apt-get install -y docker.io
  2. 安装 Jenkins

    • 安装 Jenkins 并启动服务。
    sudo apt-get install -y openjdk-11-jdk wget
    wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt-get update
    sudo apt-get install -y jenkins
    sudo systemctl start jenkins
  3. 安装 Docker 插件

    • 在 Jenkins 管理页面中安装 Docker Pipeline 插件。
  4. 配置 Jenkins 用户权限

    • 添加 Jenkins 用户到 Docker 组,确保 Jenkins 能够执行 Docker 命令:
    sudo usermod -aG docker jenkins
    sudo systemctl restart jenkins

3.2 编写 Jenkins Pipeline

使用 Jenkins Pipeline 构建和部署 Docker 镜像。

示例 Jenkinsfile

pipeline {
    agent any
    environment {
        DOCKER_IMAGE = 'myapp:latest'
        DOCKER_REGISTRY = 'dockerhub_username'
    }
    stages {
        stage('Checkout Code') {
            steps {
                echo "Checking out code..."
                checkout scm
            }
        }
        stage('Build Docker Image') {
            steps {
                echo "Building Docker image..."
                sh "docker build -t ${DOCKER_IMAGE} ."
            }
        }
        stage('Push to Docker Hub') {
            steps {
                echo "Pushing image to Docker Hub..."
                withCredentials([string(credentialsId: 'dockerhub-pass', variable: 'DOCKER_PASS')]) {
                    sh "echo ${DOCKER_PASS} | docker login -u ${DOCKER_REGISTRY} --password-stdin"
                    sh "docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}"
                }
            }
        }
        stage('Deploy to Server') {
            steps {
                echo "Deploying application..."
                sh "docker run -d --name myapp-container -p 8080:8080 ${DOCKER_IMAGE}"
            }
        }
    }
}

3.3 自动触发构建
  1. 在 Jenkins 项目中配置 Webhooks,监听代码仓库的提交事件。
  2. 每次代码提交时,自动触发 CI/CD 流程。

四、Docker 与 GitLab CI 的集成

4.1 GitLab CI/CD 基础概念
  • gitlab-ci.yml:GitLab CI 的配置文件,定义了流水线(Pipeline)中各阶段的任务。
4.2 安装 GitLab Runner
  1. 安装 GitLab Runner:

    sudo apt-get install -y gitlab-runner
  2. 注册 Runner 并绑定项目:

    sudo gitlab-runner register

4.3 编写 GitLab CI/CD Pipeline

使用 GitLab CI 自动化构建和发布 Docker 镜像。

示例 .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

variables:
  DOCKER_IMAGE: myapp:latest
  DOCKER_REGISTRY: dockerhub_username

before_script:
  - docker login -u $DOCKER_REGISTRY -p $DOCKER_PASSWORD

build:
  stage: build
  script:
    - echo "Building Docker image..."
    - docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE .
    - docker push $DOCKER_REGISTRY/$DOCKER_IMAGE

test:
  stage: test
  script:
    - echo "Running tests..."
    - docker run --rm $DOCKER_REGISTRY/$DOCKER_IMAGE pytest

deploy:
  stage: deploy
  script:
    - echo "Deploying application..."
    - docker pull $DOCKER_REGISTRY/$DOCKER_IMAGE
    - docker run -d --name myapp-container -p 8080:8080 $DOCKER_REGISTRY/$DOCKER_IMAGE

五、Docker 镜像的自动构建与发布

  1. 使用自动构建服务

    • 在 Docker Hub 中设置自动构建仓库,绑定代码仓库(如 GitHub、GitLab)。
  2. 触发条件

    • 每次提交代码时,自动触发构建、测试并发布镜像。

六、实践:CI/CD 集成与自动化

6.1 配置 Jenkins 与 Docker 集成
  1. 安装 Jenkins 和 Docker。
  2. 编写 Jenkinsfile,实现自动化构建、推送和部署。
6.2 配置 GitLab CI 与 Docker 集成
  1. 安装 GitLab Runner 并绑定项目。
  2. 编写 .gitlab-ci.yml 文件,实现 CI/CD 流水线。
6.3 自动化测试与部署
  • 在 CI/CD 流程中集成自动化测试工具,如 pytest、Jest 等。
  • 完成镜像推送后,自动部署到生产服务器。

总结

通过将 Docker 与 CI/CD 工具(Jenkins、GitLab CI)集成,可以实现代码的自动构建、测试和部署,极大提升开发效率与部署速度。掌握这些技术并结合实际场景进行优化,是现代开发团队不可或缺的技能。

关于作者:

15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我

标签:CI,sudo,CD,Jenkins,Docker,DOCKER
From: https://blog.csdn.net/u012263104/article/details/144546306

相关文章

  • Docker高级特性与性能优化
    一、Docker资源管理1.1为什么需要资源管理?在大型系统中,多个容器共享主机的CPU、内存、I/O等资源。如果不加以限制,部分容器可能会占用过多资源,导致其他服务性能下降。Docker提供了灵活的参数配置来限制CPU、内存、磁盘的使用,保障各个容器的资源公平分配。1.2限制CPU资......
  • word-spacing有什么作用?
    word-spacing是CSS中的一个属性,其主要作用在于调整文本中单词之间的距离。以下是对word-spacing属性的详细解释:定义与用途:word-spacing属性用于指定文本中单词之间的间距。它允许开发者增加或减少单词间的空白,从而实现更精细的文本排版控制。属性值:该属性接受固定值,如......
  • 宝塔-docker拉取宝塔镜像,并运行宝塔镜像
    宝塔-拉取宝塔镜像,并运行镜像第1步:查询dockersearchbtpanel/baota此docker镜像由堡塔安全官方发布,镜像版本为宝塔面板9.2.0正式版和9.0.0_lts稳定版,镜像会随着宝塔面板更新。目前支持x86_64和arm架构可供下载使用版本:latest标签是9.2.0正式版,基于Debian12Do......
  • PbootCMS 网站打开提示“No input file specified.”,如何解决?
    当你在访问PbootCMS网站时,如果遇到“Noinputfilespecified.”的错误提示,这通常是由于服务器配置或文件缺失引起的问题。以下是一些常见的解决方法和步骤:检查根目录下的 user.ini 文件:这个问题的一个常见原因是根目录中存在 user.ini 文件。这个文件通常是服务器为了......
  • 不同操作系统上安装Docker的详细步骤
    Ubuntu系统更新软件包索引打开终端,在安装任何软件之前,先更新系统的软件包索引是一个好习惯。运行以下命令:sudoapt-getupdate安装依赖包为了让Docker能够正确地安装和运行,需要安装一些必要的软件包。这些软件包允许apt通过HTTPS来获取软件包,并且添加一个新的软件源:s......
  • CSCI-GA.2662 Data Communications & Networks
    ComputerScienceDepartmentCourant Institute of Mathematical SciencesCourseTitle: DataCommunications&NetworksCourseNumber: CSCI-GA.2662-001Assignment 8: Final ProjectI. DueFridayDecember20,2024by 11:59pmEST.II. ObjectivesSoftwar......
  • MATH2033 Introduction to Scientific Computation
    MATH2033IntroductiontoScientificComputation—Coursework2—Submissiondeadline:15:00Friday20December2024Thiscourseworkcontributes10%towardsyourmarkforthismodule.RulesItisnotpermittedtousegenerativeartificialintelligence(AI)......
  • DSCI 510: Principles of Programming f
    DSCI510:PrinciplesofProgrammingforDataScienceFinalProjectGuidelinesInthefinalprojectforthisclass,youwillhavetheopportunitytoapplytheknowledgeandprogrammingskillsyouhavelearnedtoareal-worldproblem.Yourprojectshouldfoc......
  • ARM银河麒麟/统信UOS安装docker下mysql5.7,全步骤验证
    背景:网上找很多没有这个教程,自己写一个吧系统:银河麒麟v10桌面版/统信UOSv20桌面版架构:ARM64docker版本:20.10.7mysql版本:5.7软件包:dockr-20.10.7.tga、mysql5.7.tar软件包下载地址:将稍后提供,如需要请在评论区留言一、安装docker1.解压和移动docker安装文件tar-zxv......
  • 大数据新视界 -- Hive 事务与 ACID 特性的实现(2 - 16 - 7)
           ......