在Dockerfile中使用git pull时如何缓存依赖项

时间:2019-05-01 17:33:44

标签: docker ssh sha1 sha

说我们在Docker映像中有这个了

m,a,i,n

我们需要git pull才能始终运行。但是,如果package.json不变,则无需重新安装。

我有两个问题-如何使git pull始终运行?我相信我们可以使用RUN git clone <url> RUN git pull RUN npm install

但是,如果git pull始终运行,则根据docker,--build-arg命令也将运行。

我们可以做的一件事是使用一些自定义逻辑来比较package.json文件的sha-sum。

npm install

有人知道如何使用Docker吗? 之所以我们在Docker中而不是在容器外部执行git并将文件复制到容器中,是为了使Jenkins更易于使用。

1 个答案:

答案 0 :(得分:0)

通常,如果我们将代码从主机复制到映像,则可以使用此技巧来缓存依赖项:

import bs4
import copy


test = '<div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup><tbody><tr><th class="confluenceTh">Run</th><th class="confluenceTh">Date</th><th class="confluenceTh">Version</th><th class="confluenceTh">Model</th><th class="confluenceTh">OverallPrec</th><th class="confluenceTh">OverallRec</th><th class="confluenceTh"><span>PersonPrec</span></th><th class="confluenceTh"><span>Personrec</span></th><th class="confluenceTh">AnimalF1</th><th class="confluenceTh">VehicleF1</th></tr><tr><td class="confluenceTd">PR-191</td><td class="confluenceTd"><span>15,3/12/19,15:30</span></td><td class="confluenceTd"><span>1.2.191_abcdefg</span></td><td class="confluenceTd"><span>rfcn_dcn_0221</span></td><td class="confluenceTd"><span>0.95</span></td><td class="confluenceTd"><span>0.95</span></td><td class="confluenceTd"><span>0.98</span></td><td class="confluenceTd"><span>0.93</span></td><td class="confluenceTd"><span>0.85</span></td><td class="confluenceTd"><span>0.85</span></td></tr></tbody></table></div><div class="table-wrap"><table class="confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><th class="confluenceTh">Col1</th><th class="confluenceTh">Col2</th><th class="confluenceTh">Col3</th><th class="confluenceTh"><p>Col4</p></th></tr><tr><td colspan="1" class="confluenceTd">1</td><td colspan="1" class="confluenceTd">2</td><td colspan="1" class="confluenceTd">3</td><td colspan="1" class="confluenceTd">4</td></tr></tbody></table></div>'

soup = bs4.BeautifulSoup(test)
tbl = soup.findAll('table')
table_body = tbl[-1].find('tbody') #select last table
rows = table_body.find_all('tr')

new_row = copy.deepcopy(rows[-1]) #select last row, and make a copy

#mutate that copy
cols = new_row.find_all('td')
new_data = [2, 3, 4, 5]
for col, data in zip(cols, new_data):
    col.string = str(data)

table_body.append(new_row) #append at the end of last table selected earlier

with open(r"D:\python\html.html","w") as f:
    f.write(soup.prettify())

,并且仅在package.json文件已更改的情况下运行COPY package.json . RUN npm install COPY . . 。 但是,如果我们在Dockerfile中执行git pull,则有些不同,但是我们可以这样做:

npm install

对于bitbucket,URL为:

RUN git clone git@github.com:ORESoftware/live-mutex.git
ADD https://raw.githubusercontent.com/ORESoftware/live-mutex/master/package.json package.json
RUN npm install
RUN git fetch origin/master
RUN git checkout master