docker - CI/CD 管道的 Docker 效率
问题描述
这是我的 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 上做到这一点?对于特拉维斯来说,全新的重建似乎是很多不必要的工作。就构建效率和部署效率而言,免费 CI/CD 服务和免费托管 Docker 部署的最有效组合是什么?(我知道这是主观的,只是想了解一下)
抱歉,如果这些是新手问题,顺便说一句,我对 docker 及其相应的工作流/管道很陌生……在使用 heroku 查找多容器示例时遇到了一些麻烦。
解决方案
推荐阅读
- c# - ASP.NET Core Web API Authentication allowing unauthorized access
- web-services - 如何在单个restfull webservice端点处理多个请求
- go - 在 nix 中使用 buildGoPackage 时出现“没有这样的文件或目录”错误
- python-3.x - 如何通过 pyarrow 使用用户定义的模式编写 Parquet
- python - 我需要解析和存储来自 json 或 yaml 文件的值列表
- excel - 如何在数据透视表中选择 lastrow 之前的行?
- xml - 带有starts-with() 的XSLT Select 标记在数值上失败
- r - R2D3 与 D3.js 相比
- php - 将列分配给刀片中的变量时如何指定所需的表
- r - 根据闪亮条件更改表格单元格的格式