【问题标题】:3 apps full CI/CD with Docker-compose + GitHub Actions + DigitalOcean3 个应用程序完整的 CI/CD 与 Docker-compose + GitHub Actions + DigitalOcean
【发布时间】:2022-08-05 10:06:04
【问题描述】:

我的源代码库托管在 GitHub 上,我想知道如何实现 CI/CD github 操作管道,以测试、构建 MERN 应用程序并将其部署到 DigitalOcean。我在根目录中有 admin_frontend、user_frontend、backend 文件夹。

如果我推送到 master 分支,我想要实现的目标是运行 CI/CD 工作流,这样:

  • 构建应用程序(2 个前端的生产反应构建)
  • 运行测试(我在 1 个前端应用程序中只有一些 Jest 测试用例)
  • 部署到我的数字海洋水滴

我不知道如何解决这个问题,因为我的 github 存储库中不仅有 1 个前端应用程序,而且还有 2 个前端和 1 个后端应用程序。如果您有该结构的任何工作流模板,请知道如何执行此操作,我很感激。

我需要在根目录中创建一个 .github/workflows/main.yml 还是在所有应用程序中创建 3 个?

目前,我可以通过运行以下脚本将 3 个应用程序部署到我的 Digitalocean droplet:

#build admin frontend
docker build -t admin-fe ./admin_frontend_app
docker save -o ./admin-fe.tar admin-fe

#build backend and frontend
docker build -t main-be ./backend & docker build -t main-fe ./frontend
docker save -o ./main-be.tar main-be & docker save -o ./main-fe.tar main-fe

#deploy services
ssh root@IPADDRESS \"pwd && mkdir -p ~/apps/mern && cd ~/apps/mern && ls -al && echo \'im in\' && rm admin-fe.tar && rm main-be.tar && rm main-fe.tar &> /dev/null\" 

#upload admin-fe.tar to VM via ssh
scp ./admin-fe.tar root@IPADDRESS:~/apps/mern/
#upload main-be.tar and main-fe.tar to VM via ssh
scp ./main-be.tar ./main-fe.tar root@IPADDRESS:~/apps/mern/
ssh root@IPADDRESS \"cd ~/apps/mern && ls -1 *.tar | xargs --no-run-if-empty -L 1 docker load -i\"

#sudo docker compose up
ssh root@IPADDRESS \"cd ~/apps/mern && sudo docker-compose up\"

    标签: docker continuous-integration github-actions digital-ocean cicd


    【解决方案1】:

    考虑到您只有一个存储库,可以方便地创建一个运行所有步骤的工作流:

    • 构建和测试用户前端
    • 构建管理前端
    • 构建后端
    • 部署应用程序(您可以查看digitalocean/action-doctl@v2 来完成此操作)

    当您想一次部署它们时,工作流程很方便(我认为您不会对每个 git push 都这样做,否则每次更改都会重新部署它们)。

    当您想要保持组件独立时,您提到的选项(3 个工作流程)也是一个有效的解决方案:例如构建/推送管理前端而不影响其他组件。

    【讨论】:

    • 谢谢!实际上单一的工作流程会更好,你提到的步骤很棒!不幸的是,我不知道是否有任何方法可以指定哪个是文件夹,哪个是 fe 等。这就是问题所在——我没有找到这个 cicd 结构的任何模板。也许我也会使用标签并仅在拉取请求上运行 cicd,因此,一个新版本已经发布,而不是将被部署。我正在寻找一种不太复杂的最佳实践方法,我可以使用它!
    【解决方案2】:

    我刚刚开始使用 Github Actions 创建 MERN Docker Deployment Boilerplate,它仍在进行中 https://github.com/mdarif/project-management

    没有使用过 Digital Ocean,但在 MERN 应用程序的情况下,或多或少的工作流程应该保持不变。

    我们的工作流程 YAML 文件分为两半,一是用于服务器部署和客户端部署。

    name: Docker CI
    
    # Controls when the workflow will run
    on:
      # Triggers the workflow on push or pull request events but only for the "master" branch
      push:
        branches: [ "master" ]
      pull_request:
        branches: [ "master" ]
    
      # Allows you to run this workflow manually from the Actions tab
      workflow_dispatch:
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      # This workflow contains a single job called "Client-Deployment"
      Client-Deployment:
        # The type of runner that the job will run on
        runs-on: ubuntu-latest
    
    
    
      # This workflow contains a single job called "Server-Deployment"
      Server-Deployment:
        # The type of runner that the job will run on
        runs-on: ubuntu-latest
    

    您可以查看之前分享的 github repo 上的完整代码。

    【讨论】:

      猜你喜欢
      • 2022-10-19
      • 1970-01-01
      • 2022-09-23
      • 2020-07-01
      • 2020-01-08
      • 2019-12-29
      • 1970-01-01
      • 2021-05-30
      • 2023-02-12
      相关资源
      最近更新 更多