Bitbucket Pipeline 中本地构建的 Docker 镜像

Jul*_*tel 8 bitbucket docker bitbucket-pipelines

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

我已尝试下面的 Bitbucket Pipeline 配置,但在“构建”步骤中,其缓存中似乎没有图像(在上一步中构建)。

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
Run Code Online (Sandbox Code Playgroud)

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

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

pho*_*hod 5

您当前的流程中存在一些概念性错误。在给您一些可能的解决方案之前,让我先回顾一下这些内容。

澄清

缓存

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

码头服务

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

解决方案 1 - 组合步骤

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

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
Run Code Online (Sandbox Code Playgroud)

解决方案 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
Run Code Online (Sandbox Code Playgroud)

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

...
      - 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
Run Code Online (Sandbox Code Playgroud)