使用Github Action发布函数到阿里云serverless平台
簡介: 本文簡述了如何通過自定義Github Action自動化部署云函數到阿里云serverless平臺中
阿里云提供了函數計算,即serverless支持。同時阿里云還提供了fun cli命令行工具方便項目驗證、發布等。
發布函數雖然只是一句命令行的事情,但是做到集成發布平臺還是需要準備對應的環境,配置和工具等,稍顯復雜。
在travis-ci中可以用shell腳本完成,但是要求nodejs環境。在從travis-ci切換到Github Action的時候直接拷貝shell腳本也能支持,但是Github Action支持Dockerfile模式,可以使用更簡單的方式來實現,同時更有利于復用。
?
Github Action主要有兩個方法支持自定義:
第一種是javascript路線(nodejs環境),第二種是dockerfile路線,支持直接run docker鏡像;
第二種使用覆蓋面更廣也更容易使用,特別是我對nodejs的調試一直不太熟練;
我們要構建的這個Github Action思路很簡單,提供一個node環境,預安裝fun的穩定版本,然后直接運行fun deploy就行了。
所有需要的參數要么通過ENV傳遞,要么通過input傳遞。
?
自定義Github Action
自定義的幾個主要步驟如下:
- 創建action.yml文件
- 創建Dockerfile和必要的其他文件,比如entrypoint.sh
- 創建README (發布到marketplace必要)
首先創建一個action.yml文件,這個文件的內容會展示到github action marketplace中。
示例如下:
name: "Aliyun Serverless Action" description: "GitHub Actions for Aliyun Serverless 🚀 Deploy function automatically." author: "Yunkun Huang" runs:using: "docker"image: "Dockerfile"args:- ${{ inputs.functionFolder }} branding:icon: "upload-cloud"color: "blue" inputs:functionFolder:description: "Folder name for function"required: falsedefault: "."這里inputs聲明了所需參數,branding主要定義在marketplace的展示,這里是藍色的“上傳到云”圖標。
然后準備Dockerfile。這個就比較直接了,安裝了fun cli以后拷貝entrypoint.sh即可。
FROM node:8RUN npm install -g @alicloud/fun@3.2.3COPY entrypoint.sh /entrypoint.sh ENTRYPOINT [ "/entrypoint.sh" ]entrypoint中稍微多一點內容
#!/bin/bashset -e # set -exfunction print_info() {echo -e "\e[36mINFO: ${1}\e[m" }FOLDER_NAME=$1cd "$FOLDER_NAME" print_info "use function in folder \"$FOLDER_NAME\""print_info 'show files' lsprint_info 'show fun client version' fun --versionprint_info 'start deploy function' fun deploy print_info 'deploy success'再加上README之后,所必要的文件就夠了。
在Github點擊release,勾選發布到marketplace(https://github.com/marketplace/actions/aliyun-serverless-action),效果如下圖:
使用的話在github action的yml直接寫
uses: htynkn/aliyun-serverless-action@master env:ACCOUNT_ID: ${{ secrets.ACCOUNT_ID }}REGION: cn-shanghaiACCESS_KEY_ID: ${{ secrets.ACCESS_KEY_ID }}ACCESS_KEY_SECRET: ${{ secrets.ACCESS_KEY_SECRET }}完整例子參考:https://github.com/htynkn/aliyun-serverless-action/blob/master/.github/workflows/test.yml
?
優化
我們自定義的Github Action就這么完成了,這里還有不少地方可以優化。
首先是項目自己的CI和測試,先說CI,因為項目設計到了Dockerfile和bash腳本,那么我們需要關心
- Dockerfile能否構建成功
- bash腳本檢測
- Dockerfile lint
示例如下:
name: cion:pull_request:types: [opened, synchronize]paths-ignore:- "**.md"push:paths-ignore:- "**.md"branches:- masterjobs:build:runs-on: ubuntu-18.04steps:- uses: actions/checkout@v2- name: buildenv:DOCKER_IMAGE: docker.pkg.github.com/${{ github.repository }}/action:latestrun: |docker build . --file Dockerfile --tag ${DOCKER_IMAGE}shellcheck:runs-on: ubuntu-18.04steps:- uses: actions/checkout@v2- name: shellcheckrun: shellcheck ./entrypoint.shhadolint:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: burdzwastaken/hadolint-action@1.5.0env:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}HADOLINT_ACTION_DOCKERFILE_FOLDER: .自動化測試我們直接部署一個函數到阿里云,然后驗證。為了方便就是用HTTP觸發器那種,部署完成后直接請求
name: teston:push:paths-ignore:- "**.md"branches:- masterjobs:deploy:runs-on: ubuntu-18.04steps:- uses: actions/checkout@v2- uses: actions/setup-node@v1with:node-version: "8.x"- run: cd test && npm install- uses: htynkn/aliyun-serverless-action@masterenv:ACCOUNT_ID: ${{ secrets.ACCOUNT_ID }}REGION: cn-shanghaiACCESS_KEY_ID: ${{ secrets.ACCESS_KEY_ID }}ACCESS_KEY_SECRET: ${{ secrets.ACCESS_KEY_SECRET }}with:functionFolder: test/- run: wget https://135603.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/http-demo/nodejs8/ -O response.json- run: test -f response.json運行效果:
?
總結
Github Action配合Github自身使用確實很方便,提供自定義的手段擴大了使用范圍也降低了門檻。如果部署中需要一些私密信息,可以存儲在secrets中,通過ENV傳入。不敏感的信息通過input傳入即可。
總結
以上是生活随笔為你收集整理的使用Github Action发布函数到阿里云serverless平台的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一次看完2019技术好文,快收藏!
- 下一篇: 深度前沿:对话管理模型研究最新进展