只更新程式碼,然後釋出版本:基於 Serverless Devs 原子化操作阿里雲函式計算
作者 | Anycodes
眾所周知,隨著時間的發展,Serverless 命令列工具也逐漸的玩出了更多的花樣,就目前來看,常見的形態有兩種,一種是通
過 Yaml 來進行資源的描述,另外一種是純粹的命令列操作,而不依賴這些內容。
第一種透過 Yaml 來進行資源描述,其好處不言而喻,目前主流的 Serverless 開發者工具均是類似的模式,例如阿里雲的
Funcraft,著名的開源專案 Serverless Framework 等,透過 Yaml,使用者可以透過簡單的命令,進行復雜的操作,例如開發
者在 Yaml 中描述好服務、函式等配置,描述好程式碼位置,只需要 deploy 就可以將本地專案部署到線上,非常方便。但是這
有一個非常明顯的劣勢,在很多時候我們的企業管理者,給每個人分配的許可權是固定的,例如運維人員只能更新某些內容,開
發人員只能更新某些程式碼,某些負責可以釋出版本等,那麼這個時候”一把梭”的行為就顯得非常尷尬,想為開發者做更多,
但是有些開發者不需要你做更多,那麼”高階能力”和”原子能力”的平衡就顯得至關重要的。
第二種模式,雖然是不需要依賴 Yaml,在很多時候使用起來可能會稍微複雜一些,例如我們建立一個函式可能涉及到很多流
程:建立服務,建立函式,建立觸發器…,相對比上面所說的一條指令而言,確實複雜很多,但是這種無 Yaml 的模式,更適
合做原子操作,可以最大程度解決上述問題,同時這種做法也可以在一定程度上進行更多的擴充,例如某些本不需要依賴
Yaml 的行為:查詢服務列表,查詢函式列表……
所以這兩種模式各有優缺點,我們在使用的時候完全可以組合來使用,達到最大的一個生產效能。那麼一個新問題來了,以
阿里雲函式計算為例,如何同時擁有這兩種模式的使用方法呢?
其實 Serverless Devs 天然支援 Yaml 描述和非 Yaml 描述的能力,例如阿里雲函式計算的 FC 元件就是一個可以依靠 Yaml
描述進行資源操作的元件,而 FC-API 元件則是 API 相關的原子性操作。
本文將會以這樣一個案例/場景為例,為讀者介紹這兩者的使用方法:
1.透過 Serverless Devs 快速建立一個服務/函式/觸發器
2.透過無 Yaml 的模式對其中的程式碼部分進行單獨的更新
3.更新之後釋出一個版本
4.透過 Git+Github Action 實現一個程式碼自動化釋出和版本自動化釋出的能力
快速建立函式
我們只需要透過s init並且選擇阿里雲函式計算的 Python3 Http 函式即可:
建立完成之後,我們只需要進入到對應的資料夾,並且執行s deploy,即可將專案快速部署到線上。在進入到專案後,我們
可以在專案下看到一個s.yaml的檔案,這個檔案就是資源描述檔案:
其完整的描述:
https://github.com/devsapp/fc/blob/main/docs/Others/yaml.md
此時我們可以透過s deploy進行專案的部署:
部署完成,我們可以開啟系統分配給我們的域名,我們可以看到內容:
我們可以編輯index.py,將Hello world!變為Hello world Serverless Devs!
然後我們就要接觸一個新的元件 FC-API :
https://github.com/devsapp/fc-api
我們可以執行幫助文件:s cli fc-api -h:
此時我們需要明確的是,當我們執行s cli的時候,系統就不去讀 Yaml,而直接進行相關方法的呼叫。
如果我們對這個方法還是不清楚,我們可以:s cli fc-api updateFunction -h
此時我們只需要按照規範,填寫好地區,服務名,函式名,以及要更新的欄位即可:
```
s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-trigger-
function--code '{"zipFile": "./"}'
```
完成之後,我們可以再去看一下之前的頁面是否同步更新了:
此處可能有疑問,你的幫助文件寫的是:--code string [JSON String] The code of the function. The code must be
packaged into a ZIP file._你是怎麼知道傳遞--code '{"zipFile": "./"}'的?
因為在我們看幫助文件的時候,題已經提醒了我們這是一個 JSON String,同時在幫助文件最上面是有連結地址:
```_Usage_
```
s cli fc-api updateFunction
API Document: https://help.aliyun.com/document_detail/189986.html
Options
--region stringThe region of fc endpoint.
--access stringSpecify the key name.
--props stringThe json string of props.
--serviceName stringThe name of the service.
--functionName stringThe description of the function.
--code string[JSON String]The code of the function.The code must be packaged into a ZIP file.
```
```
>此時,我們可以開啟 https://help.aliyun.com/document_detail/189986.html:
![image]( https://user-images.githubusercontent.com/21079031/124550239-f5fb9900-de62-11eb-819b-9e662cb80
fe6.png)
![image]( https://user-images.githubusercontent.com/21079031/124550302-0ca1f000-de63-11eb-974e-9453449e5
25b.png)
>此時為了方便,Serverless devs 支援本地路徑,會幫助你進行打包等操作。
當然,我們還可以更刺激一些,修改其他內容,如單純修改一些 timeout:
```
s cli fc-api updateFunction —region cn-hangzhou —serviceName fc-deploy-service —functionName http-trigger-
function —timeout 70
```
![image]( https://user-images.githubusercontent.com/21079031/124550447-3bb86180-de63-11eb-836a-01d102a6
eab9.png)
透過無 Yaml 模式釋出版本
和上面一樣,我們可以用`s cli fc-api -h `檢視一下版本釋出的方法:`s cli fc-api publishVersion -h`
![image]( https://user-images.githubusercontent.com/21079031/124550575-715d4a80-de63-11eb-8182-bd154507
e19d.png)
嘗試拼接引數:
```
s cli fc-api publishVersion —region cn-hangzhou —serviceName fc-deploy-service —description “This is a test version”
```
得到結果:
![image]( https://user-images.githubusercontent.com/21079031/124550685-9ce03500-de63-11eb-95bf-ed59c494fd
7d.png)
CI/CD 元件的使用
當我們想要把上面只更新程式碼,釋出版本的能力整合到 CI/CD,或者某些自動化流程中,如何操作呢?
以 GithubAction 為例,我們可以直接執行`s cli cicd`:
![image]( https://user-images.githubusercontent.com/21079031/124550942-07917080-de64-11eb-8b57-d59eba0c
dc47.png)
接下來,我們對`./.github/workflow/serverless-devs.yml`進行自定義編輯:
```yaml
name: Serverless Devs Project CI/CD
on:
push:
branches: [ master ]
jobs:
serverless-devs-cd:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 12
registry-url:
- run: npm install
- run: npm install -g @serverless-devs/s
# 預設金鑰配置指令是阿里雲金鑰配置指令,更多可以參考:
# 如何透過 Github Action使用Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage
# Serverless Devs 的官網是透過 Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice
- run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.AccessKeyID}} --AccessKeySecr
et ${{secrets.AccessKeySecret}} -a default
- run: s cli fc-api updateFunction --region cn-hangzhou --serviceName fc-deploy-service --functionName http-
trigger-function --code '{"zipFile":"./"}'
- run: s cli fc-api publishVersion --region cn-hangzhou --serviceName fc-deploy-service
```
我們只是在最後加了兩個人 run,一個是釋出程式碼,一個是釋出版本,此時我們可以建立一個 Github 倉庫,嘗試一下:
建立完成之後,我們可以按照案例提醒,進行金鑰的配置:
# 預設金鑰配置指令是阿里雲金鑰配置指令,更多可以參考:
# 如何透過 Github Action 使用 Serverless Devs 做 CI/CD:http://short.devsapp.cn/cicd/github/action/usage
# Serverless Devs 的官網是透過 Serverless Devs 部署的: http://short.devsapp.cn/cicd/github/action/practice
```
接下來, 我們透過 git init 等一系列指令,完成程式碼推到倉庫:
此時,我們再次修改程式碼:
修改完成之後,我們將程式碼 push 到測試倉庫,可以看到,我們在 Action 中可以看到一個 workflow 在執行:
稍等片刻,當這個流程完成:
我們開啟之前的頁面,可以看到,網頁內容已經順利被更新:
# 總結
本文以阿里云為例,透過在 Github 上使用 Servelress Devs 單純對程式碼進行更新,並進行版本釋出,該流程是比較常見的,
也是比較通用的,希望讀者可以發揮想象力,將這個流程應用到自己的專案中。
(文章轉載自 Go Serverless)
Serverless Devs 參與的貢獻
Serverless Devs 的開源為國內外開發者提供了 Serverless 工具的新選擇,讓開發者可以以更短的路徑體驗到多雲 Serverless
產品,以更快的速度建立和部署 Serverless 應用,以更簡單和更自動化的方法進行專案管理/運維,未來期待更多開發者參
與共建。
目前程式碼已經在 Gitee(碼雲)和 GitHub 上正式開放:
- Github 地址:https://github.com/serverless-devs
- Gitee 地址:https://gitee.com/organizations/serverless-devs/projects
- Serverless Devs 官網:https://www.serverless-devs.com
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981534/viewspace-2780713/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何使用 Serverless Devs 部署靜態網站到函式計算Serverdev網站函式
- Serverless Devs 重大更新,基於 Serverless 架構的 CI/CD 框架:Serverless-cdServerdev架構框架
- 基於阿里雲Serverless函式計算開發的疫情資料統計推送機器人阿里Server函式機器人
- Serverless 在阿里雲函式計算中的實踐Server阿里函式
- 基於阿里雲函式計算實現AI推理阿里函式AI
- 一元建站-基於函式計算 + wordpress 構建 serverless 網站函式Server網站
- 基於信通院 Serverless 工具鏈模型的實踐:Serverless DevsServer模型dev
- 函式計算: 讓小程式開發進入 Serverless 時代函式Server
- 基於函式計算快速實現《為你寫詩》(阿里雲ECS)函式阿里
- Serverless 解惑——函式計算如何安裝字型Server函式
- Serverless 實戰 —— 函式計算 + Typescript 實踐Server函式TypeScript
- 阿里雲 EMAS Serverless 重磅釋出阿里Server
- 基於函式計算的 BFF 架構函式架構
- 你還在生產環境改程式碼麼?函式計算版本管理(三)使用別名進行灰度釋出函式
- 併發程式設計基礎與原子操作程式設計
- Fission:基於Kubernetes的Serverless函式框架Server函式框架
- 阿里雲 EMAS Serverless 升級釋出阿里Server
- TDengine 2.6 正式釋出,新增大量計算函式函式
- Serverless Devs 的官網是如何透過 Serverless Devs 部署的Serverdev
- 阿里雲聯合信通院釋出《基於雲端計算的數字化業務安全工程要求》阿里
- 似然函式與最大似然估計函式
- 基於Serverless雲函式站點監控的方法Server函式
- 亞馬遜雲科技全棧式Serverless,不止於計算亞馬遜全棧Server
- 函式計算工具鏈新成員——FunLocal釋出啦函式
- Serverless 解惑——函式計算如何訪問 Mongo 資料庫Server函式Go資料庫
- Serverless 解惑——函式計算如何訪問 Redis 資料庫Server函式Redis資料庫
- Serverless 解惑——函式計算如何訪問 MySQL 資料庫Server函式MySql資料庫
- Serverless 解惑——函式計算如何訪問 PostgreSQL 資料庫Server函式SQL資料庫
- 阿里雲 函式計算 域名配置問題阿里函式
- 基於函式計算一鍵部署簡易論壇函式
- 基於函式計算快速搭建Django Blog部落格函式Django
- 部署基於pythonwsgiweb框架的工程到函式計算PythonWeb框架函式
- 雲原生最佳實踐系列 5:基於函式計算 FC 實現阿里雲 Kafka 訊息內容控制 MongoDB DML 操作函式阿里KafkaMongoDB
- 函式計算工具鏈新成員 —— Fun Local 釋出啦函式
- 獨家對話阿里雲函式計算負責人不瞋:你所不知道的 Serverless阿里函式Server
- 阿里雲基於ALB實現灰度釋出阿里
- EMQX 多版本釋出、新增自定義函式功能MQ函式
- Serverless 解惑——函式計算如何訪問 SQL Server 資料庫Server函式SQL資料庫