【问题标题】:Sharing environment variables (created by node js script) between GH Actions steps在 GH Actions 步骤之间共享环境变量(由节点 js 脚本创建)
【发布时间】:2022-01-19 15:41:00
【问题描述】:

我有一个应该执行以下操作的 GH 工作流程:

  • 运行 node js 脚本,为环境变量赋值(这可行)
  • 然后使用 $GITHUB_ENV 分配新的环境变量以供以后的步骤使用(不起作用)

步骤:* 运行 node js 脚本,为环境变量赋值(可行)

- name: Add bespoke value
        id: step_one_point_five
        run: |
          node create-env-var.js
          set
          echo "PERCY_TOKEN=$PERCY_TOKEN" >> $GITHUB_ENV

我的脚本:

exec(
        `set`,
        { env: { ...process.env, PERCY_TOKEN: `734573428736548273648723` } },
        (error, stdout, stderr) => {
          if (error) {
            console.error(`exec error: ${error}`);
            return;
          }
          console.log(`stdout: ${stdout}`);
          console.error(`stderr: ${stderr}`);
        }
      );

我可以从“set”输出中看到新的环境变量已经创建:

步骤 * 然后使用 $GITHUB_ENV 分配新的环境变量以供以后的步骤使用(不起作用)

此处的“设置”调用表明 PERCY_TOKEN 环境变量不存在。所以就好像 GH 在同一个工作流步骤中使用独立的终端,1 用于运行节点 js 脚本,不同的 1 用于下一个命令。

使用 GH 调试,当我尝试在第二个“集合”中调用它时,我可以确认 PERCY_TOKEN 值为空白:##[debug]PERCY_TOKEN=''

如何与其他 GH 工作流程步骤共享我由节点 js 脚本创建的环境变量?

【问题讨论】:

    标签: node.js github


    【解决方案1】:

    这是我的解决方案:

    显然出于安全原因,通过 nodeJs 代码创建的环境变量在脚本执行后无法访问。所以我决定使用“fs”的不同方法。

    我的 nodeJS 脚本(此处硬编码数据用于示例目的):

    const resolvePercyTokens = () => {
      fs = require("fs");
      fs.writeFile("temptokens.txt", "734573428736548273648723", function (err) {
        if (err) return console.log(err);
        console.log("Temp Tokens > temptokens.txt");
      });
    };
    resolvePercyTokens();
    
    

    我的 GH 工作流程:

    $GITHUB_ENV 的来源 = https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions#setting-an-environment-variable

    name: Share data between steps
    
    on:
      workflow_dispatch:
    
    jobs:
      data-checks:
        runs-on: ubuntu-18.04
        steps:
          - uses: actions/checkout@v2
    
          - name: Set the value
            id: step_one
            run: |
              node create-env-var.js
              echo "PERCY_TOKEN=$(cat temptokens.txt)" >> $GITHUB_ENV
            env:
              PUBLICATION_UNDER_TEST: ${{ github.event.inputs.envUnderTest }}
    
          - name: Use the value
            id: step_two
            run: |
              echo "${{ env.PERCY_TOKEN }}"
    

    成功:

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 1970-01-01
      • 2019-01-15
      • 2020-01-09
      • 2021-11-03
      • 2021-06-20
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多