Gitlab-ci подписывает Maven артефакты

Я настраиваю CI моего проекта maven в GITLAB, и мне нужно подписать банки перед публикацией в maven central. ( https://gitlab.com/awe-team/ade)

Я генерирую пару ключей с помощью gnuPgp и добавляю открытый ключ в свой профиль gitlab.

Копировать ли мне свой закрытый ключ в рабочую папку gitlab-ci?

Ошибка заключается в том, что вы не можете найти ключ.

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

Мой.gitlab-ci.yaml выглядит так:

image: maven:latest

variables:
 MAVEN_CLI_OPTS: "-X -s .m2/settings.xml --batch-mode - 
 Dgpg.passphrase=$GPG_PASSPHRASE"
 MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/
    - target/

build:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS compile

test:
  stage: test
  script:
    - mvn $MAVEN_CLI_OPTS test

deploy:
  stage: deploy
  script:    
     - mvn $MAVEN_CLI_OPTS deploy
  only:
     - master

Я ожидал выпустить релиз своих фляг и подписать его, чтобы опубликовать Maven Central.

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

Имейте в виду, что переменные CI/CD — это внешние данные проекта (неразветвляемые данные), поэтому безопаснее помещать конфиденциальные данные внутри ci-скрипта Gitlab. Кстати, туда же нужно помещать пароли и любые другие секретные или конфиденциальные данные.

Другие вопросы по тегам