Travis:gpg:签名失败:密钥不可用

时间:2016-07-08 23:34:41

标签: maven travis-ci gnupg openpgp

我尝试使用travis ci将我的开源项目部署到Nexus Repository(https://oss.sonatype.org),但遗憾的是travis没有找到gpg签名步骤的密钥。

我遵循https://github.com/making/travis-ci-maven-deploy-skelton上的所有步骤,但发布部署连续不起作用。在我的工作区,所有工作都正常,我可以将版本部署到Nexus存储库。

我正在使用一个脚本来部署项目:

#!/usr/bin/env bash
echo "Checking the current branch..."
if [ "$TRAVIS_BRANCH" = 'master' ] && [ "$TRAVIS_PULL_REQUEST" == 'false' ]; then
   echo "The current branch is: master"
   echo "Run maven deploy parameter using sign and build-extras profiles..."
   mvn deploy -P sign,build-extras --settings setting-maven.xml
fi

2 个答案:

答案 0 :(得分:1)

如果服务在开发人员帐户以外的其他用户下运行,则通常会出现此类问题。 GnuPG在~/.gnupg中拥有每用户“GnuPG主目录”。确保在服务的用户下导入密钥(从开发人员帐户运行此命令):

gpg --export-secret-keys [key-id] | sudo -u [service user] gpg --import

或者,您可以使用gpg的{​​{1}}选项更改为GnuPG主目录位置,但请注意GnuPG对于正确设置非常挑剔,默认情况下权限很紧(这是一件好事) )。

答案 1 :(得分:1)

https://github.com/making/travis-ci-maven-deploy-skelton中的解决方案依赖于$GPG_DIR中对称加密的密钥环。在示例中,文件夹为deploy

要创建这些密钥环,请执行此操作(复制):

$ export ENCRYPTION_PASSWORD=<password to encrypt>
$ openssl aes-256-cbc -pass pass:$ENCRYPTION_PASSWORD -in ~/.gnupg/secring.gpg -out deploy/secring.gpg.enc
$ openssl aes-256-cbc -pass pass:$ENCRYPTION_PASSWORD -in ~/.gnupg/pubring.gpg -out deploy/pubring.gpg.enc

这会在文件夹deploy中创建加密的密钥环。您可能需要在运行openssl命令之前创建该文件夹。 两个加密的密钥环都需要签入,以便它们在构建时作为项目的一部分提供。

在构建时,您需要解密密钥环。您可以通过向.travis.yml文件添加类似内容来执行此操作:

before_install:
- openssl aes-256-cbc -pass pass:$ENCRYPTION_PASSWORD -in $GPG_DIR/pubring.gpg.enc -out $GPG_DIR/pubring.gpg -d
- openssl aes-256-cbc -pass pass:$ENCRYPTION_PASSWORD -in $GPG_DIR/secring.gpg.enc -out $GPG_DIR/secring.gpg -d

注意openssl命令如何使用$GPG_DIR?那基本上就是你的deploy目录。为确保Travis了解$GPG_DIR,请对其进行定义,例如:像这样:

env:
  global:
  - GPG_DIR="`pwd`/deploy"

