使用 Docker Compose 部署基于 GitHub Actions 的 CICD

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

介绍

GitHub Actions 是一种用于自动化软件开发工作流程的工具。与其他 CI / CD 工具不同,它无需签署任何合同或购买许可证即可使用。这意味着您可以完全自定义操作,并在GitHub 的世界范围内共享它们。然而,为了实现可持续的软件开发流程,必须克服产生的挑战,如维护环境。

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用 YAML 文件来配置应用程序服务的各种方面。它允许您隔离不同组件,同时保持它们高度可重现,并消除了环境和设置方面的潜在问题。

在本文中,我们将学习如何使用 Docker Compose 和 GitHub Actions 部署基于特定存储库的 CICD 系统。我们还将介绍如何使用一个示例项目演示这些概念。

准备工作

在本文中,我们将通过一些步骤在 GitHub 存储库中部署 CICD 系统。要执行这些步骤,您需要以下环境:

  • Docker
  • Docker Compose
  • 一个 GitHub 存储库

如果您还没有 Docker 和 Docker Compose,请在他们的官方网站上找到适合您操作系统的适当版本,并按照说明进行安装。

创建/选择一个您希望在其中部署 CICD 的 GitHub 存储库(请确保它已经包含您的代码)。

配置 Docker Compose

第一步是配置 Docker Compose 文件。在根目录中创建一个名为 docker-compose.yml 的文件,文件内容如下:

-------- -----

---------
  ----
    --------------- ---
    ------ -----------
    ------
      - -----------
    --------
      - --------------
    ------------ ------------
    -------- --- -- ---- ------- -- --- --- ------

请注意,此文件指定了一个服务,该服务由标准 node:latest 映像启动,并运行 npm installnpm run start 命令。

在文件中,指定了一个名为 app 的服务,并使用 container_nameimage 参数定义它。此外,使用 ports 参数将容器绑定到 3000 端口,并使用 volumes 参数将主机上的当前目录(.)挂载为容器的 /usr/src/app 目录。然后,使用 working_dir 参数定义工作目录和 command 参数指定要执行的命令。

创建 GitHub 操作工作流程

现在,我们需要在 GitHub 存储库中创建“actions”文件夹,并在其中创建一个名为 build.yml 的文件。

build.yml 文件中,输入以下代码:

----- ----- --- ------

---
  -----
    ---------
      - ------

-----
  ------

    -------- -------------

    ------
      - ----- ----- --- --- ----
        ----- -------------------

      - ----- ----- --- ------ -----
        ----- ---------------------------
        -----
          --------- --- ------------------------- --
          --------- --- ------------------------- --
          ----------- -----------------------
          ------------- ----

      - ----- ---- ------ -----
        ----- ---------------------------
        -----
          --------- --- ------------------------- --
          --------- --- ------------------------- --
          ----------- -----------------------
          ------------- ----
          ----- ----

请注意,此工作流程在将代码推送到 master 分支时运行,它有一个单独的 job 名称为 build,该 job 将在 ubuntu-latest 上运行,其中包含三个步骤。第一个步骤使用 actions/checkout@v2 检查存储库代码。第二个步骤使用 docker/build-push-action@v2 构建 Docker 镜像。最后一个步骤使用相同的 docker/build-push-action@v2 将 Docker 镜像推送到相关 Docker 镜像仓库。

配置 GitHub 的机密

将密码直接嵌入您的代码是一个可怕的做法。GitHub 提供了一个名为“机密”(secrets)的功能,该功能可让您存储机密数据(例如密码、令牌等),而不必将其嵌入代码中。

为了将 Docker 镜像推送到 Docker 注册表,我们需要将 Docker 注册表的用户名和密码存储在 GitHub 机密中。

如果您还没有设置机密,请在 GitHub 存储库“设置”中进行设置。选择“机密”选项卡,然后添加两个机密 REGISTRY_USERNAMEREGISTRY_PASSWORD,并将其与您的 Docker 注册表用户名和密码相关联。

测试

一旦您完成了上述操作,您就可以尝试将代码推送到 master 分支并观察 CICD 流程。请注意,此时 Docker Compose 文件中只有一个服务,因此该文件非常简单。您可以添加更多服务和更具备由 Docker Compose 所提供的更高级别的配置。

结论

在本文中,我们学习了如何使用 Docker Compose 和 GitHub Actions 创建基于 Docker 的 CICD 系统。我们创建了一个使用 Docker Compose 配置的服务,将其打包到 Docker 映像中,并通过 GitHub Actions 实现了部署和推送 Docker 映像的过程。通过这些步骤,我们可以在几分钟内轻松地将基于特定存储库的 CICD 集成到 GitHub 中。

示例代码可在以下存储库中找到:https://github.com/yourname/your-repo。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6724469d2e7021665e12e010


