You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions部署Serverless到AWS时环境变量配置报错如何解决?

问题:GitHub Actions部署Serverless Framework到AWS时变量解析失败

问题背景

此前通过Jenkins部署Serverless Framework到AWS一切正常,改用GitHub Actions后部署失败,工作流代码如下:

name: Deploy to Dev
on:
  workflow_dispatch:

jobs:
  Deploy-to-dev:
    runs-on: ubuntu-latest
    steps: 
      - name: Get code
        uses: actions/checkout@v4
      - name: Install NodeJs
        uses: actions/setup-node@v4
        with:
          node-version: 16
      - name: Install dependencies
        run: |
          npm install
          npm install -g serverless
      - uses: aws-actions/configure-aws-credentials@v3
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_NON_PROD }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_NON_PROD }}
          aws-region: us-east-1
      - name: Deploy to Serverless
        run: Environment=dev serverless deploy --stage dev

执行时出现错误:

Cannot resolve serverless.yml: Variables resolution errored with:
  - Cannot resolve variable at "functions.xyz.environment.id": Value not found at "self" source,
  - Cannot resolve variable at "functions.xyz.environment.id": Value not found at "self" source
Error: Process completed with exit code 1.

Jenkins中使用的部署命令为:

Environment=$env_name serverless deploy --stage $env_name

设置$env_name为dev即可正常部署。

解决方案

1. 改用GitHub Actions的env块传递环境变量

GitHub Actions的run步骤中直接写Environment=dev虽能临时设置环境变量,但部分场景下可能无法被Serverless正确捕获。建议改用steps级别的env块定义变量,确保传递可靠:

- name: Deploy to Serverless
  env:
    Environment: dev
  run: serverless deploy --stage dev

2. 检查serverless.yml中的变量引用逻辑

错误提示显示self源无法找到对应变量,需确认serverless.yml中functions.xyz.environment.id的引用规则:

  • 如果是类似id: ${self:custom.${env:Environment}.id}的写法,需确保custom节点下存在dev对应的配置项,例如:
    custom:
      dev:
        id: "dev-xxxx"
      prod:
        id: "prod-xxxx"
    
  • 若变量应直接取自环境变量,需将引用改为${env:Environment}或对应正确的变量源。

3. 对齐Serverless版本

Jenkins与GitHub Actions中安装的Serverless版本可能存在差异,不同版本的变量解析逻辑可能不同。可在安装时指定固定版本(替换为Jenkins中使用的版本):

npm install -g serverless@3.38.0

内容的提问来源于stack exchange,提问作者Nitin k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:20:34