我正在為我的專案撰寫一個 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
uj5u.com熱心網友回復:
最好在您的 中添加幾個步驟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
這樣,您只獲取所需的提交。
uj5u.com熱心網友回復:
如果您不在git cloneDockerfile 中運行,而是在主機上運行,??那么您可以檢出并構建您想要的任何提交。
# 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用來從映像中獲取私鑰嗎?),它支持構建實際上并未提交的內容源代碼控制,它避免了 Docker 層快取的一些問題,git clone即使存盤庫已更改,Docker 也不會重復命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387327.html
