繁体   English   中英

如何在 Dockerfile 中的特定提交处结帐?

[英]How to checkout at particular commit in Dockerfile?

我正在为我的项目写一个 Dockerfile

RUN git clone https://github.com/CNA/contract.git --depth 1 --branch 20.0 /opt/CNA-contract

我想在特定提交时冻结代码。 在 Docker 中执行此类操作的最佳实践是什么? 我认为在扩建中相当容易,例如

git clone https://github.com/CNA/contract.git --depth 1 --branch 20.0 /opt/CNA-contract commit-SHA

最好在您的RUN中添加一些步骤,如“如何浅克隆具有深度 1 的特定提交? ”中所述,假设最近版本为 Git 2.24 或 mroe:

RUN \
mkdir repo && \
cd repo && \
git init . && \
git remote add origin <url> && \\
git fetch --depth 1 origin <sha1> && \\ 
git checkout FETCH_HEAD

这样,您只需获取您需要的提交。

如果您不在 Dockerfile 中运行git clone ,而是在主机上运行,那么您可以签出并构建您想要的任何提交。

# on the host, not in a Dockerfile
git clone https://github.com/CNA/contract.git
cd contract
git checkout 20.0
docker build -t cna/contract:20.0 .
git checkout main
docker build -t cna/contract:$(git rev-parse --short HEAD)

这种方法还避免了一些关于获取适当凭据以运行git clone命令的危险问题(该存储库不是公共的;您可以使用docker run从映像中获取私钥吗?),它支持构建“ t 实际上致力于源代码控制,它避免了 Docker 不会重复git clone命令的 Docker 层缓存的一些问题,即使存储库已更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM