我需要的是在存储库中构建一个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
请注意,这将上载图像的所有层和依赖项。它可能需要相当长的时间才能执行,因此可能不是最佳解决方案。