Rak*_*kib 5 pipeline github environment-variables github-actions building-github-actions
我有一个如下所示的 github 存储库
约翰多/你好世界
我正在尝试在 github 操作中设置以下环境变量
env:
DOCKER_HUB_USERID: ${{ github.actor }}
REPOSITORY_NAME: ${GITHUB_REPOSITORY#*\/}
IMAGE_NAME_CLIENT: "$REPOSITORY_NAME-client"
IMAGE_NAME_SERVER: "$REPOSITORY_NAME-server"
Run Code Online (Sandbox Code Playgroud)
我对这些变量的预期结果是:
johndoe
hello-world
hello-world-client
hello-world-server
Run Code Online (Sandbox Code Playgroud)
但我得到
johndoe
${REPOSITORY_NAME#*\/}
$REPOSITORY_NAME-client
$REPOSITORY_NAME-server
Run Code Online (Sandbox Code Playgroud)
看起来在声明env
vars 时没有评估表达式。
我怎样才能达到预期的行为?
Shell 参数扩展在run
步骤之外是不可能的。
env:
REPOSITORY_NAME: ${GITHUB_REPOSITORY#*\/}
Run Code Online (Sandbox Code Playgroud)
创建一个额外的步骤来计算一个新变量的值。
- name: Set env
run: echo ::set-env name=REPOSITORY_NAME::${GITHUB_REPOSITORY#*\/}
- name: Test
run: echo $REPOSITORY_NAME
Run Code Online (Sandbox Code Playgroud)
或者创建一个步骤输出。
- 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 }}
Run Code Online (Sandbox Code Playgroud)
一旦计算出的环境变量REPOSITORY_NAME
或步骤输出steps.vars.outputs.repo_name
存在,它们就可以用于设置其他这样的变量。
env:
IMAGE_NAME_CLIENT: ${{ env.REPOSITORY_NAME }}-server
IMAGE_NAME_SERVER: ${{ steps.vars.outputs.repo_name }}-server
Run Code Online (Sandbox Code Playgroud)
出于安全原因,Github 改变了你设置环境变量的方式,现在你必须使用这种方式。
steps:
- name: Set the environment variable
run: echo REPOSITORY_NAME=${GITHUB_REPOSITORY#*\/} >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它
- name: Use the value
run: echo $REPOSITORY_NAME # This will output repository name
Run Code Online (Sandbox Code Playgroud)
在 env 上使用的示例
- name: Install dependencies And Build Yarn and npm
uses: fabiel-leon/npm-build@master
env:
REPO: ${{ env.REPOSITORY_NAME }}
Run Code Online (Sandbox Code Playgroud)
- name: Build and push Docker images
uses: docker/build-push-action@v1
with:
tags: ${{ env.REPOSITORY_NAME }}
Run Code Online (Sandbox Code Playgroud)