Bitbucket管道中本地构建的Docker映像



我需要的是在存储库中构建一个Dockerfile作为映像,并将其用作下一步的映像。

我已经尝试了下面的Bitbucket管道配置;构建";步骤中,它的缓存中似乎没有图像(在上一步中构建的(。

pipelines:
branches:
main:
- step:
name: Docker Image(s)
script:
- docker build -t foo/bar .docker/composer 
services:
- docker
caches:
- docker
- step:
name: Build
image: foo/bar
script:
- echo "Hello, World"
- composer --version
services:
- docker
caches:
- docker

我已经尝试了下面StackOverflow问题的答案,但该问题中的上下文是在下面的步骤中推送图像。这与使用为步骤本身构建的图像无关。

Bitbucket管道使用上一步中本地构建的图像

当前管道中存在一些概念错误。在给你一些可能的解决方案之前,让我先介绍一下这些问题。

澄清

缓存

Bitbucket Pipelines使用cache关键字在多个管道中持久化数据。虽然它也将在各个步骤中持续存在,但主要用例是在单独的构建中使用数据。缓存需要7天才能过期,因此在这7天内不会用新数据进行更新。您可以手动删除主管道页面上的缓存。如果要在同一管道中跨步骤传输数据,则应使用artifacts关键字。

Docker服务

只要您想让docker守护进程可用于您的构建,就只需要使用docker服务。最常见的情况是当您需要在脚本中使用docker命令时。在你的第二步中,你不需要这个。所以它不需要docker服务。

解决方案1-合并步骤

组合这些步骤,并使用docker run命令在创建的映像中运行composer

pipelines:
branches:
main:
- step:
name: Docker image and build
script:
- docker build -t foo/bar .docker/composer 
# Replace <destination> with the working directory of the foo/bar image.
- docker run -v $BITBUCKET_CLONE_DIR:<destination> foo/bar composer --version
services:
- docker

解决方案2-使用DockerHub的两个步骤

这个例子保持了两步走的方法。在这种情况下,您将把foo/bar映像推送到Dockerhub中的公共存储库。然后,管道将把它拉到下一步中使用。

pipelines:
branches:
main:
- step:
name: Docker Image(s)
script:
- docker build -t foo/bar .docker/composer 
- docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASSWORD
- docker push foo/bar
services:
- docker
- step:
name: Build
image: foo/bar
script:
- echo "Hello, World. I'm running insider of the previously pushed foo/bar container"
- composer --version

如果您想使用私有存储库,可以将第二步替换为:

...
- step:
name: Build
image: 
name: foo/bar
username: $DOCKERHUB_USERNAME
password: $DOCKERHUB_PASSWORD
email $DOCKERHUB_EMAIL
script:
- echo "Hello, World. I'm running insider of the previously pushed foo/bar container"
- composer --version

扩展phod的答案。如果你真的想要两个步骤,你可以将图像从一个步骤转移到另一个步骤。

pipelines:
branches:
main:
- step:
name: Docker Image(s)
script:
- docker build -t foo/bar .docker/composer
- docker image save foo/bar -o foobar.tar.gz
services:
- docker
caches:
- docker
artifacts:
- foobar.tar.gz
- step:
name: Build
script:
- docker image load -i foobar.tar.gz
- docker run -v $BITBUCKET_CLONE_DIR:<destination> foo/bar composer --version
services:
- docker

请注意,这将上载图像的所有层和依赖项。它可能需要相当长的时间才能执行,因此可能不是最佳解决方案。

相关内容

  • 没有找到相关文章

最新更新