簡體   English   中英

如何在 github 動作中使用 GPG 密鑰?

[英]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 的暫存存儲庫的步驟:

  • 打開一個終端 window。
  • 如果您不知道您的密鑰 ID,請通過電子郵件搜索: gpg --list-secret-keys user@example.com
  • 將您的密鑰導出為 Base64: gpg --export-secret-keys YOUR_ID_HERE | base64 > private.key gpg --export-secret-keys YOUR_ID_HERE | base64 > private.key
  • 在您的 Github 項目中,創建一個名為GPG_SIGNING_KEY的新 Secret 並粘貼您的密鑰的 Base64 內容。
  • 在您的 yml 工作流文件中,包含一個從您剛剛定義的密鑰中導入密鑰的步驟。
- name: Configure GPG Key
  run: |
    echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
  env:
    GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}

到目前為止,它工作得很好,盡管有一些我無法解決的限制:

  • 您的 GPG 密鑰不應受密碼保護。 我想不出一種方法來導入受保護的密鑰而不被要求提供他們的秘密。
  • 我找不到在此過程中使用我的 GitHub GPG 密鑰的方法。

以防萬一, 這里是一個使用這種方法發布 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM