使用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时可将该文件打包到应用中,保证用户访问时可以正确读取环境变量
解决方案
首先修正文件存在性校验逻辑
Linux系统下默认ls命令不会显示以.开头的隐藏文件,你看到的目录列表没有.Renviron不代表文件未创建,将打印目录的命令改为ls -la ${{ github.workspace }},添加-a参数即可显示所有隐藏文件,确认.Renviron是否生成成功。明确指定文件写入路径
为了避免相对路径歧义,创建文件时直接指定工作区完整路径,修改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 }}
- 配置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
相关产品推荐
相关产品推荐

