最近給實驗室的Gitlab服務器開啟了CI功能玄渗,采用的是docker模式鳖目,每次都啟動一個全新的鏡像進行構建笨鸡。
為了對Python代碼進行風格檢查姜钳,每次在構建的時候,都需要先在啟動的容器中使用pip安裝flake8形耗。由于每次構建之間的環(huán)境相互隔離哥桥,所以pip的緩存也就完全沒有作用,每次都需要直接聯(lián)網(wǎng)下載相關的包來安裝激涤。
國內(nèi)的網(wǎng)絡大家都懂拟糕,下載新包的速度時好時壞,嚴重影響了構建的速度。在配置CI的時候,正好看到了有cache的選項翠订,遂決定啟用cache,不必每次都從網(wǎng)絡下載累澡。
首先根據(jù)網(wǎng)上查閱的資料梦抢,在.gitlab-ci.yml中配置如下:
image: python:3.6
cache:
paths:
- pip-cache
key: $CI_PROJECT_ID
# This is a basic example for a gem or script which doesn't use
# services such as redis or postgres
before_script:
- python -V # Print out python version for debugging
- export PIP_CACHE_DIR="pip-cache"
- mkdir -p pip-cache
- ls pip-cache
- pip install flake8
lint:
script:
- flake8 .
其中重點是cache部分般贼,該部分paths指定了要緩存的目錄,key指定了緩存的key(即只有key匹配時奥吩,才會啟用緩存)哼蛆。
在這里,我使用了當前目錄下的pip-cache目錄作為pip的緩存目錄霞赫,項目id作為key腮介,也就是本項目的所有構建都會共享這個目錄。
另一個重點是export PIP_CACHE_DIR="pip-cache"
這條命令端衰。這條命令設置了一個PIP_CACHE_DIR的環(huán)境變量叠洗,pip會根據(jù)這個環(huán)境變量甘改,將緩存放在我們指定的pip-cache目錄下。
配置完成后灭抑,啟動pipeline運行十艾,發(fā)現(xiàn)還是每次都會從網(wǎng)絡上下載Python的包。
經(jīng)過多次搜索后發(fā)現(xiàn)腾节,還需要對gitlab-ci-multi-runner進行配置忘嫉。
我是根據(jù)系統(tǒng)幫助,直接在Ubuntu倉庫里安裝的案腺,因此配置文件在/etc/gitlab-runner/config.toml
當中庆冕。
打開該文件,可以看到[runners.docker]部分中的volumes = ["/cache"]
這一條配置劈榨。根據(jù)我們對docker的了解访递,如果要進行持久化,需要將外部的一個目錄掛載到容器內(nèi)部鞋既,但是這里明顯沒有指定外部的目錄力九。
修改這一行為:
volumes = ["/root/build_cache:/cache:rw"]
也就是把外部的/root/build_cache目錄掛載到容器中的/cache目錄中,并且給予讀寫權限邑闺。這樣gitlab-runner每次創(chuàng)建緩存的時候跌前,都會在/cache中(默認配置,可以按照官網(wǎng)文檔修改)陡舅,也就是存到了宿主機的/root/build_cache目錄中抵乓。當啟動一個新的容器的時候,也會從宿主機的/root/build_cache中加載緩存文件靶衍。
最后灾炭,重新啟動pipeline,發(fā)現(xiàn)pip已經(jīng)可以成功使用緩存安裝需要的包了颅眶。
感謝您的閱讀蜈出!
本賬號已經(jīng)不再更新,更多文章請移步我的個人博客https://www.zacharyjia.me