欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

使用Github Action发布函数到阿里云serverless平台

发布时间:2024/9/3 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用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平台的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。