如何在docker-compose远程github构建中指定commit

mel*_*r55 9 git build github docker docker-compose

我想Dockerfiles在github上找到的远程项目中使用构建服务.这是一个端到端的测试框架,所以我需要能够指定我想要构建的特定提交.我在尝试弄清楚如何提取特定提交时遇到了很多困难.

我有一个docker compose文件,看起来像这样:

version: '3'
services:
  web:
    build: https://${GITHUB_ACCESS}:@github.com/mycompany/web.git#${COMMIT_SHA}
Run Code Online (Sandbox Code Playgroud)

如果我省略,上述工作正常#${COMMIT_SHA}.不幸的是,如果我为我所关心的特定提交包含sha,我会收到以下错误:

ERROR: error fetching: error: no such remote ref <commit sha>
: exit status 128
Run Code Online (Sandbox Code Playgroud)

我确信沙存在,我已经和其他几个人一起尝试过以确定.我在这里得到的语法错误,或者docker-compose不支持引用特定的提交?

mku*_*gla 2

当你犯错时ERROR: error fetching: error: no such remote ref <commit sha>: exit status 128,那么你肯定遇到了语法问题。就您的情况而言,可能的原因很少。

  • GITHUB_ACCESS|| GIT_COMMIT_SHA环境变量没有设置
  • GIT_COMMIT_SHA设置为无效sha值。

    我确信煞存在

    只需仔细检查

您可以在其片段部分中配置 Git URL,并用冒号分隔:。第一部分表示 Git 将签出的引用,可以是分支、标签或提交 SHA。所以是的,docker-compose确实支持引用特定的提交。第二部分表示存储库内将用作构建上下文的子目录。仅当您的 docker 文件不在存储库根目录中时才需要这样做。有效的 Git URL 模式可以是 Git 本身认为有效的任何内容。请参阅其核心中的此文件以供参考。

  • 如果你Dockerfile不在存储库根目录中,你会得到ERROR: Cannot locate specified Dockerfile: Dockerfile

我使用nginxinc/docker-nginx存储库作为示例。此存储库中有多个 docker 文件,因此假设我们要基于Dockerfile存储库子目录中的找到的内容构建映像stable/alpine

实施例1

master在此示例中,让我们从分支构建 docker 镜像

version: '3'
services:
  web:
    image: web:latest
    build: https://github.com/nginxinc/docker-nginx.git#master:stable/alpine
Run Code Online (Sandbox Code Playgroud)

示例 1 - 根据特定提交构建它

我添加.env文件,而您的变量很可能是在持续集成环境中设置的。

GIT_COMMIT_SHA=d377983a14b214fcae4b8e34357761282aca788f
Run Code Online (Sandbox Code Playgroud)

并将我们的更改docker-compose.yaml

version: '3'
services:
  web:
    image: web:${GIT_COMMIT_SHA}
    build: https://github.com/nginxinc/docker-nginx.git#${GIT_COMMIT_SHA}:stable/alpine
Run Code Online (Sandbox Code Playgroud)

这里生成的build:网址应该是https://github.com/nginxinc/docker-nginx.git#d377983a14b214fcae4b8e34357761282aca788f:stable/alpine