如何在 Bitbucket Pipelines 中使用 docker compose V2

N1n*_*ngu 1 docker-compose bitbucket-pipelines

传统上,我一直在发行

pip install docker-compose
Run Code Online (Sandbox Code Playgroud)

我的管道脚本中有关需要它的步骤的说明,通常用于集成测试。

这很方便,因为它可以完美地与 Bitbucket 的 docker 服务提供的 docker 二进制文件一起运行,并且受益于 pip 缓存,因为我已经在这些步骤中使用了 python 图像。但我宁愿使用最新的软件,所以我正在寻找安装 docker-compose V2 的机制。

理想情况下,解决方案应该

  • 不安装另一个 docker 二进制文件,而是重用 Bitbucket 的 docker 服务提供的二进制文件
  • 不需要特定的运行时(与需要 python 的 V1 不同)
  • 受益于某种缓存,以避免在每个管道上下载撰写插件。

有人解决这个问题吗?你的经验是什么?

N1n*_*ngu 5

让它工作的一种方法是从 github 下载最新版本,将其放入 ~/.docker/cli-plugins 并缓存此文件夹。

definitions:
  caches:
    docker-cliplugins: ~/.docker/cli-plugins
  yaml-anchors:
    - &setup-docker-compose-latest-script >-
        wget --no-verbose --no-clobber https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 --output-document ~/.docker/cli-plugins/docker-compose
        || true
        ; chmod a+x ~/.docker/cli-plugins/docker-compose
        && ln --symbolic ~/.docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
pipelines:
  default:
    - step:
        services: [docker]
        caches: [docker-cliplugins]
        script:
          - *setup-docker-compose-latest-script
          - docker compose version
Run Code Online (Sandbox Code Playgroud)

这需要wget --no-clobber得益于缓存。

理想情况下,这可以通过管道以可重用的方式完成,就像使用“设置”github 操作一样。但因为管道仅安装克隆目录而不是整个代理,所以这里有这个 yaml 锚点。