Gitlab-ci 签署 Maven 工件

lim*_*kin 6 release maven-central gitlab-ci maven-gpg-plugin

我\xc2\xb4m 在 GitLab 中设置了我的 Maven 项目的 CI,我需要在将 jar 发布到 Maven 中心之前对其进行签名。(https://gitlab.com/awe-team/ade

\n

我使用 gnuPgp 生成密钥对,并将公钥添加到我的 GitLab 配置文件中。

\n

我有 GitLab-ci 工作文件夹的私钥副本吗?

\n

得到的错误是找不到密钥。

\n
[DEBUG] Configuring mojo \'org.apache.maven.plugins:maven-gpg-plugin:1.5:sign\' \n  with basic configurator -->\n  [DEBUG]   (f) ascDirectory = /builds/awe-team/ade/target/gpg\n  [DEBUG]   (f) defaultKeyring = true\n  [DEBUG]   (f) interactive = false\n  [DEBUG]   (f) passphrase = *******\n  [DEBUG]   (f) skip = false\n  [DEBUG]   (f) useAgent = true\n  [DEBUG]   (f) project = MavenProject: com.almis.ade:ade:2.0.5 @ /builds/awe- team/ade/pom.xml\n  [DEBUG] -- end configuration --\n  [DEBUG] Generating signature for /builds/awe-team/ade/target/ade-2.0.5.pom\n  gpg: directory \'/root/.gnupg\' created\n  gpg: keybox \'/root/.gnupg/pubring.kbx\' created\n  gpg: no default secret key: No secret key\n  gpg: signing failed: No secret key\n
Run Code Online (Sandbox Code Playgroud)\n

我的 .gitlab-ci.yaml 看起来行:

\n
image: maven:latest\n\nvariables:\n MAVEN_CLI_OPTS: "-X -s .m2/settings.xml --batch-mode - \n Dgpg.passphrase=$GPG_PASSPHRASE"\n MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"\n\ncache:\n  paths:\n    - .m2/repository/\n    - target/\n\nbuild:\n  stage: build\n  script:\n    - mvn $MAVEN_CLI_OPTS compile\n\ntest:\n  stage: test\n  script:\n    - mvn $MAVEN_CLI_OPTS test\n\ndeploy:\n  stage: deploy\n  script:    \n     - mvn $MAVEN_CLI_OPTS deploy\n  only:\n     - master\n
Run Code Online (Sandbox Code Playgroud)\n

我希望构建我的 jar 的版本并对其进行签名以集中发布 Maven。

\n

Luc*_*ano 1

您可以(必须)在项目范围或组/子组范围内使用CI/CD 变量,范围由您决定或由您的组织定义。

Gitlab 将变量内容传递到 CI/CD 管道,就像 Bash 中的任何其他常规变量一样,但也以文件的形式传递,因此变量不是指向内容值,而是指向为 CI/CD 管道实例创建的临时文件。

我认为文件变量更适合 gpg 密钥,因此您不必使用 stdin/stdout 处理管道或分几步导入密钥。

考虑您已经创建了一个名为 的文件类型变量MY_PGP_PRIV_KEY_PATH,因此在deploy脚本或任何其他预执行的脚本中,您将其导入到gpg容器的 中,例如:

deploy:
  stage: deploy
  script:    
     - gpg --passphrase $MY_PGP_PASSPHRASE --import $MY_PGP_PRIV_KEY
     - mvn $MAVEN_CLI_OPTS deploy
Run Code Online (Sandbox Code Playgroud)

请记住,CI/CD 变量是项目的外部数据(不可分叉的数据),因此将敏感数据放入 Gitlab ci 脚本中更安全。顺便说一句,您还必须在其中放置密码和任何其他秘密或敏感数据。