Я получаю следующий вывод ошибки при запуске шага подготовки плагина выпуска Maven, т.е. mvn Release:clean Release:prepare Release:perform . Любые предложения о том, как решить эту проблему?
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project TEST_C: An error is occurred in the checkin process: Exception while executing SCM command. Detecting the current branch failed: fatal: ref HEAD is not a symbolic ref -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project TEST_C: An error is occurred in the checkin process: Exception while executing SCM command.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:568)
Обновления:
После добавления fetchDepth:0
Я получаю еще одну ошибку:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project measures_connect: Unable to commit files
[ERROR] Provider message:
[ERROR] The git-commit command failed.
[ERROR] Command output:
[ERROR] Author identity unknown
[ERROR]
[ERROR] *** Please tell me who you are.
[ERROR]
[ERROR] Run
[ERROR]
[ERROR] git config --global user.email "[email protected]"
[ERROR] git config --global user.name "Your Name"
[ERROR]
[ERROR] to set your account's default identity.
[ERROR] Omit --global to set the identity only in this repository.
[ERROR]
[ERROR] fatal: unable to auto-detect email address (got 'athulya_azpcontainer@3a075dbc4a82.(none)')
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project measures_connect: Unable to commit files
Provider message:
The git-commit command failed.
Command output:
Author identity unknown
Я попытался добавить идентификатор git, но получил ошибку ниже для команд
git config --global user.email $(build.RequestedForEmail)
git config --global user.name $(build.RequestedFor)
git pull origin $(Build.SourceBranch)
error: could not lock config file /home/jenkins/.gitconfig: Permission denied error: could not lock config file /home/jenkins/.gitconfig: Permission denied
Обновления от 07.11.2024:
Пожалуйста, найдите сценарий:
parameters:
- name: 'skipRelease'
type: boolean
default: false
stages:
- stage: ValidateGitCheckin
jobs:
- job: Validate
steps:
- script: |
git config --add safe.directory $(Build.SourcesDirectory)
if [ "${{ parameters.skipRelease }}" = "true" ]; then
echo "SKIP_RELEASE: Inherit parameter"
echo "##vso[task.setvariable variable=skipRelease;isoutput=true]true"
fi
displayName: "Validate git checkin"
- stage: SetupMaven
jobs:
- job: DownloadMaven
steps:
- task: DownloadSecureFile@1
name: settingsxml
inputs:
secureFile: "settings.xml"
- script: |
mkdir -p $(System.DefaultWorkingDirectory)/.m2
cp $(settingsxml.secureFilePath) $(System.DefaultWorkingDirectory)/.m2/settings.xml
displayName: "Setup Maven settings.xml"
- task: PublishPipelineArtifact@1
inputs:
path: $(System.DefaultWorkingDirectory)/.m2
artifact: m2
displayName: "Download and store Maven settings.xml to artifact"
- stage: Release
jobs:
- job: ReleaseJob
container: dockerContainer
steps:
- checkout: self
fetchDepth: 0
persistCredentials: true
- script: |
git config --local user.email "$(build.RequestedForEmail)"
git config --local user.name "$(build.RequestedFor)"
git status
if ! git diff-index --quiet HEAD --; then
echo "There are uncommitted changes"
exit 1
fi
displayName: 'Added git identity'
- task: DownloadPipelineArtifact@2
inputs:
artifact: m2
path: $(System.DefaultWorkingDirectory)/.m2
- task: Maven@3
displayName: 'Release'
inputs:
mavenPomFile: '$(System.DefaultWorkingDirectory)/pom.xml'
options: '-B -X -s $(System.DefaultWorkingDirectory)/.m2/settings.xml'
goals: 'release:clean release:prepare release:perform'
Обновлен сценарий идентификации git, как показано ниже:
git config --local user.email "$emailId"
git config --local user.name "$(build.RequestedFor)"
git checkout feature/$(Build.SourceBranchName)
неудачно: фатальный: ref HEAD не является символической ссылкой
Судя по сообщению об ошибке, Pipeline не извлекает всю ветку.
По умолчанию для параметра «Неглубокая выборка» репозитория конвейера установлено значение 1.
В этом случае ссылка будет нацелена на один коммит.
Например:
Вы можете попробовать установить fetchDepth
на 0
в конвейере YAML.
Например:
YAML-конвейер
steps:
- checkout: self
fetchDepth: 0
Или вы можете перейти к конвейеру YAML -> ... -> Триггеры -> YAML -> Получить источники -> Мелкая выборка. Вы можете отменить выбор этой опции.
Классический конвейер:
Для получения более подробной информации вы можете обратиться к этому документу: Мелкая выборка
Обновлять:
фатально: невозможно автоматически определить адрес электронной почты
Чтобы решить эту проблему, вам необходимо добавить следующий скрипт перед командой maven:
git config --global user.email "youremail"
git config --global user.name "yourname"
И вы можете установить persistCredentials: true
на этапе оформления заказа, чтобы убедиться, что учетные данные git верны.
Образец YAML:
steps:
- checkout: self
fetchDepth: 0
persistCredentials: true
- script: |
git config --global user.email "youremail"
git config --global user.name "yourname"
mvn release:prepare
Обновление2:
как я могу обобщить сценарий идентификации git для всех типов веток, таких как исправление ошибок/функция/улучшение.
Не существует встроенной переменной, которая могла бы напрямую получить имя ветки в формате: prefix/branchname
.
Чтобы удовлетворить ваши требования, вам необходимо настроить переменную на основе переменной Build.SourceBranch.
Вот пример:
variables:
branchname: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]
steps:
- checkout: self
fetchDepth: 0
persistCredentials: true
- powershell: |
git config --local user.email "$emailId"
git config --local user.name "$(build.RequestedFor)"
git checkout $(branchname)