为了账号安全,请及时绑定邮箱和手机立即绑定

使用GitHub Actions和Docker实现持续集成与持续部署

标签:
Docker
使用 GitHub Actions 和 Docker,可以让您的开发工作流更简单,实现无缝 CI/CD 集成过程。

持续集成和持续部署(CI/CD)是现代软件开发中的关键实践,使团队能够快速交付可靠的可扩展应用程序。GitHub Actions 提供了一种强大的集成工具,可以直接在 GitHub 仓库内自动化工作流,而 Docker 则确保环境一致且可重复。

在这篇文章里,我们将教你如何使用GitHub Actions和Docker实现CI/CD持续集成和持续交付流水线。我们将从基础开始,创建一个使用Docker的应用程序,并配置GitHub Actions以自动化构建、测试和部署流程。

《了解 CI/CD、GitHub Actions 以及 Docker》
什么是CI/CD?
  • 持续集成 (CI): 自动化每次代码提交的构建和测试,以便尽早发现问题并解决。
  • 持续部署 (CD): 自动部署经过测试的代码变更到生产环境,确保更快的交付。
GitHub Actions 是什么?

GitHub Actions 是一个集成到 GitHub 的 CI/CD 平台,它允许你用 YAML 文件定义工作流。主要功能有:

  • 由事件驱动的自动化(例如,由 pushpull_request 事件触发)。
  • 支持可重用的工作流程。
  • 支持与 Docker 以及其他第三方工具的集成。
Docker的角色

Docker 通过容器化技术,可以创建出隔离且可重复的应用程序运行环境。通过在 Dockerfile 中定义应用程序的运行环境,这样可以确保应用程序在本地和生产环境中的行为保持一致。

设置 GitHub Actions 实现 CI/CD
代码库设置
  • 首先,创建或克隆一个GitHub仓库。
  • 然后,用你的应用程序代码库初始化仓库。
创建 GitHub Actions 流程配置文件
  • 在你的仓库内创建一个文件夹 .github/workflows/
  • 在该文件夹内添加一个名为 ci-cd.yml 的文件。

示例工作流定义:

    name: CI/CD 流水线  

    on:  
      push:  
        branches:  
          - main  

    jobs:  
      build-and-test:  
        runs-on: ubuntu-latest  
        steps:  
          - name: 拉取代码  
            uses: actions/checkout@v3  
          - name: 安装 Node.js  
            uses: actions/setup-node@v3  
            with:  
              node-version: '16'  
          - name: 安装依赖  
            run: npm install  
          - name: 运行测试  
            run: npm test
  • 这个示例工作流会在每次有人将更改推送到 main 分支时拉取代码、安装依赖项并运行测试。
创建一个 Docker 化应用
写一个 Dockerfile

在根目录下创建一个 Dockerfile,以便将你的应用容器化。

  • 例如一个 Dockerfile 示例(一个示例):
    # 使用 Node.js 的 16 版本作为基础镜像  
    FROM node:16  

    # 设定工作目录为 /app  
    WORKDIR /app  

    # 复制包文件并安装依赖项  
    COPY package*.json ./  
    RUN npm install  

    # 复制其余应用代码  
    COPY . .  

    # 暴露端口 3000  
    EXPOSE 3000  

    # 默认运行命令  
    CMD ["npm", "start"]
本地测试:Docker镜像文件
  • 开始构建 Docker 图像:
    docker build -t my-app .  # 构建一个名为 my-app 的 Docker 镜像,使用当前目录的 Dockerfile
  • 运行 Docker 容器,使用 docker run 命令运行容器。
    docker run -p 3000:3000 my-app

这行命令将会运行一个容器,将主机的3000端口映射到容器的3000端口,并启动一个名为my-app的应用程序。

将 Docker 和 GitHub Actions 整合在一起
修改Docker的工作流程

修改 ci-cd.yml 文件以构建并测试该 Docker 镜像:

    jobs:  
      build-and-test:  
        runs-on: ubuntu-latest  
        steps:  
          - name: 拉取代码  
            uses: actions/checkout@v3  
          - name: 构建Docker图像  
            run: docker build -t my-app .  
          - name: 运行容器中的测试  
            run: docker run my-app npm test
将Docker镜像推送到仓库。

添加将镜像上传到Docker Hub的步骤:

    - name: 登录 Docker Hub  
      uses: docker/login-action@v2  
      with:  
        username: ${{ secrets.DOCKER_USERNAME }}  
        password: ${{ secrets.DOCKER_PASSWORD }}  
    - name: 上传 Docker 镜像  
      run: |  
        将 my-app 打标签为 my-dockerhub-username/my-app:latest  
        推送 my-dockerhub-username/my-app:latest 到仓库
  • my-dockerhub-username 替换为你的 Docker Hub 用户名(或昵称)。
部署应用

要运行 Docker 包装的应用程序,你可以这样做:

  • 使用 Docker Compose 来搭建本地环境。
  • 部署到 Kubernetes、AWS ECS 或 Azure Container Instances。

对于简单的Docker主机部署:

  • 下载 Docker 镜像:
    docker pull my-dockerhub-username/my-app:latest

这命令是用来从Docker Hub拉取最新版本的应用程序。

  • 运行容器实例。
docker run -d -p 80:3000 你的 Docker Hub 用户名/my-app:latest # 运行一个新的 Docker 容器,并将主机的 80 端口映射到容器内的 3000 端口。# 拉取最新的镜像版本
使用 GitHub Actions 和 Docker 的好处
  • 自动化简化: GitHub Actions 自动化测试和部署,节省时间,
  • 环境一致性: Docker 确保本地和生产系统之间环境保持一致,
  • 支持无缝扩展性: 支持现代云原生应用的无缝扩展,
最后

CI/CD 流水线对于高效和可靠的软件交付来说非常重要。结合 GitHub Actions 和 Docker 可以简化自动化和环境管理,确保工作流程的一致性和可重复性。通过遵循本指南中的步骤,您可以为您的项目搭建一个稳健的 CI/CD 流水线。

从今天就开始尝试吧,探索像 Kubernetes 这样的高级集成技术,或多阶段工作流程,让你的自动化达到一个新的高度!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消