我想将凭据和其他机密信息保存在我的git存储库中。由于各种原因(我正在使用分叉的GitHub存储库),凭据存储在类中,而不是配置文件中。
要在Microsoft App Center上进行构建,我将使用以下脚本成功将凭据替换为环境变量:
#!/usr/bin/env bash
echo "Updating user settings..."
SettingsFile=$APPCENTER_SOURCE_DIRECTORY/Client/MyApp/Helpers/UserSettings.cs
sed -i '' "s/APPCENTER_MICROSOFT/$APPCENTER_MICROSOFT/g" $SettingsFile
sed -i '' "s/APPCENTER_ANDROID/$APPCENTER_ANDROID/g" $SettingsFile
sed -i '' "s/APPCENTER_IOS/$APPCENTER_IOS/g" $SettingsFile
echo "Updating cloud service settings..."
CloudServiceFile=$APPCENTER_SOURCE_DIRECTORY/Client/MyApp/Services/SurveyCloudService.cs
sed -i '' "s/APP_NAME_REPLACE/$APP_NAME_REPLACE/g" $CloudServiceFile
echo "Settings updated"
我现在遇到的问题是,在本地测试时,我还需要进行这些替换。是否可以在不永久修改源文件的情况下(也许使用添加到.gitignore的.bat文件)使用构建事件来替换令牌,还是有更好的方法呢?
编辑:我目前的解决方案是通过对文件进行更改,然后使用git stash save credentials
来跟踪更改来保存凭据。然后,如果需要本地构建,则可以使用git stash list
和git stash apply stash@{<n>}
应用更改。测试和调试完成后,可以使用git reset --hard
删除凭据。它可以工作,但是必须有一个更优雅的解决方案。
答案 0 :(得分:0)
更优雅的解决方案是为源代码树和本地测试环境提供单独的目录。例如,您可以创建一个target/
或dist/
目录,该目录要么在git工作树之外,要么被.gitignore
排除。
构建过程的工作是根据源树中的内容(以及可能的其他信息,例如环境变量)填充本地环境。因此,交换适当的凭据将成为构建过程中的一步,这与构建生产(和/或类生产)环境的方式没有什么不同。由于更改是应用于未签入的副本的,因此您不必担心会回滚(或更糟糕的是,意外地提交而不进行回滚并将您的敏感数据暴露在其中)。基本上是不可逆的方式。