我正在尝试创建一个GitHub操作,以使用下面提供的脚本来部署lambda函数。当我尝试通过GitHub秘密传递描述时,Github操作无法将其识别为字符串,无法将其视为命令。有什么方法可以从GitHub秘密中传递字符串,以便Github操作将其视为字符串。 还是我们可以传递秘密中的双引号字符串?
name: Test Lambda Actions
on:
pull_request:
paths:
- lambda/src/lambda_function.py
- .github/workflows/lambda-dev.yml
jobs:
deploy-lambda:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- run: chmod 777 *
- uses: actions/setup-python@v1
with:
python-version: 3.7
- run: pip3 install awscli
- name: Deploy Lambda Function
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
ROLE: ${{ secrets.ROLE }}
HANDLER: lambda_function.lambda_handler
ALIAS_NAME: ${{ secrets.TEST_ALIAS }}
DESCRIPTION: ${{ secrets.DESCRIPTION }}
run: |
cd lambda/dist
aws lambda update-function-configuration --function-name test-lambda --role ${ROLE} --description ${DESCRIPTION} --handler ${HANDLER}
version=$(aws lambda update-function-code --function-name test-lambda --zip-file fileb://lambda_function.zip --publish | jq -r .Version)
aws lambda create-alias --function-name test-lambda --name ${ALIAS_NAME} --function-version $version
答案 0 :(得分:1)
变量将作为环境变量出现
与任何shell脚本一样,使用它们时需要引用这些变量,否则您将遭受shell注入(或者您遇到的更小的情况:空格将扩展为多个参数)
举个小例子,下面是天蓝色管道如何设置环境变量:
export ROLE=my-iam-role
export DESCRIPTION='This is my lambda function'
export HANDLER=foo
运行此命令时:
# escaped newlines added so it is more readable on stack overflow
aws lambda \
update-function-configuration \
--function-name test-lambda \
--role ${ROLE} \
--description ${DESCRIPTION} \
--handler ${HANDLER}
使用您当前的变量,它将扩展为类似以下内容:
aws lambda \
update-function-configuration \
--function-name test-lambda \
--role my-iam-role \
--description This is my lambda function \
--handler foo
注意说明如何扩展为多个参数(因为参数只是bash中用空格分隔的字符串)
要解决此问题,请在命令中引用变量:
aws lambda \
update-function-configuration \
--function-name test-lambda \
--role "${ROLE}" \
--description "${DESCRIPTION}" \
--handler "${HANDLER}"
请注意,如果您通过shellcheck或shellharden之类的方式输入bash代码,它将对报价提出类似的建议