在GitHub Actions中通过JavaScript创建环境变量的方法咨询
GitHub Actions中通过JavaScript创建并传递变量的方法
一、环境变量与仓库变量的区别
- 仓库变量:存储在仓库的「Settings → Secrets and variables → Actions」中,是持久化的全局变量,所有工作流都可调用,能手动或通过API修改。
- 环境变量:工作流运行时临时生成的变量,仅在当前工作流周期内有效,不会持久化到仓库,也不会在仓库设置中显示。
二、同Job内步骤间传递变量(推荐方案)
GitHub Actions目前推荐通过GITHUB_OUTPUT机制传递步骤间变量,替代已废弃的set-output写法,以下是两种实现方式:
方式1:使用官方@actions/core包(最简便)
先安装依赖:
npm install @actions/core
编写JavaScript脚本:
const core = require('@actions/core'); // 定义要传递的变量值 const myCustomValue = '这是自定义的变量内容'; // 设置输出变量 core.setOutput('TEST', myCustomValue);
在工作流中调用并使用变量:
- name: 运行JS脚本设置变量 id: set-variable # 必须设置id,后续步骤通过此id获取输出 run: node your-script-file.js - name: 在后续步骤使用变量 run: echo "获取到的变量值:${{ steps.set-variable.outputs.TEST }}"
方式2:不依赖官方包,直接写入GITHUB_OUTPUT文件
如果不想引入@actions/core,可以直接操作环境变量指定的输出文件:
const fs = require('fs'); const myCustomValue = '这是自定义的变量内容'; // 获取GitHub Actions指定的输出文件路径 const outputFilePath = process.env.GITHUB_OUTPUT; // 将变量写入文件,格式为「变量名=值」,每行一个变量 fs.appendFileSync(outputFilePath, `TEST=${myCustomValue}\n`);
后续步骤调用方式和方式1完全一致,通过步骤id的outputs获取变量。
三、跨Job传递变量
跨Job传递需要先在源Job中暴露输出变量,再让目标Job通过needs依赖源Job来获取:
jobs: set-variable-job: runs-on: ubuntu-latest outputs: test-output: ${{ steps.set-var.outputs.TEST }} # 暴露当前Job的输出变量 steps: - name: 运行JS脚本设置变量 id: set-var run: node your-script-file.js use-variable-job: runs-on: ubuntu-latest needs: set-variable-job # 依赖源Job steps: - name: 使用跨Job传递的变量 run: echo "从set-variable-job获取的变量值:${{ needs.set-variable-job.outputs.test-output }}"
四、你之前尝试方案的问题说明
你之前用console.log("TEST=VALUE")的写法属于已废弃的旧版set-output机制,GitHub Actions现在不再识别这种控制台输出为步骤变量,因此无法生效。必须使用上述写入GITHUB_OUTPUT的方式。
内容的提问来源于stack exchange,提问作者Bata Roland Krisztián
相关产品推荐
相关产品推荐

