[英]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.