猜你喜欢

  • Koa.js 中如何使用 Mocha 进行单元测试

    前言 随着前端技术的不断迭代,前端开发逐渐走向了更加丰富和复杂的方向。因此,在开发过程中,对代码进行单元测试是非常有必要的。 本文将分享如何在 Koa.js 中使用 Mocha 进行单元测试。

    9 天前
  • 在使用 Tailwind 时,如何处理样式冲突?

    随着 Tailwind 的流行,越来越多的项目开始使用这个实用的 CSS 工具箱。但是,与所有前端工具一样,Tailwind 也可能会导致样式冲突问题。在本文中,我们将探讨 Tailwind 样式冲突...

    9 天前
  • Serverless 应用场景及其设计架构探讨

    Serverless 是一种全新的架构设计风格,它的核心思想是去中心化,将应用程序的管理和维护交给第三方云服务提供商,由服务提供商负责服务器和基础结构管理,使开发者能够专注于业务逻辑的开发和维护。

    10 天前
  • PM2 进程守护常见问题及解决方案

    前言 随着互联网技术的发展,前端作为重要的展示层,深受开发者们的喜爱。在前端开发过程中,我们经常需要编写一些Node.js的脚本或者应用程序。这些应用程序需要长时间运行,并保持可靠的服务。

    10 天前
  • Kubernetes 参数配置详解

    Kubernetes 是一套用于自动部署、扩展和管理容器化应用程序的开源平台。本文将详细介绍 Kubernetes 的参数配置,以及如何通过参数配置优化 Kubernetes 的性能和可靠性。

    10 天前
  • NodeJS 测试:学习使用 Chai 和 Mocha 进行测试

    在开发 NodeJS 应用程序时,测试是至关重要的。它可以确保代码的正确性、可靠性和可维护性,并减少错误和 bug 的数量。本文将介绍如何使用 Chai 和 Mocha 进行测试,并提供详细的指导和示...

    10 天前
  • 如何在 Vue.js 项目中使用 Material Design?

    前言 Material Design 是 Google 推出的一种标准化的设计语言,其设计风格简洁明了,体现了显著的层次感和色彩对比。在前端开发领域中,我们可以使用 Material Design 来...

    10 天前
  • SSE 与 Ajax 轮询的比较

    前言 在 Web 开发中,前后端交互是必不可少的一环。为了实时更新内容,常常需要向服务器发送请求来获取新的数据。常见的解决方案是 Ajax 轮询和 SSE(Server-Sent Events)。

    10 天前
  • Enzyme 中如何进行 React 组件的状态测试?

    Enzyme 中如何进行 React 组件的状态测试? 前言 在编写 React 应用程序时,React 组件的状态是至关重要的。这些状态可能影响您的 UI 呈现,同时也会影响用户与应用程序的交互。

    10 天前
  • Cypress 实现 E2E 测试的技巧与注意事项

    前言 随着前端应用逐渐复杂,测试变得越来越重要。E2E(End-to-End)测试是确保应用程序在各个模块和部分之间正确运行的重要组成部分。准确地说,E2E 测试是测试整个应用程序的流程——从用户启动...

    10 天前
  • 从新手到专家:使用 Promise 进行异步编程的最佳实践

    随着前端应用的日益复杂,异步编程已成为大多数前端开发人员必须掌握的技能之一。在这方面,Promise 是一种非常常用的方法,因为它提供了一种简单且强大的方式来处理异步操作。

    10 天前
  • 如何在 Fastify 中使用 Winston 日志系统

    在现代 Web 应用程序中,日志写入是十分重要的一项功能。日志记录可以帮助我们跟踪应用程序中的错误和问题,同时也可以让我们收集有用的数据以监控应用程序的性能。 Winston 是一个流行的 Node....

    10 天前
  • RxJS 应用之实现键盘搜索功能

    在前端开发中,搜索功能是一个不可或缺的功能。而实现搜索功能的方式也有很多种。本文将介绍如何使用 RxJS 实现键盘搜索功能。 RxJS 简介 RxJS 是 Reactive Extensions fo...

    10 天前
  • 如何使用 Jest 测试 Node.js 应用

    简介 在开发 Node.js 应用过程中,测试是非常重要的环节。它可以帮助我们在开发的过程中快速发现并解决问题,保证最终代码的质量。Jest 是一个流行的测试框架,它可以帮助我们轻松快速地编写自动化测...

    10 天前
  • kubectl 命令行工具教程

    kubectl 是一个命令行工具,用于与 Kubernetes 集群进行交互。它可以帮助您创建、部署和管理 Kubernetes 资源。在这篇文章中,我们将学习如何使用 kubectl 命令行工具。

    10 天前
  • PWA 应用如何处理 vibrate 导致的页面错误

    在 PWA 应用中,使用浏览器的振动 API (Vibration API)是一种常见的交互方式,可以提供更好的用户体验。但是,在某些情况下,使用该 API 可能会导致页面错误,例如在页面尚未加载完毕...

    10 天前
  • ES10 新特性之:你了解 Array.prototype.sort() 排序的冷门特性吗?

    前言 JavaScript 是一门动态语言,拥有着丰富的内建对象和方法,其中的 Array.prototype.sort() 方法在前端编程中使用场景颇多。然而,你是否听说过它的冷门特性呢?在这篇文章...

    10 天前
  • 如何使用 Chai.js 和 Mocha.js 对 Vue.js 应用程序进行单元测试

    前言 随着 Vue.js 开发使用的逐渐普及,对于 Vue.js 应用程序进行单元测试变得越来越重要。单元测试可以提高应用程序的可靠性、稳定性和可维护性。为了进行单元测试,你需要使用一些测试框架和库。

    10 天前
  • Material Design 的 4 个跨平台开发框架

    Material Design 是由 Google 推荐的一种设计风格,旨在提供一种有鲜明特色的可复用 UI 组件库,使得产品的界面设计能够统一起来,也便于用户的操作和体验。

    10 天前
  • Vue.js 3.x 中的特殊组件调用方法

    Vue.js 3.x 是目前最受欢迎的前端框架之一,其具有简单易用、轻量级、灵活性强等众多优点。在实际开发中,我们常常需要使用一些特殊的组件调用方法,以便更好地实现我们的业务逻辑。

    10 天前

相关推荐

    暂无文章