在持續集成的代碼構建中的耗時通常集中在2個部分,首先是從外部獲取構建所需的依賴以及代碼本身的編譯行為。通過使用Flow的自定義緩存能夠讓我們有效降低獲取依賴時的耗時。本文將介紹如何加速常見的編譯工具的構建效率。
Yarn構建加速
使用中國內地registry和mirror
使用中國內地registry倉庫避免由于海外網絡訪問導致的依賴下載緩慢的問題。
yarn config set registry https://npmmirror.com
對于構建中由于Building fresh packages導致構建慢的情況需要指定特定外部依賴的中國內地鏡像源:
yarn config set sass_binary_site "https://npmmirror.com/mirrors/node-sass/"
除了通過yarn config set指定依賴下載路徑以外,還可以通過.yarnrc進行配置。在項目根路徑中創建.yarnrc并配置以下內容:
registry "https://registry.npmmirror.com"
sass_binary_site "https://npmmirror.com/mirrors/node-sass/"
phantomjs_cdnurl "https://cdn.npmmirror.com/binaries/phantomjs"
electron_mirror "https://cdn.npmmirror.com/binaries/electron/"
sqlite3_binary_host_mirror "https://foxgis.oss-cn-shanghai.aliyuncs.com/"
chromedriver_cdnurl "https://cdn.npmmirror.com/binaries/chromedriver"
配置yarn全局緩存
設置緩存目錄,并在流水線自定義緩存中添加緩存目錄/root/.yarn配置。
# 設置全局緩存
yarn config set cache-folder ~/.yarn
# 構建中優先使用緩存中
yarn install --prefer-offline
通過以上命令設置緩存目錄,并確保下載依賴過程中優先使用本地緩存,可以最大限度減少由于外部網絡導致的依賴在下載緩慢的問題。
Npm構建加速
使用中國內地registry和mirror
或者直接使用cnpm。
對于使用npm的用戶可以創建.npmrc并設置以下內容:
registry="https://registry.npmmirror.com"
sass_binary_site="https://npmmirror.com/mirrors/node-sass/"
phantomjs_cdnurl="https://cdn.npmmirror.com/binaries/phantomjs"
electron_mirror="https://cdn.npmmirror.com/binaries/electron/"
sqlite3_binary_host_mirror="https://foxgis.oss-cn-shanghai.aliyuncs.com/"
chromedriver_cdnurl="https://cdn.npmmirror.com/binaries/chromedriver"
構建中使用全局緩存
構建時,使用以下命令設置npm的全局緩存路徑,并在流水線自定義緩存配置中添加/root/.npm緩存路徑,并使用以下命令安裝依賴包,優先從本地緩存獲取依賴包:
npm config set cache ~/.npm
npm install --prefer-offline --no-audit
Golang構建加速
使用go proxy
使用Goproxy從中國內地下載外部依賴:
export GOPROXY=https://goproxy.cn
添加go mod緩存
持久化Go Mod緩存,Flow中Go構建環境的默認緩存目錄是/go/pkg/mod。用戶需要在流水線自定義緩存中添加該緩存路徑即可。 在構建過程中將會優先使用/go/pkg/mod中的本地緩存,從而減少由于外部網絡請求導致的構建慢的問題。
Python構建加速
使用pypi鏡像
使用阿里云pypi鏡像。
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
添加pip依賴緩存
緩存pip本地依賴,流水線自定義緩存配置中添加緩存目錄/root/.cache/pip,確保pip install時優先從版本緩存中獲取依賴包。
鏡像構建加速
如果你的Dockerfile中FROM了dockerhub的鏡像或者其他海外鏡像,比如:
FROM nginx:1.19.1
.....
由于跨境網絡問題,這種Dockerfile的構建會不穩定或者比較慢,可以使用以下方式解決:將境外鏡像pull到本地,然后push到阿里云鏡像倉庫(cr.console.aliyun.com)的中國內地region(比如北京、上海等),然后修改您的Dockerfile中的FROM。比如:
docker pull nginx:1.19.1
docker tag nginx:1.19.1 registry.cn-beijing.aliyuncs.com/yournamespace/nginx:1.19.1
docker push registry.cn-beijing.aliyuncs.com/yournamespace/nginx:1.19.1
請確保容器鏡像服務的命名空間yournamespace。