流水線任務每次運行時,會調度一個全新的執行個體。使用者需要拉取用於構建的代碼以及構建所需要的依賴。拉取依賴的時間過久,會導致流水線任務執行出現構建慢或逾時失敗等問題。社區提供基於Object Storage Service實現的快取區外掛程式,用於解決拉取依賴慢、構建逾時等問題。本文介紹如何基於OSS快取區外掛程式加速構建。
快取區外掛程式使用
Serverless-cd社區提供快取區外掛程式,並針對Serverless應用中心的特性進行最佳化,使用者只需指定用於緩衝儲存的OSS Bucket,即可使用快取區外掛程式。快取區外掛程式會在指定或預設的OSS Bucket中,按照指定的Key檢索讀取並更新緩衝內容。
外掛程式執行完畢時,如果緩衝Key命中,則緩衝Key對應的檔案內容將會被下載到本地指定路徑。
引擎執行完畢時,本地指定路徑的檔案內容,將被上傳至OSS Bucket。
在執行內容中定義OSS緩衝配置
在流水線、流水線模板或工作範本中,均可以在執行內容中定義OSS緩衝配置。樣本如下。
---
# 提交流水線執行
kind: Pipeline
name: "p-<% .git.shortCommitId %>-<% .currentTimestampMs %>"
# 描述資訊
description: cached pipeline
spec:
context:
data:
# 應用中心緩衝配置,如果不提供,engine會自動在任務節點調度的地區初始化
# 預設的Bucket名稱為: serverless-cd-cache-${region-id}-<% .accountId %>。
cacheConfig:
# 採用OSS作為緩衝,如果不指定,平台會自動初始化
# 建議交給平台自動初始化,因為工作節點可能被調度到與指定OSS不同的地區
# 對於GitHub的代碼倉庫,工作節點以及對應的OSS Bucket在新加坡區地區(ap-southeast-1)
# 對於GitLab、Codeup、Gitee的代碼倉庫,工作節點以及對應的OSS Bucket在杭州地區(cn-hangzhou)
oss:
# 用於緩衝的BucketName,如果不存在,engine不會自動初始化
bucketName: serverless-cd-cache-ap-southeast-1-<% .accountId %>
# Bucket所在的地區,不建議跨地區拉取緩衝
regionId: ap-southeast-1
templateName: mytemplate-<% .git.branch %>
---在Steps中使用快取區外掛程式
在流水線模板或工作範本中,可以通過執行內容Steps,使用快取區外掛程式。需要特別指出的是,credentials資訊可以不指定,外掛程式會自動使用使用者為應用中心授權的角色許可權。樣本如下。
---
kind: PipelineTemplate
name: mytemplate-<% .git.branch %>
description: cached pipelinetemplate
spec:
context:
data:
envName: test
deployFile: s.yaml
tasks:
# 構建前檢查
- name: pre-check
context:
data:
displayName: "前置檢查"
enable: true
steps:
- plugin: "@serverless-cd/checkout"
- plugin: "@serverless-cd/s-setup"
- run: s plan --local -o json
taskTemplate: serverless-runner-task
runAfters: []
- name: pre-check-approval
context:
data:
dingdingNotification:
enable: false
enable: true
taskTemplate: need-approval
runAfters:
- name: pre-check
# 構建並部署
- name: build-and-deploy
context:
data:
enable: true
steps:
- plugin: "@serverless-cd/checkout"
- plugin: "@serverless-cd/s-setup"
- plugin: "@serverless-cd/cache"
inputs:
# 定義緩衝的唯一識別碼,可以將其與應用或Git版本等資訊關聯起來
# 也可以使用"cache-${{hashFile('./package.json')}}"
# 通過本地檔案的散列值計算緩衝的唯一識別碼
# 緩衝在Bucket中對應的檔案路徑是cache-home/${key},例如本樣本
# 在Bucket中緩衝路徑為cache-home/cache-<% .appName %>
key: "cache-<% .appName %>"
# 按照當前構建的工具要求,配置緩衝的路徑
# 例如,對於Node.js,可以將預設的~/.npm作為流水線應用緩衝的路徑
path: ~/.npm
# 執行s-deploy
- run: |
set -e
s deploy -t --use-local --assume-yes --skip-push
echo "Deploy by Serverless Devs success."
taskTemplate: serverless-runner-task
runAfters:
- name: pre-check-approval
---緩衝路徑
對於不同的構建工具,實際需要配置的緩衝路徑可能不同。具體可以按下表或對應的工具說明來判斷。
管理工具 | 緩衝路徑 |
Maven | ~/.m2 |
Gradle | ~/.gradle |
NPM | ~/.npm |
Yarn | ~/.yarn |
gomod | $GOPATH/pkg/mod |
其他緩衝(包括pip3) | ~/.cache |
本地製作緩衝
如果構建依賴源服務效能過差,或由於安全問題無法從雲上拉取到相關依賴,可以結合ossutils工具。利用本地開發機的緩衝內容,上傳一份緩衝到Object Storage Service,並在流水線中使用。
您也可以登入Object Storage Service控制台,將本地的緩衝,例如~/.npm,上傳至Object Storage Service對應的路徑。
樣本如下。
# 使用ossutils製作用於雲上構建的緩衝,將本地的npm緩衝拷貝至Object Storage Service
# 自動建立的Bucket,對應的URL為serverless-cd-${region-id}-cache-${uid}.oss-${region-id}.aliyuncs.com
# 對於GitHub上的代碼倉庫,工作節點以及對應的OSS Bucket應該部署在新加坡區地區(ap-southeast-1)
# 對於GitLab、Codeup、Gitee上的代碼倉庫,工作節點以及對應的OSS Bucket應該部署在杭州地區(cn-hangzhou)
./ossutil64 cp -r ~/.npm oss://${bucket_url}/cache-home/${cache_key}