【问题标题】:Travis: gpg: signing failed: secret key not availableTravis:gpg:签名失败:密钥不可用
【发布时间】:2016-07-08 23:34:40
【问题描述】:

我尝试使用 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

【问题讨论】:

  • 您使用的是什么setting.xml/pom.xml 文件?您必须将属性gpg.defaultKeyring 设置为false,将gpg.publicKeyring 设置为您的公钥,将gpg.secretKeyring 设置为您的密钥环。请参阅github.com/making/travis-ci-maven-deploy-skelton/blob/master/… 示例代码要求,您已正确设置环境变量GPG_DIR

标签: maven travis-ci gnupg openpgp


【解决方案1】:

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

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

或者,您可以使用gpg--homedir 选项更改到 GnuPG 主目录位置,但请注意 GnuPG 对正确设置、默认严格权限非常挑剔(这是一件好事)。

【讨论】:

    【解决方案2】:

    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 中的属性

    项目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 可执行文件定义参数。这是可行的,因为您已经在 .travis.yml 文件中设置了 $GPG_DIR

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

    您可能会问自己,其他 &lt;properties&gt;/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>
    

    &lt;username&gt; 是您的 Github 用户名,&lt;repository&gt; 是您的 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=
        [...]
    

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

    再多说几句:

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2017-12-31
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      相关资源
      最近更新 更多