8

我有一个 github 存储库,如下所示

约翰多/你好世界

我正在尝试在 github 操作中设置以下环境变量

env:
  DOCKER_HUB_USERID: ${{ github.actor }}
  REPOSITORY_NAME: ${GITHUB_REPOSITORY#*\/}
  IMAGE_NAME_CLIENT: "$REPOSITORY_NAME-client"
  IMAGE_NAME_SERVER: "$REPOSITORY_NAME-server"

我对这些变量的预期结果是:

johndoe
hello-world
hello-world-client
hello-world-server

但我得到

johndoe
${REPOSITORY_NAME#*\/}
$REPOSITORY_NAME-client
$REPOSITORY_NAME-server

env声明变量时,似乎没有对表达式进行评估。

我怎样才能达到预期的行为?

4

4 回答 4

12

Shell 参数扩展在步骤之外是不可能的run

env:
  REPOSITORY_NAME: ${GITHUB_REPOSITORY#*\/}

创建一个额外的步骤来将值计算到一个新变量中,并将其附加到$GITHUB_ENV.

      - name: Set env
        run: echo "REPOSITORY_NAME=${GITHUB_REPOSITORY#*\/}" >> $GITHUB_ENV
      - name: Test
        run: echo $REPOSITORY_NAME

或者创建一个步骤输出。

      - name: Set outputs
        id: vars
        run: echo ::set-output name=repo_name::${GITHUB_REPOSITORY#*\/}
      - name: Test set output
        run: echo ${{ steps.vars.outputs.repo_name }}

一旦计算的环境变量REPOSITORY_NAME或步骤输出steps.vars.outputs.repo_name存在,​​它们就可以用来设置其他变量,像这样。

env:
  IMAGE_NAME_CLIENT: ${{ env.REPOSITORY_NAME }}-server
  IMAGE_NAME_SERVER: ${{ steps.vars.outputs.repo_name }}-server
于 2020-02-28T05:44:21.953 回答
3

出于安全原因,Github 改变了您设置环境变量的方式,现在您必须使用这种方式。

steps:
  - name: Set the environment variable
    run: echo REPOSITORY_NAME=${GITHUB_REPOSITORY#*\/} >> $GITHUB_ENV

  - name: Use the value
    run: echo $REPOSITORY_NAME # This will output repository name

  # Example of use 
  - name: Intalll dependencies And Build Yarn and npm
    uses: fabiel-leon/npm-build@master
    env:
      REPO: ${{ env.REPOSITORY_NAME }}

  - name: Build and push Docker images
    uses: docker/build-push-action@v1
    with:
      tags: ${{ env.REPOSITORY_NAME }}

https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable

于 2021-02-21T22:11:57.317 回答
0

像这样

IMAGE_NAME_SERVER: "${{ REPOSITORY_NAME }}-server"
于 2021-08-04T18:55:10.133 回答
0

本月的新产品,仍在“运行”中。

https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/

回声“action_state=黄色”>> $GITHUB_ENV

我还发现,uses:with:ref 之类的东西不会进行 ${action_state} 扩展,但它们会在被填充后进行 ${{ env.action_state }} 扩展。

于 2020-10-19T02:36:49.607 回答