GitHub Actions中如何在环境变量中引用其他环境变量?
GitHub Actions环境变量复用导致工作流静默不执行的解决办法
你在工作流的env块里尝试用${{ env.REGISTRY }}拼接其他变量的写法行不通——GitHub Actions的工作流级env块在解析时,不支持用表达式引用同一块内定义的其他环境变量。当你这么写时,解析器无法正确处理未初始化的env.REGISTRY引用,直接判定整个配置无效,但因为是解析阶段的问题,不会触发执行环节的报错,所以工作流就被静默跳过了。
正确的两种实现方式:
方式一:在作业级env中复用工作流级变量
把基础变量放在工作流级env,然后在作业的env里拼接派生变量,作业级env可以正常引用工作流级的env变量:
env: REGISTRY: ghcr.io REPO_NAME: versada/monodoo jobs: build: runs-on: ubuntu-latest env: MY_REPO: ${{ env.REGISTRY }}/${{ env.REPO_NAME }} MY_MAIN_TAG: ${{ env.MY_REPO }}:16.0 steps: - name: 打印验证变量 run: | echo $MY_REPO echo $MY_MAIN_TAG
方式二:在步骤中通过GITHUB_ENV导出派生变量
如果需要在步骤间复用,也可以在步骤里用shell命令把派生变量写入GITHUB_ENV,后续步骤就能直接使用:
env: REGISTRY: ghcr.io jobs: build: runs-on: ubuntu-latest steps: - name: 定义派生变量 run: | # 先拼接MY_REPO并写入环境 echo "MY_REPO=${{ env.REGISTRY }}/versada/monodoo" >> $GITHUB_ENV # 再基于MY_REPO拼接TAG echo "MY_MAIN_TAG=${MY_REPO}:16.0" >> $GITHUB_ENV - name: 打印验证变量 run: | echo $MY_REPO echo $MY_MAIN_TAG
简单来说,工作流级的env只能放静态值,要做变量拼接要么放到作业级env,要么在步骤里用shell命令处理,这样就能避免解析失败导致的工作流静默不执行问题。
内容的提问来源于stack exchange,提问作者Andrius
相关产品推荐
相关产品推荐

