如何在Github Actions作业期间将API密钥替换为密码?

3

我通常把API密钥隐藏在一个XML文件中,用.gitignoregetString()函数来提取我的API密钥。

我正在尝试使用Github Actions自动化Gradle构建和Debug APK的发布。但由于XML文件未上传到仓库,因此显然会失败。

是否有一种方法可以将我的密钥存储在Github Secrets中,然后用密钥替换代码?

当前代码:headers["token"]= getString(R.string.token)
在Github Actions服务器中替换的代码:headers["token"]="MY_API_KEY_FROM_SECRETS"

这是我使用的YAML文件:

name: Gradle build test and release
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
   #I'd like to replace the api key here in code from secrets
    - name: Make Gradle executable
      run: chmod +x ./gradlew
    - name: Build with Gradle
      run: ./gradlew build
    - name: Build Debug APK
      run: ./gradlew assembleDebug
    - name: Releasing using Hub
      uses: ShaunLWM/action-release-debugapk@master
      env:
       GITHUB_TOKEN: ${{ secrets.TOKEN }}
       APP_FOLDER: app
       RELEASE_TITLE: New Build
       BODY: github.event.head_commit.message
       prerelease: true
1个回答

4

可以,这是可行的。你并没有说要修改哪个文件,但这应该很容易通过一行代码完成(将FILENAME替换为你的配置文件名):

- run: perl -pi -e 's/getString\(R\.string\.token\)/"$ENV{TOKEN}"/' FILENAME
  env:
    TOKEN: ${{ secrets.TOKEN }}

如果您更喜欢 Ruby 或其他脚本语言,可以使用它们代替。您也可以使用 sed,但我更喜欢这种方法,因为这意味着该值在 ps 输出中永远不可用(即使这是一个被锁定的虚拟机)。


嘿,我的文件深藏在git工作区中,而我不懂perl也没有设置它。我尝试了这个,但似乎没有构建成功,这意味着它没有正确替换。我做错了什么吗?运行:perl -pi -e 's/getString(R.string.token)/"$ENV{TOKEN}"/' app/src/main/java/com/cybershark/foodflix/fragments/RestaurantsFragment.kt env: TOKEN: ${{ secrets.API_KEY }} - CyberShark
1
我已更新正则表达式以转义一些未正确转义的字符,所以现在应该可以工作了。您可以通过将TOKEN设置为环境中的某个内容,然后运行Perl单行命令来在计算机上测试它,并确保它执行您想要的替换。 - bk2204
非常感谢,我将来一定会研究 Perl :) 另外,我需要为 $ENV{TOKEN} 添加另一组 " ",因为它对我来说似乎不是字符串。 - CyberShark

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