所以基本上Travis现在知道如何解密你的GPG密钥环并将它们放到一个定义的位置。现在你仍然需要告诉GPG如何选择它。为此你有两个选择:

  1. pom.xml
  2. 中的属性 您的settings.xml 中的
  3. 属性

    项目https://github.com/making/travis-ci-maven-deploy-skelton使用第一个选项(pom.xml)。关键部分是:

    <profiles>
        <profile>
            <id>ossrh</id>
            <properties>
                <gpg.executable>gpg</gpg.executable>
                <gpg.keyname>${env.GPG_KEYNAME}</gpg.keyname>
                <gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase>
    
                <!-- tell gpg to NOT use the default keyring from the current user's home -->
                <gpg.defaultKeyring>false</gpg.defaultKeyring>
    
                <!-- instead tell gpg to use the keyrings from your GPG_DIR -->
                <gpg.publicKeyring>${env.GPG_DIR}/pubring.gpg</gpg.publicKeyring>
                <gpg.secretKeyring>${env.GPG_DIR}/secring.gpg</gpg.secretKeyring>
            </properties>
            [...]
    

    使用这些属性可以为gpg可执行文件定义参数。这是有效的,因为您已在$GPG_DIR文件中设置了.travis.yml

    实质上,您告诉gpg不要在当前用户的主目录中使用标准密钥环,而是使用您刚解密并粘贴到$GPG_DIR的密钥环。

    您可能会问自己其他<properties> / env变量的来源。运行以下命令时,它们会附加到.travis.yml

    $ travis encrypt --add -r <username>/<repository> SONATYPE_USERNAME=<sonatype username>
    $ travis encrypt --add -r <username>/<repository> SONATYPE_PASSWORD=<sonatype password>
    $ travis encrypt --add -r <username>/<repository> ENCRYPTION_PASSWORD=<password to encrypt>
    $ travis encrypt --add -r <username>/<repository> GPG_KEYNAME=<gpg keyname (ex. 1C06698F)>
    $ travis encrypt --add -r <username>/<repository> GPG_PASSPHRASE=<gpg passphrase>
    

    <username>是您的Github用户名,<repository>是您的Github回购。 运行travis encrypt --add命令后,您的.travis.yml文件将添加如下附加条目:

    env:
      global:
      - GPG_DIR="`pwd`/deploy"
      - secure: VYxU+0zMoKExcopJ8z74Pd5KE6TnoP72hZchnpy+gxLVrt4d5lBJ042xT2D/4qebG8stHpq5DtYO8EQaZVMKVQl48fXwQk4aWiY0OWNY2Pz63Y9IFDGX0n/B1NPxbPToCoXHsddGvAVOlRXbDTfkF+yc3nheaLLnjhxFAM9X0/e1/bqnFyrwqrJmenG7RaGclsscjLPLExTAy+jIbj59loZkclVfKpMS98Ol605Xpmn6VTxr8Z7k3FEQ4mt3VI350QKBbmMsiEWpVAbPVPWsUkEYpM5VuU7Pi1W5fbaJBxIlOAdKjDtYfUvyY63iQK79787dBrGM5T2FDUV05UXpi4NvKnrcdkhuOFlXB4Io3qroen1lrh5igBdIlYc4kBpvDMpnewIuM7F+5fPS9XgBZIlOkiAEPqInr0sonlj4c+vkd92PeujDYiKUCA2uVLEzLYAAu7oC6O5K18JBzLurKNAda+9f+XuQrc1t140u8jic9YF7oM7fUdiu1MJ6j9WMiu3Syh9yjAOC+5RaBxy/ZcDUmYazH/oQNe3d55AMKYOdsryF51W/WfSrHoHtKUGsy9RsDvY690GU6XZ+Zev79nRKs9uVSqqlcGv+YPoB3zlDjmks51fm0HovgWWsCDbDgP4/FXPFKzr0Ht6qnYjJ=
      - secure: Wl1/oERtbz739uq+cfHQdpXGC/ZIX1l9HBihyTSt0qta7HlqQeCHtCQfpbq92BYj518CZjNl3ijXlYaXOoW4Z1L2VGzJwxNVdiG2XVkUrXfTO6i711Q/f6ezINlDhRhH+Sn1GhFPB8x7i5vnlqSvMqG19x2mfPsD50yi/58elU7t3zUg5HnBpHfyCdrlaa1pI/sHYIog4Y/Nm3H6/9WDu5ErnhmSKT9LCHdXDXn8AO8UfQXP/eMHUAMdnn8LP/+HtGXmI1Jij9UFaB1PTMyKRCMiVizMDgMqtjXhzBqg8Wqy6pp2yicSEn4JVgBM26vsNQwHXgz3kut4FwlY7Aph8Mx61jU8OvVh/vD6y1gm7r7PW4lcy1PT3pTtfL2XLH3p0/cl+WqHJIfupyOZg/z0dEd0JKJAxJ7XR3y6Z0QVTKe0QTSOO8O5g+EfuyoJFC4d28G8gM+Zc1OctpXOMrU0l4x3PDrb8xoxugsUMpYfUIQl7L9Dxr6PqHbDIgNM/5N5L3ZwWiI12fKtIqfurVJ2jsA9ahzCskzRSK745lwIPrpw6NVPjN8CzbTWZjyR9aMuxpHO+ptMmXxjo3asA7tJQDBtfbAWWz0FGro429UK3IWa5dgtVQpP2GG4/VWtUM1CUhG9x74FpojIHa4EzpLji=
        [...]
    

    Travis在构建时将这些secure条目转换为环境变量。

    还有几点评论:

    祝你好运。

相关问题