gitlab项目的绝对路径



我有一个自我管理的GitLab实例,我的一个项目有一个包含3个子目录的文件夹,这3个子目录有一个Dockerfile

我所有的Dockerfile都有一个grep命令从位于根目录下的CHANGELOG.md获取最新版本。

我尝试了这样的东西回去2步,但它不工作(grep: ../../CHANGELOG。md:没有这样的文件或目录)

Dockerfile:

grep -m 1 '^## v.*$' "../../CHANGELOG.md"

例子:

链接:

https://mygitlab/project/images/myproject

回购内容:

.
├──build
├──image1
├──image2
├──image3
├──CHANGELOG.md

gitlab-ci.yaml

script:
- docker build --network host -t $VAL_IM ./build/image1
- docker push $VAL_IM

问题发生在我构建图像时。

docker build——network host -t $VAL_IM ./build/image1

这里,您已经将构建上下文设置为./build/image1——构建不能访问构建上下文之外的目录或文件。还请记住,如果您在docker构建中使用RUN,它只能访问已经在容器内复制的文件(并且如前所述,您不能在构建上下文之外复制文件!),因此这并不完全像所说的那样有意义。

如果你使用这种版本控制策略,你可能想要做的是在调用docker build之前执行grep命令作为GitLab作业的一部分,并将版本作为构建参数传入。

在Dockerfile中添加ARG:

FROM # ...
ARG version
# now you can use the version in the build... eg:
LABEL com.example.version="$version"
RUN echo version is "$version"

那么你的GitLab作业可能是这样的:

script:
- version=$(grep -m 1 '^## v.*$' "./CHANGELOG.md")
- docker build --build-arg version="${version}" --network host -t $VAL_IM ./build/image1
- docker push $VAL_IM

最新更新