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

时间:2018-01-24 22:39:04

标签: git docker github build docker-compose

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

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

version: '3'
services:
  web:
    build: https://${GITHUB_ACCESS}:@github.com/mycompany/web.git#${COMMIT_SHA}

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

ERROR: error fetching: error: no such remote ref <commit sha>
: exit status 128

我确信sha存在,并且我已经和其他几个人一起尝试过以确定。我在这里弄错了语法,或者docker-compose不支持引用特定的提交吗?

1 个答案:

答案 0 :(得分:1)

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

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

      

    我确定sha存在

    只需仔细检查

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

  • 如果您的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

示例1-一定要根据特定的提交进行构建

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

GIT_COMMIT_SHA=d377983a14b214fcae4b8e34357761282aca788f

并将我们的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

此处生成的build:网址应为https://github.com/nginxinc/docker-nginx.git#d377983a14b214fcae4b8e34357761282aca788f:stable/alpine