使用Github Action读取环境变量的NodeJS / Heroku应用程序错误

时间:2020-10-09 12:31:07

标签: node.js git heroku github-actions steam

最初,我有一个工作流程设置良好的git repo,以便在git push请求上上传一些NodeJS源代码,这些代码一切正常。但是我有一个Steam API密钥位于一个.env文件中,但我不想将其公开(完全删除.env),所以我想使用Github Secrets存储 STEAM_API_KEY (以及其他变量,例如在工作流程中使用的yml env变量中为 BASE_URL ):

jobs:
  test:

    runs-on: ubuntu-latest
    
    env: 
      BASE_URL: ${{ secrets.BASE_URL }}
      STEAM_API_KEY: ${{ secrets.STEAM_API_KEY }}

    steps:
      - name: Checkout Repo v2
        uses: actions/checkout@v2
      
      - name: Use Node.js 14.x
        uses: actions/setup-node@v1
        with:
          node-version: 14.x
          
      - name: Running CI Installation
        run: npm ci
      - name: Running Application/Server Unit Tests
        run: npm test

然后我使用process.env.<variable_name>(紧随How can I use Github secrets in JS files之后)在我的代码中访问它们:

module.exports = new SteamAuth({
    realm: `${process.env.BASE_URL}/steam/user/auth`,
    returnUrl: `${process.env.BASE_URL}/steam/user/auth`,
    apiKey: process.env.STEAM_API_KEY
});

但是在Heroku上抛出此错误:

错误:缺少领域,returnURL或apiKey参数。这些是必需的。

如果我只是将字符串直接硬编码到领域 returnUrl apiKey ,则不会发生这种情况。

进一步的故障排除:

    var url1 = `${process.env.BASE_URL}/steam/user/auth`; // BASE_URL = "https://<app_name>.herokuapp.com"
    var url2 = "https://<app_name>.herokuapp.com/steam/user/auth";

    console.log(url1 === url2);
    console.log(url1);
    console.log(url2);

输出:

true
***/steam/user/auth
***/steam/user/auth

url1 process.env.BASE_URL已加密。但是 url2 也会被加密,因为它类似于BASE_URL?这是Github动作的缺陷吗?

在这一点上,我没有主意。我做错了事,但不知道从这里去哪里。有人对如何在.js代码中正确使用Github机密有任何想法吗?

PS :Github的秘密/工作流程对我来说还是很新的,请放心,因为我缺乏知识/了解。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在: env变量仅在从Heroku执行时运行Github Action,时可用。

仍然没有使用url2

解释最后一部分