我已经使用下面的配置为我的web应用程序设置了连续部署(bitbucket-pipelines.yml)。
pipelines:
branches:
master:
- step:
name: Deploy to production
trigger: manual
deployment: production
caches:
- node
script:
# Install dependencies
- yarn install
- yarn global add gulp-cli
# Run tests
- yarn test:unit
- yarn test:integration
# Build app
- yarn run build
# Deploy to production
- yarn run deploy
虽然这有效,但我想通过并行运行单元和集成测试步骤来提高构建速度。
pipelines:
branches:
master:
- step:
name: Install dependencies
script:
- yarn install
- yarn global add gulp-cli
- parallel:
- step:
name: Run unit tests
script:
- yarn test:unit
- step:
name: Run unit tests
script:
- yarn test:integration
- step:
name: Build app
script:
- yarn run build
- step:
name: Deploy to production
trigger: manual
deployment: production
script:
- yarn run deploy
这还有一个优点,就是可以看到比特桶中的不同步骤,包括每一步的执行时间。
这是行不通的,因为每个步骤都创建了一个干净的Docker容器,并且测试步骤上不再安装依赖项。
我知道我可以使用工件在步骤之间共享文件,但这仍然需要创建多个容器,这会增加总执行时间。
如何在多个步骤之间共享同一个 Docker 容器?
我推荐的可能解决方案:
- step:
name: Install dependencies
script:
- yarn install
- yarn global add gulp-cli
上面的第一步应该是在预构建的 Docker 容器中,该容器托管在 Docker Hub 上,并通过映像用于部署:用户名/部署 docker:latest
。
然后,这两个步骤都可以使用这个容器进行测试。
每个步骤都在自己的Docker容器和自己的卷中运行。因此,您不能在同一个构建容器上运行两个步骤。
您是在尝试优化构建分钟消耗,还是构建完成需要多长时间?
如果您正在优化构建分钟数,请坚持您现在拥有的。由于使用多个步骤和工件的开销会增加一些构建时间。但您将失去这些特性提供的灵活性。此外,您可以尝试确保在构建环境中使用小Docker映像,因为这样可以更快地完成。
如果您正在优化管道完成时间,我建议您使用工件和并行步骤。虽然总的执行时间预计会更长,但您将等待更短的时间来查看管道的结果。
我不久前遇到了同样的问题,并找到了一种方法来做到这一点,我现在正在成功地使用它。
您可以使用Docker的save
和load
with BitBucket的Artifacts来实现这一点。您只需要确保您的图像不会太大,因为BitBucket的Artifacts限制为1GB,您可以使用多阶段构建和其他技巧轻松确保这一点。
- step:
name: Build app
script:
- yarn run build
- docker save --output <backup-file-name>.tar <images-you-want-to-export>
artifacts:
- <backup-file-name>.tar
- step:
name: Deploy to production
trigger: manual
deployment: production
script:
- docker load --input <backup-file-name>.tar
- yarn run deploy
您可能还想使用BitBucket的缓存,这样可以更快地构建Docker图像。例如,您可以使NPM包仅在
package时安装。json
和纱线。锁定
文件更改。
docker保存
(docker 17):https://devdocs.io/docker~17/engine/reference/commandline/save/index
docker加载
(docker 17):https://devdocs.io/docker~17/引擎/参考/命令行/负载/索引
BitBucket工件:https://confluence.atlassian.com/bitbucket/using-artifacts-in-steps-935389074.html
BitBucket管道缓存:https://confluence.atlassian.com/bitbucket/caching-dependencies-895552876.html
是否可以在分支之间共享步骤并仍然运行分支特定的步骤?例如,开发和发布分支具有相同的构建过程,但上传到单独的S3存储桶。 我看到了这篇文章(Bitbucket Pipelines-多个分支具有相同的步骤),但它的步骤是相同的。
我试图建立一个jenkins多分支管道,在docker容器中运行我的所有代码验证步骤,然后构建docker映像并将其推出docker容器。 目前,我的 Jenkinsfile 看起来有点像这样(为了便于阅读,它精简了): 这里的问题是,我使用 dockerfile 代理的每个阶段,jenkins 都会尝试重建 docker 映像。这些阶段都被缓存了,但是发送构建上下文并实际处理所有内容仍然需要比我
问题内容: 我需要使用单个任务队列和单个结果队列来启动许多工作程序。每个工人都应该以不同的goroutine开始。我需要等到所有工作人员都将完成并且任务队列将为空后再退出程序。我已经准备了goroutine同步的小例子。主要思想是我们将排队的任务计数,并等待所有工人完成工作。但是当前的实现有时会遗漏值。为什么会发生这种情况以及如何解决问题?示例代码: 问题答案: 使用sync.WaitGroup等
我们有一个Kafka主题,有源源不断的数据。为了处理它,我们有一个无状态的Flink管道,它使用该主题并写入另一个主题。 我们是不是漏掉了什么?我们误会什么了吗?有没有更好的解决办法? 谢了!
问题内容: 我需要将应用程序日志共享到已安装的卷。我想将相同的卷装载到所有Docker容器以保留日志。可能吗?会影响在每个容器上运行的应用程序吗? 问题答案: 是的,您可以将同一位置作为卷添加到许多Docker容器。 另外,您可以将日志目录安装在实际上不运行任何应用程序的一个容器中,然后在其他容器中使用该容器中的卷,而不必在所有位置重复路径。 值得阅读Docker卷
在Ubuntu 20.04上运行新的Docker 20.10.1。此版本包括对主机的支持。码头工人。Linux上dockerd中的内部 我在使用SSL证书的容器中运行了一系列服务,我想使用Telegraf(稍后发送到Grafana仪表板)检查证书是否过期。 所有带有网络接口和Telegraf的服务都运行在同一个Docker主机上。所有服务都在自己的网桥网络中。我想在端口9000上从Telegraf