Bitbucket流水线部署AWS Lambda报--zip-file参数解析错误
故障原因
报错的核心原因有2个:
- 步骤执行逻辑配置错误
你在testing分支的流水线中把「Build构建打包」和「Deploy部署」两个步骤放在了parallel并行块下,两个步骤会同时启动、运行在完全隔离的容器环境中:
- 部署步骤启动时,构建步骤还未完成zip包生成
- 并行步骤之间默认不会传递工件,哪怕构建步骤后续生成了zip,部署步骤也无法读取到该文件
- YAML缩进配置错误
原配置中artifacts(工件定义)的缩进层级错误,没有作为Build步骤的子属性存在,Bitbucket流水线不会识别到需要将apiGatewayAuthorizer.zip作为可传递的工件留存。
另外还有两个非致命但会引发后续问题的配置缺陷:
- zip命令的排除规则没有给通配符加引号,shell会提前展开
*.git*通配符,导致排除逻辑失效 - testing分支的构建步骤没有执行
yarn install安装项目依赖,后续就算部署成功,Lambda运行时也会因为缺依赖报错 - 原配置中
apt install zip未加-y参数,执行时会卡在交互确认环节导致构建步骤中断
修复方案
- 删除
testing分支下包裹两个步骤的parallel配置,让构建、部署步骤串行执行:构建步骤完成、工件留存成功后,才会进入部署步骤 - 修正YAML缩进,确保
name/script/artifacts都属于对应step的子属性,层级对齐 - 给zip命令的通配符排除规则加上单引号避免shell提前展开;补充依赖安装逻辑、apt安装的自动确认参数
修复后的完整配置参考
image: node:16 # Workflow Configuration pipelines: default: - step: name: Build and Test caches: - node script: - echo Installing source YARN dependencies. - yarn install branches: testing: - step: name: Build script: - apt update && apt install -y zip - echo Installing production YARN dependencies. - yarn install --production # Exclude files to be ignored - echo Zipping package. - zip -r apiGatewayAuthorizer.zip . -x '*.git*' bitbucket-pipelines.yml artifacts: - apiGatewayAuthorizer.zip - step: name: Deploy to testing - Update Lambda code deployment: Test trigger: manual script: - pipe: atlassian/aws-lambda-deploy:0.2.3 variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION FUNCTION_NAME: $LAMBDA_FUNCTION_NAME COMMAND: 'update' ZIP_FILE: 'apiGatewayAuthorizer.zip'
注:如果不需要在部署前人工确认,可以移除
trigger: manual配置,构建完成后会自动执行部署。
内容的提问来源于stack exchange,提问作者waloar
相关产品推荐
相关产品推荐

