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
相关产品推荐
相关产品推荐

