Ris*_*sad 12 github gnupg maven-deploy-plugin 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]
Run Code Online (Sandbox Code Playgroud)
我知道我需要以某种方式在运行操作工作流的虚拟运行器中导入我的 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
Run Code Online (Sandbox Code Playgroud)
Seb*_*n S 21
添加一个新答案,因为这个问题特别是关于在 Maven 部署中使用 GPG 密钥。
与此同时,该setup-java操作支持开箱即用的一切。文档中有一个示例:
- name: Set up Apache Maven Central
uses: actions/setup-java@v3
with: # running setup-java again overwrites the settings.xml
java-version: 8
distribution: 'temurin'
cache: 'maven'
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 }}
Run Code Online (Sandbox Code Playgroud)
请注意,该setup-java操作会自动为您配置 Mavensettings.xml文件并从给定的存储密钥导入 GPG 密钥。
请注意,在此期间setup-java您仅配置环境变量的名称。也就是说,您需要在后续步骤中使用这些环境变量时提供(秘密)值。
Ris*_*sad 21
谢谢大家的回复。我现在使用这个 GitHub 操作,这使得过程更加简单:
第 1 步:提取密钥
gpg --list-secret-keys --keyid-format LONG
gpg --export-secret-keys --armor {your_keyId}
Run Code Online (Sandbox Code Playgroud)
步骤 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 }}
Run Code Online (Sandbox Code Playgroud)
Mie*_*ere 20
由于 GitHub Actions 基本上是一个运行命令的容器,您是否考虑过将您的密钥定义为您项目中的秘密,然后将其导入您的 Github Action 定义中?
以下是我之前在项目中用于将生成的工件发布到 Sonatype 的临时存储库的步骤:
gpg --list-secret-keys user@example.comgpg --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 }}
Run Code Online (Sandbox Code Playgroud)
到目前为止,它运行得很好,尽管有一些我无法解决的限制:
以防万一,这里有一个使用这种方法发布 Maven工件的项目的工作示例。但是,与上述步骤的唯一区别是命令被外部化为bash 脚本文件。