使用GitHub Actions在工作流程中创建.env文件

19

最近我创建了这篇帖子,试图弄清楚如何在GitHub行动中引用GitHub Secrets。 我相信我已经解决了那个问题并找到了答案,现在我遇到了不同的问题。

以下是当前工作流程代码的示例,我需要帮助的问题是“创建和填充.Renviron文件”的部分。

on: [push, pull_request]
name: CI-CD
jobs:
  CI-CD:
    runs-on: ${{ matrix.config.os }}

    name: ${{ matrix.config.os }} (${{ matrix.config.r }})

    strategy:
      # we keep a matrix for convenience, but we would typically just run on one
      # single OS and R version, aligned with the target deployment environment
      matrix:
        config:
          - {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}

    env:
      # Enable RStudio Package Manager to speed up package installation
      RSPM: ${{ matrix.config.rspm }}
      # Access token for GitHub
      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}

    steps:

      - name: Checkout repo
        uses: actions/checkout@v2

      - name: Setup R
        uses: r-lib/actions/setup-r@v1
        with:
          r-version: ${{ matrix.config.r }}

      - name: Install system dependencies
        run: |
          while read -r cmd
          do
            eval sudo $cmd
          done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))')
      - name: Install R dependencies
        run: |
          remotes::install_deps(dependencies = TRUE)
          remotes::install_cran("rcmdcheck")
        shell: Rscript {0}

      - name: Create and populate .Renviron file
        env:
          AWS_HOST: ${{ secrets.AWS_HOST }}
          AWS_PORT: ${{ secrets.AWS_PORT }}
          AWS_PW: ${{ secrets.AWS_PW }}
          AWS_USER: ${{ secrets.AWS_USER }}
          DBNAME: ${{ secrets.DBNAME }}
        run: |
          touch .Renviron
          echo aws_host="$AWS_HOST" >> .Renviron
          echo aws_port="$AWS_PORT" >> .Renviron
          echo aws_pw="$AWS_PW" >> .Renviron
          echo aws_user="$AWS_USER" >> .Renviron
          echo dbname="$DBNAME" >> .Renviron
          ls ${{ github.workspace }}
        shell: bash

      - name: Deploy to shinyapps.io
        # continuous deployment only for pushes to the main / master branch
        if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
        env:
          SHINYAPPS_ACCOUNT: ${{ secrets.SHINYAPPS_ACCOUNT }}
          SHINYAPPS_TOKEN: ${{ secrets.SHINYAPPS_TOKEN }}
          SHINYAPPS_SECRET: ${{ secrets.SHINYAPPS_SECRET }}
        run: Rscript deploy/deploy-shinyapps.R

我相信这个.Renviron文件已经被创建了,但是我不知道它在哪里,而且它看起来肯定不在其他文件所在的位置。我已经尝试过很多文件路径目标,如:.Renviron~/.Renviron$github.workspace/.Renviron/home/runner/work/NBA-Dashboard/NBA-Dashboard/.Renviron,但都行不通。在我创建该文件后,我列出了工作区目录的所有内容(这就是我想要的文件),但它从未被列在那里。

输入图像描述

我需要在特定目录中创建和列出那个.Renvrion文件以及所有其他文件,这样当我继续使用rsconnect软件包构建和部署我的Shiny应用程序时,它就能够包含该文件以在用户使用应用程序时正确地检索环境变量。

我以为可能是.gitignore有问题,所以我把.Renviron从中删除了?但这并没有解决问题。如果有任何想法,我会感激不尽!


你需要使用 ls -a 命令来显示以点 . 开头的文件。 - Allan Chain
4个回答

14

文件在你期望的位置

      - name: Create and populate .Renviron file
        env:
          AWS_HOST: ${{ secrets.AWS_HOST }}
          AWS_PORT: ${{ secrets.AWS_PORT }}
          AWS_PW: ${{ secrets.AWS_PW }}
          AWS_USER: ${{ secrets.AWS_USER }}
          DBNAME: ${{ secrets.DBNAME }}
        run: |
          touch .Renviron
          echo aws_host="$AWS_HOST" >> .Renviron
          echo aws_port="$AWS_PORT" >> .Renviron
          echo aws_pw="$AWS_PW" >> .Renviron
          echo aws_user="$AWS_USER" >> .Renviron
          echo dbname="$DBNAME" >> .Renviron

          echo "cat .Renviron"
          cat .Renviron

          echo "ls -a ."
          ls -a .

          echo "ls -a ${{ github.workspace }}"
          ls -a ${{ github.workspace }}
        shell: bash

