如何在 .Renviron 文件的 GitHub Actions 工作流程中引用 GitHub Secrets

亚布隆斯基

嗨,我即将完成使用 GitHub 操作添加 CI/CD 步骤来部署我拥有的 R Shiny 应用程序。我遇到的问题是 R 中有一个文件.Renviron,我用它来存储凭据以在 R 脚本中访问我的 SQL DB。通常我会在本地部署我的应用程序,并且当我使用 rsconnect 包时会包含这个文件,但是现在我正在使用 GitHub 操作,我相信我必须在 bash 脚本步骤中自己手动制作这个 .Renviron 文件。

下面是我的 github 工作流代码现在的样子。我遇到的问题是Create and populate .Renviron file零件。

# Triggered on push and pull request events
on: [push, pull_request]

# Name of the workflow => usethis::use_github_actions_badge("CI-CD")
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: Query R dependencies
        run: |
          install.packages('remotes')
          saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2)
          writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version")
        shell: Rscript {0}

      - name: Cache R packages
        uses: actions/cache@v2
        with:
          path: ${{ env.R_LIBS_USER }}
          key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }}
          restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-

      - 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
        run: |
          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
        shell: bash

      - name: Check package
        run: |
          options(crayon.enabled = TRUE) # enable colorful R CMD check output
          rcmdcheck::rcmdcheck(args = "--no-manual", error_on = "error")
        shell: Rscript {0}

      - 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

在此处输入图片说明

我将所有这些变量都存储在 GitHub 机密中,但我仍然无法让我的 Shiny 应用程序通过 .Renviron 文件访问任何这些凭据。我相信访问这些 GitHub 机密的语法与普通的 ${{secrets.my_secret }} 不同,因为它是在 bash 脚本中。

.Renviron 文件的文件位置也很重要,它应该位于 GitHub 存储库中其他所有内容所在的根目录中。我不确定如何知道/确认它是否在正确的位置。

如果有人对如何使用 GitHub 机密正确创建此 .Renviron 文件并将其放在我的目录根目录有任何建议,我将不胜感激!

克日什托夫·马德

你是对的,你不能 ${{ secrets.my_secret }}在 bash 脚本中使用。

这是行不通的,因为“${{ }}”和“secrets”变量是 Bash 无法理解的 GitHub Actions 结构。您必须将机密作为环境变量传递给您的步骤:

但是,您也可以像在上一步中一样使用 env 映射。它会是这样的:

      - name: Create and populate .Renviron file
        run: |
          echo aws_host="$MAPPED_AWS_HOST" >> ~/.Renviron
          echo aws_port="$MAPPED_AWS_PORT " >> ~/.Renviron
          echo aws_pw="$MAPPED_AWS_PW" >> ~/.Renviron
          echo aws_user="$MAPPED_AWS_USER" >> ~/.Renviron
          echo dbname="$MAPPED_DBNAME" >> ~/.Renviron
        shell: bash
        env:
          MAPPED_AWS_HOST: ${{ secrets.AWS_HOST}}
          MAPPED_AWS_PORT : ${{ secrets.AWS_PORT }}
          MAPPED_AWS_PW: ${{ secrets.AWS_PW }}
          MAPPED_AWS_USER: ${{ secrets.AWS_USER}}
          MAPPED_DBNAME: ${{ secrets.DBNAME}}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在GitHub工作流程yml文件中具有工作流程特定的环境

如何在GitHub Actions工作流程中获取请求请求编号

如何使 GitHub Actions 工作流程變乾

我可以在GitHub Actions工作流程中引用Dockerfile而不是图像吗?

更新 GIthub Actions 工作流程中声明的变量

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

如何使用 Github Actions API 获取 Github 工作流 yaml 文件

如何在github动作工作流程中引用“环境”?

如何在 GitHub Actions 工作流程中进行 apt-get install?

如何在Github Actions中丢掉工作?

如何在 GitHub 工作流程中传递 terraform 变量

如何在Github Actions中设置秘密?

使用Octokit API从GitHub Actions获得最新的工作流程

如何在GitHub Actions中使用env文件?

AWS凭证在GitHub Actions中如何工作?

在Github Actions中读取JSON文件

Github Actions中的手动工作流程触发器

使用值数组重复GitHub Actions工作流程中的步骤

在GitHub Actions工作流程中缓存APT软件包

如何在推送事件中跳过GitHub Actions工作?

如何在Github Actions中运行Pandoc“转换Dir中的所有文件”命令

如何在Github工作流程上运行Ruby脚本

Github Actions工作被跳过

如何在 Github 工作流程中检查问题是否没有标签

Github Actions,如何在工作步骤之间共享计算值?

如何(以及为什么)升级GitHub工作流程以使用“环境文件”

如何在GitHub工作流中的YAML文件中设置包含空格的路径?

PHP / Github Actions 工作流:如何在 $_ENV 中提供機密

如何使用GitHub Actions在管道中git push到GitHub