[英]How to use GPG key in github actions?
我正在嘗試通過GitHub 操作進行 maven 部署,但出現以下錯誤:-
gpg: directory '/home/runner/.gnupg' created
gpg: keybox '/home/runner/.gnupg/pubring.kbx' created
gpg: no default secret key: No secret key
gpg: signing failed: No secret key
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.272 s
[INFO] Finished at: 2020-04-06T12:18:44Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.5:sign (sign-artifacts) on project pretty-simple-jar: Exit code: 2 -> [Help 1]
我知道我需要以某種方式將我的 gpg 密鑰導入到運行操作工作流的虛擬運行器中,但我無法找到通過 GitHub 操作工作流將我的密鑰導入虛擬運行器的方法?
以下是我的工作流程:-
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Maven Central Repository
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Display settings.xml
run: |
echo "<settings><servers><server><id>ossrh</id><username>${{ secrets.OSSRH_USERNAME }}</username><password>${{ secrets.OSSRH_TOKEN }}</password></server></servers><profiles><profile><id>ossrh</id><activation><activeByDefault>true</activeByDefault></activation><properties><gpg.keyname>${{ secrets.GPG_KEY_ID }}</gpg.keyname><gpg.passphrase>'${{ secrets.GPG_PASSPHRASE }}'</gpg.passphrase></properties></profile></profiles></settings>" > /home/runner/.m2/settings.xml
cat /home/runner/.m2/settings.xml
- name: Build Maven Project
run: mvn clean install
- name: Publish to Apache Maven Central
run: mvn deploy
由於 GitHub Actions 基本上是一個運行命令的容器,您是否考慮過將您的密鑰定義為項目的機密,然后將其導入您的 Github Action 定義中?
以下是我之前在項目中使用的將生成的工件發布到 Sonatype 的暫存存儲庫的步驟:
gpg --list-secret-keys user@example.com
gpg --export-secret-keys YOUR_ID_HERE | base64 > private.key
gpg --export-secret-keys YOUR_ID_HERE | base64 > private.key
- name: Configure GPG Key
run: |
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
env:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
到目前為止,它工作得很好,盡管有一些我無法解決的限制:
以防萬一, 這里是一個使用這種方法發布 Maven artifacts的項目的工作示例。 不過,與上述步驟的唯一區別是命令被外部化為bash 腳本文件。
添加一個新答案,因為這個問題特別是關於在 maven 部署中使用 GPG 密鑰:
同時, setup-java
操作支持開箱即用的所有內容,如README文件中所述:
- name: Set up Apache Maven Central
uses: actions/setup-java@v1
with: # running setup-java again overwrites the settings.xml
java-version: 1.8
server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml
server-username: OSSRH_USERNAME # env variable for username in deploy
server-password: OSSRH_TOKEN # env variable for token in deploy
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
- name: Publish to Apache Maven Central
run: mvn deploy
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
請注意, setup-java
操作會自動為您配置 Maven 的settings.xml
文件,並從給定的存儲密鑰中導入 GPG 密鑰。
請注意,在setup-java
期間,您只配置環境變量的名稱。 即,您需要在以后的步驟中為這些環境變量提供(秘密)值,以便在其中使用它們。
謝謝大家的回復。 我現在使用這個 GitHub 動作,這使得過程更加簡單:
步驟 1:提取密鑰
gpg --list-secret-keys --keyid-format LONG
gpg --export-secret-keys --armor {your_keyId}
第 2 步:將提取的 GPG 密鑰和密碼存儲為機密
第 3 步:將此步驟包含在您的工作流程中
- name: Import GPG Key
uses: crazy-max/ghaction-import-gpg@v1
env:
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
您還可以使用另一個插件https://www.simplify4u.org/sign-maven-plugin/來簽署工件。
sign-maven-plugin
只需從環境變量中獲取簽名密鑰和 rest 配置項,無需特殊配置。
sign-maven-plugin
的另一個優點是您不需要使用配置文件來激活或停用插件,因為當沒有為插件預設簽名密鑰時,插件會跳過執行而不會出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.