您需要运行ls -a命令来显示隐藏文件。

Run touch .Renviron
  touch .Renviron
  echo aws_host="$AWS_HOST" >> .Renviron
  echo aws_port="$AWS_PORT" >> .Renviron
  echo aws_pw="$AWS_PW" >> .Renviron
  echo aws_user="$AWS_USER" >> .Renviron
  echo dbname="$DBNAME" >> .Renviron
  
  echo "cat .Renviron"
  cat .Renviron
  
  echo "ls -a ."
  ls -a .
  
  echo "ls -a /home/runner/work/github-actions-manual/github-actions-manual"
  ls -a /home/runner/work/github-actions-manual/github-actions-manual
  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
  env:
    AWS_HOST: 
    AWS_PORT: 
    AWS_PW: 
    AWS_USER: 
    DBNAME: 
cat .Renviron
aws_host=
aws_port=
aws_pw=
aws_user=
dbname=
ls -a .
.
..
.Renviron
.git
.github
.gitignore
LICENSE
README.md
change-workflow.ps1
commit-new-workflow.ps1
dist
public
test.ps1
test2.ps1
ls -a /home/runner/work/github-actions-manual/github-actions-manual
.
..
.Renviron
.git
.github
.gitignore
LICENSE
README.md
change-workflow.ps1
commit-new-workflow.ps1
dist
public
test.ps1
test2.ps1

啊哈,是的,ls -a命令起了作用。像你说的那样,文件一直都在那儿!虽然它存在,但它没有与应用程序一起部署,我发现一段代码实际上像一个.gitignore文件,不允许以.开头的任何文件被部署。我解决了这个问题,现在一切都正常了。感谢您的帮助! - jyablonski

8
这个方案同样可以胜任任务,而且能够在 Github Action 中轻松管理大型文件:
      - name: Create and populate .Renviron file
        env:
          AWS_HOST: ${{ secrets.AWS_HOST }}
          AWS_PORT: ${{ secrets.AWS_PORT }}
          AWS_PW: ${{ secrets.AWS_PW }}
          AWS_USER: ${{ secrets.AWS_USER }}
          DBNAME: ${{ secrets.DBNAME }}
        run: |
          cat <<EOF > .Renviron
          aws_host="$AWS_HOST"
          aws_port="$AWS_PORT"
          aws_pw="$AWS_PW"
          aws_user="$AWS_USER"
          dbname="$DBNAME"
          EOF

          echo "cat .Renviron"
          cat .Renviron


2

有一个更好的方法:从GitHub actions marketplace中获取Create .Env File Github Action

示例:

name: run-test-on-push
on:
 push:
   branches:
     - develop
jobs:
   test-app:
     runs-on: ubuntu-latest
     steps:
       - name: Make envfile
         uses: SpicyPizza/create-envfile@v1.3
         with:
           envkey_DEBUG: false
           envkey_PORT: 3000
           envkey_DATABASE_URL: ${{ secrets.DATABASE_URL }}
           envkey_NODE_ENV: development
           envkey_JWT_SECRET: ${{ secrets.JWT_SECRET }}
           envkey_JWT_EXPIRES_IN: '12h'
           envkey_SMTP_HOST: ${{ secrets.SMTP_HOST }}
           envkey_SMTP_PORT: ${{ secrets.SMTP_PORT }}
           envkey_SMTP_USER: ${{ secrets.SMTP_USER }}
           envkey_SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }}
           envkey_SMTP_FROM: ${{ secrets.SMTP_FROM }}
           envkey_SMTP_TLS: ${{ secrets.SMTP_TLS}}
           envkey_SMTP_SECURE: ${{ secrets.SMTP_SECURE }}
           #directory: <directory_name> # optional
           file_name: .env.test # optional (default: .env)
           fail_on_empty: false # optional (default: false)
       - uses: actions/checkout@v3
       - run : npm install && npm run test:ci    


1
只需使用整个env文件创建一个密钥,并直接使用echo命令创建该文件即可。
      - name: Create .env file
        run: echo "${{ secrets.PROD_FULL_ENV_FILE }}" > .env

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接