我正在开发一个GitHub操作工作流,它构建签名的APK并部署到Playstore.对于签名的APK,我们需要key.properties
个文件,其中包含
storePassword=abc-m0bile-Pa$$
keyPassword=password_of_key
keyAlias=alias_value
storeFile=./path_of_jks_file
我将StorePassword存储在GIT机密中,然后在工作流中检索该值.当在工作流中检索密码时,密码中的"$$"将自动替换到4594中.
我的意思是密码:"fn7-m0bille-pa$$"被转换为"fn7-m0bille-pa4594".
下面是检索密码并记录在key.properties文件中的代码块
# Create the key.properties file with secrets
- name: Create key.properties
run: |
echo "storeFile=${{ steps.android_keystore.outputs.filePath }}" > android/key.properties
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties
echo "storePassword=${{ secrets.STORE_PASSWORD }}" >> android/key.properties
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties
这就是我知道从机密中获取的密码不正确或被以某种方式操纵的原因
name: Debug Keystore Information
run: |
echo "Keystore File: ${{ steps.android_keystore.outputs.filePath }}"
echo "Key Alias: ${{ secrets.KEY_ALIAS }}"
echo "storePassword=${{ secrets.STORE_PASSWORD }}"
echo "keyPassword=${{ secrets.KEY_PASSWORD }}"
env:
YOUR_KEYSTORE_PASSWORD: ${{ secrets.KEY_PASSWORD }}
UPDATE
这就是我到目前为止试图解决的问题
1. Escape the Dollar Sign:个 使用双美元符号($$)转义store 密码中的美元符号.
echo "storePassword=${{ secrets.STORE_PASSWORD // '$' / '$$' }}" >> android/key.properties
结果:它没有工作,并且失败,错误是语法无效.
2. Use Single Quotes:个 用单引号将密码值引起来,这样可以防止解释特殊字符.
echo "storePassword='${{ secrets.STORE_PASSWORD }}'" >> android/key.properties
结果:失败,因为它仍在将$$转换为1716
3. Use 100 Command: 它使用sed命令将美元符号($)替换为反斜杠和美元符号($).
echo "storePassword=$(echo '${{ secrets.STORE_PASSWORD }}' | sed 's/\$/\\$/g')" >> android/key.properties
结果:它让我更接近了一点,因为输出是pa$$
4. Encode storePassword into base64: 我将密码转换为base64,然后存储在git secrets中.在工作流程中,我获取编码的密码,然后从base64解码
- name: Decode and set environment variables
run: |
ENCODED_STORE_PASSWORD=${{ secrets.ENCODED_STORE_PASSWORD }}
ENCODED_KEY_PASSWORD=${{ secrets.ENCODED_KEY_PASSWORD }}
DECODED_STORE_PASSWORD=$(echo "$ENCODED_STORE_PASSWORD" | base64 --decode)
DECODED_KEY_PASSWORD=$(echo "$ENCODED_KEY_PASSWORD" | base64 --decode)
echo "DECODED_STORE_PASSWORD=$DECODED_STORE_PASSWORD" >> $GITHUB_ENV
echo "DECODED_KEY_PASSWORD=$DECODED_KEY_PASSWORD" >> $GITHUB_ENV
结果:它让我更接近了一点,因为输出是pa$$
我甚至try 编码key.properties文件,将其存储为git_secret,并在工作流中检索该秘密,解码它,然后直接提供签名apk所需的值.但也没有成功.