使用CodeArts發布OBS,函數工作流刷新CDN緩存

華爲雲開發者聯盟 發佈 2024-01-14T23:43:26.991681+00:00

上次通過OBS和CDN部署來Hexo網站,但是每次我們不可能都自己編譯然後在上傳到OBS,不然太麻煩了,所以我們需要構建流水線,通過PUSH Markdown來發布文章,這樣方便又簡單,我們大概流程如此。

本文分享自華為雲社區《使用軟體開發生產線CodeArts發布OBS,函數工作流刷新CDN緩存-雲社區-華為雲》,作者:熊大不大 。

上次通過OBS和CDN部署來Hexo網站,但是每次我們不可能都自己編譯然後在上傳到OBS,不然太麻煩了,所以我們需要構建流水線,通過PUSH Markdown來發布文章,這樣方便又簡單,我們大概流程如此。

來廢話不多說開干。

第一步gitee上面擁有一份Hexo代碼

這個不用多說,申請代碼倉庫,提交自己博客代碼。

第二步華為雲申請CodeArts

這個是免費的,新建一個免費空間最多5人使用,自己使用即可地址 CodeArts地址,先點擊新建項目,選擇DevOps全流程示例項目,輸入項目名稱點擊OK,返回頁面在點擊進去項目,能看到有很多項目流程菜單。

第三步新建流水線

新建流水線之前我們先新建編譯構建

  1. 新建任務,名字取blog
  2. 選擇源碼源為碼雲,第一次需要授權,Endpoint實例新建,根據提示授權即可
  3. 選擇代碼倉庫,在選擇分支下一步選擇NPM構建然後修改腳本
export PATH=$PATH:~/.npm-global/bin

#設置緩存目錄

npm config set cache /npmcache

npm config set registry https://repo.huaweicloud.com/repository/npm/

npm config set disturl https://repo.huaweicloud.com/nodejs

npm config set sass_binary_site https://repo.huaweicloud.com/node-sass/

npm config set phantomjs_CDNurl https://repo.huaweicloud.com/phantomjs

npm config set chromedriver_cdnurl https://repo.huaweicloud.com/chromedriver

npm config set operadriver_cdnurl https://repo.huaweicloud.com/operadriver

npm config set electron_mirror https://repo.huaweicloud.com/electron/

npm config set python_mirror https://repo.huaweicloud.com/python

npm config set prefix '~/.npm-global'

#如需安裝node-sass

#npm install node-sass --verbose

#加載依賴

npm install --verbose

#默認構建 以上都是系統默認的 才是自己修改 tar.gz就當做備份

npm run build

tar -zcvf blog.tar.gz public

#這個生成zip包給OBS

cd public

zip -r blog.zip *

4.需要新增文件上傳到OBS上去,主要配置如下:產物路徑配置,桶名配置。

然後保存執行,看是否有zip產物到OBS桶下面

5.新建流水線配置源,然後新增任務,然後把剛才的編譯構建的任務添加接口,部署不需要,因為這裡是編譯完畢直接上傳obs桶的

第四步開啟數據處理,把zip文件自動解壓到桶目錄下

如圖下:

新建規則,事件選擇ObjectCreate,前綴是包名全程不含後綴,後綴默認zip,解壓路徑默認,IAM委託根據連結新建一個只容許操作OBS的全新。

清除CDN緩存, 使用函數工作流來

1.華為雲新增一個函數工作流,函數類型是事件函數、區域我選廣州、函數名自己取blogDeploy,運行時我選來14.18,現在有最新版本16了。

2.編寫代碼

第一個文件index.js

const refreshTask = require("./refreshTask")

exports.handler = async (event, context) => {

const logger = context.getLogger();

const urls = context.getUserData('urls')

logger.info(JSON.stringify(event))

logger.info('刷新的地址', urls)

const token = context.getToken()

const t = await refreshTask(token, urls.split(';'))

const output =

{

'statusCode': 200,

'headers':

{

'Content-Type': 'application/json'

},

'isBase64Encoded': false,

'body': JSON.stringify(t),

}

return output;

}

第二個文件 refreshTask.js

const https = require("https");

function refreshTask(token, urls) {

return new Promise((resovle) => {

const data = JSON.stringify({

refresh_task: {

type: "directory",

urls

}

});

const options = {

port: 443,

hostname: "cdn.myhuaweicloud.com",

path: "/v1.0/cdn/content/refresh-tasks",

method: "POST",

headers: {

"X-Auth-Token": token,

"Content-Type": "application/json",

"Content-Length": data.length

}

};

const req = https.request(options, (response) => {

let todo = "";

// called when a data chunk is received.

response.on("data", (chunk) => {

todo += chunk;

});

// called when the complete response is received.

response.on("end", () => {

console.log(JSON.parse(todo));

resovle(JSON.parse(todo))

});

});

req.write(data);

req.on("error", (error) => {

console.log("Error: " + error.message);

});

})

}

module.exports = refreshTask;

3.設置環境變量和觸發器,環境變量設置為urls,值為https://www.webfan.cn/;https://webfan.cn/你需要刷新你的域名。

觸發器設置為OBS觸發,桶名:放博客的桶,事件是ObjectCreated,名字自取,前綴index,後綴html,我們只識別index.html即可。

4.設置權限託管,我們OBS需要獲取token來請求CDN服務,所以需要委託代理授權。

點擊權限—創建委託,委託名字自己取,委託類型選雲服務,雲服務選擇搜索函數工作流,持續時間永久。

然後下一步選擇授權項目CDN RefreshAndPreheatAccess,點擊完成,可以查看到自己權限可以使用 CDN RefreshAndPreheatAccess。

然後在選擇委託保存。

然後在自己配置測試OBS。

查看日誌

好來一個完整的發布流程完整來,在本地我們寫來一份MD,然後通過PUSH之後,過幾分鐘則可以看到自己寫的內容已經自動部署到OBS了,然後網站自動刷新緩存,非常方便。

關注 點擊下方,第一時間了解華為雲新鮮技術~

華為雲博客_大數據博客_AI博客_雲計算博客_開發者中心-華為雲

關鍵字: