You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GitHub Actions在工作流中创建.Renviron文件无法定位路径问题

问题背景

我此前发布帖子尝试解决GitHub Actions中引用GitHub Secrets的问题,该问题已解决,目前遇到了新的问题。我需要解决工作流中Create and populate .Renviron file步骤的相关问题:

现有工作流配置
on: [push, pull_request]
name: CI-CD
jobs:
  CI-CD:
    runs-on: ${{ matrix.config.os }}

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

    strategy:
      # 为方便使用保留矩阵配置,通常仅需适配部署环境的单OS单R版本运行
      matrix:
        config:
          - {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}

    env:
      # 启用RStudio包管理器加快包安装速度
      RSPM: ${{ matrix.config.rspm }}
      # 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
        # 仅推送到main/master分支时执行持续部署
        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、$github.workspace/.Renviron、/home/runner/work/NBA-Dashboard/NBA-Dashboard/.Renviron多个路径创建文件均未生效
  • 创建文件后打印工作区目录内容,始终找不到.Renviron文件
  • 已删除.gitignore中.Renviron的相关规则,问题仍未解决
  • 需要将.Renviron文件创建在项目目录下,后续部署Shiny应用到shinyapps.io时可将该文件打包到应用中,保证用户访问时可以正确读取环境变量
解决方案
  1. 首先修正文件存在性校验逻辑
    Linux系统下默认ls命令不会显示以.开头的隐藏文件,你看到的目录列表没有.Renviron不代表文件未创建,将打印目录的命令改为ls -la ${{ github.workspace }},添加-a参数即可显示所有隐藏文件,确认.Renviron是否生成成功。

  2. 明确指定文件写入路径
    为了避免相对路径歧义,创建文件时直接指定工作区完整路径,修改Create and populate .Renviron file步骤的run块内容:

touch "${{ github.workspace }}/.Renviron"
echo aws_host="$AWS_HOST" >> "${{ github.workspace }}/.Renviron"
echo aws_port="$AWS_PORT" >> "${{ github.workspace }}/.Renviron"
echo aws_pw="$AWS_PW" >> "${{ github.workspace }}/.Renviron"
echo aws_user="$AWS_USER" >> "${{ github.workspace }}/.Renviron"
echo dbname="$DBNAME" >> "${{ github.workspace }}/.Renviron"
ls -la ${{ github.workspace }}
  1. 配置rsconnect打包规则
    rsconnect默认可能不会打包隐藏文件,需要在你的deploy/deploy-shinyapps.R脚本中调用deployApp函数时,显式指定包含.Renviron文件,示例配置如下:
rsconnect::deployApp(
  appDir = getwd(),
  appFiles = c(list.files(all.files = TRUE), "deploy/deploy-shinyapps.R"), # all.files=TRUE会包含隐藏文件
  # 其余原有参数保持不变
  account = Sys.getenv("SHINYAPPS_ACCOUNT"),
  token = Sys.getenv("SHINYAPPS_TOKEN"),
  secret = Sys.getenv("SHINYAPPS_SECRET")
)

如果不希望打包所有隐藏文件,也可以手动将.Renviron加入到appFiles列表中即可。


内容的提问来源于stack exchange,提问作者jyablonski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:48:00