使用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: false
    default: "."

这里inputs声明了所需参数,branding主要定义在marketplace的展示,这里是蓝色的“上传到云”图标。

然后准备Dockerfile。这个就比较直接了,安装了fun cli以后拷贝entrypoint.sh即可。

FROM node:8

RUN npm install -g @alicloud/fun@3.2.3

COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]

entrypoint中稍微多一点内容

#!/bin/bash

set -e
# set -ex

function print_info() {
    echo -e "\e[36mINFO: ${1}\e[m"
}

FOLDER_NAME=$1

cd "$FOLDER_NAME"
print_info "use function in folder \"$FOLDER_NAME\""

print_info 'show files'
ls

print_info 'show fun client version'
fun --version

print_info 'start deploy function'
fun deploy
print_info 'deploy success'

再加上README之后,所必要的文件就够了。

在Github点击release,勾选发布到marketplace(https://github.com/marketplace/actions/aliyun-serverless-action),效果如下图:

github-action-marketplace.png

使用的话在github action的yml直接写

uses: htynkn/aliyun-serverless-action@master
env:
  ACCOUNT_ID: ${{ secrets.ACCOUNT_ID }}
  REGION: cn-shanghai
  ACCESS_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: ci

on:
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - "**.md"
  push:
    paths-ignore:
      - "**.md"
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-18.04

    steps:
      - uses: actions/checkout@v2
      - name: build
        env:
          DOCKER_IMAGE: docker.pkg.github.com/${{ github.repository }}/action:latest
        run: |
          docker build . --file Dockerfile --tag ${DOCKER_IMAGE}
  shellcheck:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
      - name: shellcheck
        run: shellcheck ./entrypoint.sh

  hadolint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: burdzwastaken/hadolint-action@1.5.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          HADOLINT_ACTION_DOCKERFILE_FOLDER: .

自动化测试我们直接部署一个函数到阿里云,然后验证。为了方便就是用HTTP触发器那种,部署完成后直接请求

name: test

on:
  push:
    paths-ignore:
      - "**.md"
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-18.04

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: "8.x"
      - run: cd test && npm install
      - uses: htynkn/aliyun-serverless-action@master
        env:
          ACCOUNT_ID: ${{ secrets.ACCOUNT_ID }}
          REGION: cn-shanghai
          ACCESS_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-deploy-example.png

总结

Github Action配合Github自身使用确实很方便,提供自定义的手段扩大了使用范围也降低了门槛。如果部署中需要一些私密信息,可以存储在secrets中,通过ENV传入。不敏感的信息通过input传入即可。

参考

https://help.github.com/en/actions/automating-your-workflow-with-github-actions/building-actions

https://github.com/htynkn/aliyun-serverless-action

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
2月前
|
机器学习/深度学习 人工智能 Serverless
吉利汽车携手阿里云函数计算,打造新一代 AI 座舱推理引擎
当前吉利汽车研究院人工智能团队承担了吉利汽车座舱 AI 智能化的方案建设,在和阿里云的合作中,基于星睿智算中心 2.0 的 23.5EFLOPS 强大算力,构建 AI 混合云架构,面向百万级用户的实时推理计算引入阿里云函数计算的 Serverless GPU 算力集群,共同为智能座舱的交互和娱乐功能提供大模型推理业务服务,涵盖的场景如针对模糊指令的复杂意图解析、文生图、情感 TTS 等。
|
4月前
|
运维 NoSQL Serverless
|
4月前
|
人工智能 运维 Cloud Native
阿里云Serverless计算产品入选Gartner®报告「领导者」象限!
近日,Gartner® 发布了 2025 年度全球《云原生应用平台魔力象限》报告,阿里云凭借 Serverless 应用引擎 SAE(以下简称 SAE)和函数计算 FC,成为亚太地区唯一入选「领导者象限」的科技公司。
424 16
|
3月前
|
消息中间件 运维 监控
爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?
阿里云 Kafka 不仅为尚娱提供了高可靠、低延迟的消息通道,更通过 Serverless 弹性架构实现了资源利用率和成本效益的双重优化,助力尚娱在快速迭代的游戏市场中实现敏捷运营、稳定交付与可持续增长。
222 35
|
3月前
|
消息中间件 存储 运维
嘉银科技基于阿里云 Kafka Serverless 提升业务弹性能力,节省成本超过 20%
云消息队列 Kafka 版 Serverless 系列凭借其秒级弹性扩展、按需付费、轻运维的优势,助力嘉银科技业务系统实现灵活扩缩容,在业务效率和成本优化上持续取得突破,保证服务的敏捷性和稳定性,并节省超过 20% 的成本。
235 27
|
3月前
|
人工智能 机器人 Serverless
安诺机器人 X 阿里云函数计算 AI 咖啡印花解决方案
当云计算遇见具身智能,AI咖啡开启零售新体验。用户通过手机生成个性化图像,云端AI快速渲染,机器人精准复刻于咖啡奶泡之上,90秒内完成一杯可饮用的艺术品。该方案融合阿里云FunctionAI生图能力与安诺机器人高精度执行系统,实现AIGC创意到实体呈现的闭环,为线下零售提供低成本、高互动、易部署的智能化升级路径,已在商场、机场、展馆等场景落地应用。
安诺机器人 X 阿里云函数计算 AI 咖啡印花解决方案
|
人工智能 运维 安全
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
阿里云推出以函数计算为核心的AgentRun平台,通过创新体系解决开发、部署、运维难题,提供全面支持,已在多个真实业务场景验证,是AI原生时代重要基础设施。
|
3月前
|
人工智能 运维 安全
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
云原生应用平台 Serverless 计算负责人杨皓然在云栖大会发表主题演讲“Serverless Agent 基础设施:助力大规模 Agent 部署与运维”。本议题深入介绍了阿里云以函数计算为核心打造的 Agent 基础设施——AgentRun,阐述其如何通过创新的运行时、模型服务、网关及可观测体系,为企业构筑坚实、高效、安全的 Agent 时代基石。
|
4月前
|
运维 NoSQL Serverless
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
在轻休闲游戏流量波动大、生命周期短的背景下,传统架构难以应对成本与扩展挑战。本文介绍了基于阿里云函数计算 FC 和 Redis 构建的新一代服务器架构,实现弹性伸缩、成本优化与高效运维,助力轻休闲游戏快速迭代与稳定运营,提升开发效率并降低运维复杂度。
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
|
DataWorks 数据挖掘 Serverless
阿里云EMR Serverless StarRocks 内容合集
阿里云 EMR StarRocks 提供存算分离架构,支持实时湖仓分析,适用于多种 OLAP 场景。结合 Paimon 与 Flink,助力企业高效处理海量数据,广泛应用于游戏、教育、生活服务等领域,显著提升数据分析效率与业务响应速度。
300 0

热门文章

最新文章

相关产品

  • 函数计算