CI/CD 管道的 Docker 效率

时间:2021-04-28 12:57:16

标签: docker heroku deployment continuous-integration travis-ci

这是我的 travis.yml 文件,这是最新的运行 https://travis-ci.com/github/harryyy27/allies-art-club

sudo: required
language: generic

services:
  - docker

stages:
  - dev
  - prod

jobs:
  include:
    - stage: dev
      if: NOT(branch=master)
      scripts:
        - docker build -t harryyy27/allies_art_club/frontend -f ./client/Dockerfile.dev ./client
        - docker build -t harryyy27/allies_art_club/backend -f ./src/Dockerfile.dev ./src
        - docker run -e CI=true harryyy27/allies_art_club/frontend npm test
        - docker run -e CI=true harryyy27/allies_art_club/backend npm test
    - stage: prod
      if: branch=master
      before_deploy:
        - docker build -t harryyy27/aac-client ./client
        - docker tag harryyy27/aac-client registry.heroku.com/$HEROKU_APP/client
        - docker build -t harryyy27/aac-src ./src
        - docker tag harryyy27/aac-src registry.heroku.com/$HEROKU_APP/src
        - docker build -t harryyy27/aac-nginx ./nginx
        - docker tag harryyy27/aac-nginx registry.heroku.com/$HEROKU_APP/nginx
      # Log in to docker CLI
        - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_ID" --password-stdin
        - curl https://cli-assets.heroku.com/install.sh | sh
        - echo "$HEROKU_API" | docker login -u "$HEROKU_USERNAME" --password-stdin registry.heroku.com
      deploy:
        skip_cleanup: true
        provider: script
        script:
          docker ps -a;
          docker push harryyy27/aac-client;
          docker push registry.heroku.com/$HEROKU_APP/client;
          docker push harryyy27/aac-src;
          docker push registry.heroku.com/$HEROKU_APP/src;
          docker push harryyy27/aac-nginx;
          docker push registry.heroku.com/$HEROKU_APP/nginx;
          heroku container:release client src nginx --app $HEROKU_APP;

我不确定这是否是一种有效的设置。有没有办法缓存 docker 构建,这样就不必每次都重建它们?当我在本地更新构建时,它只能更新需要更改的部分。有没有办法在 Travis 上做到这一点?对于 Travis 来说,全新的重建似乎是很多不必要的工作。就构建效率和部署效率而言,免费 CI/CD 服务和免费托管用于 docker 部署的最有效组合是什么? (我知道这是主观的,只是想得到一些想法)

抱歉,如果这些是新手问题顺便说一句,我对 docker 及其相应的工作流程/管道非常陌生……在使用 heroku 查找多容器示例时遇到了一些麻烦。

0 个答案:

没有答案