如何将带有空格的字符串值传递给github actions env

时间:2019-12-20 02:50:35

标签: github-actions

我正在尝试创建一个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

如果我在秘密名称描述中添加值LAMBDA IS并运行GitHub操作,则会显示以下结果: enter image description here

1 个答案:

答案 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}"

请注意,如果您通过shellcheckshellharden之类的方式输入bash代码,它将对报价提出类似的建议