Я получаю следующий вывод ошибки при запуске шага подготовки плагина выпуска 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)
Можете ли вы поделиться некоторыми подробностями об ошибке? Насколько я знаю, первоначальная проблема заключается в том, что команда SCM обнаруживает ref HEAD в текущей ветке. Когда мы устанавливаем fetchDepth:0
для оформления всей ветки, исходная проблема должна быть решена.
Пожалуйста, обратитесь к обновлению в моем ответе. Вам нужно запустить git config --global
, чтобы настроить имя пользователя и адрес электронной почты, чтобы решить эту проблему. И вам нужно установить persistCredentials: true
, чтобы установить учетные данные git.
И вы можете проверить, содержит ли папка .git в репозитории файл .git/config.lock
. Если да, вы можете удалить его.
@KevinLu-MSFT Я все еще получаю сообщение об ошибке даже после того, как удалил файл конфигурации и добавил упомянутые комментарии. ошибка: не удалось заблокировать файл конфигурации /home/jenkins/.gitconfig: разрешение отклонено
@ Dev001 Dev001 Какой агент вы используете? Самостоятельный агент или агент, размещенный в Microsoft? Если возможно, вы можете попробовать использовать агент, размещенный Microsoft, для запуска конвейера, чтобы убедиться, что он может работать.
Если вы используете автономный агент, вы можете вручную войти в систему на локальном компьютере, где находится агент, и запустить команду `git config --global user.name. Затем вы можете пропустить шаг настройки git в Azure Pipelines.
@KevinLu-MSFT Пробовал в агенте, размещенном в Microsoft, получаю ту же ошибку: не удалось обнаружить текущую ветку: фатальный: ref HEAD не является символической ссылкой
Вы установили fetcheepeep:0 на этапе оформления заказа?
да, все это - проверка: self fetchDepth: 0 persistCredentials: true
Можете ли вы поделиться с нами определением конвейера?
Можете ли вы попробовать добавить «имя ветки git checkout» перед задачей maven и проверить результат?
Я добавил git checkout $(Build.SourceBranch) в нижней части «Добавлено git Identity», получил ошибку: pathspec 'refs/heads/feature/23972-Pipeline-To-Release' не соответствует ни одному файлу(ам) известно git
Пожалуйста, попробуйте запустить команду: git checkout $(Build.SourceBranchName)
, если вам нужно использовать переменную.
Давайте продолжим обсуждение в чате.
Я проверил последнюю ошибку. Пожалуйста, попробуйте запустить команду: git checkout feature/$(Build.SourceBranchName)
@ Dev001 Dev001 Раньше я пропустил комментарий в чате. Я проверил проблему с разрешением сейчас. Когда вы используете конвейер для создания ветки, для выполнения действия будет использоваться учетная запись службы. Вам необходимо предоставить разрешение на участие следующим двум учетным записям служб: ProjectName Build Service (OrganizationName) и Project Collection Build Service (OrganizationName). Не стесняйтесь, дайте мне знать, если это сработает.
@KevinLu-MSFT Спасибо, это сработало, но как я могу обобщить сценарий идентификации git для всех типов ветвей, таких как исправление ошибок/функция/улучшение. на данный момент ветка указана в скрипте
@ Dev001 Dev001 нет встроенной переменной, которая могла бы напрямую получить ожидаемое имя. Чтобы удовлетворить ваши требования, вы можете использовать выражение replace для создания пользовательской переменной с ожидаемым именем ветки. Обратитесь к моему обновлению 2 в моем ответе. Не стесняйтесь, дайте мне знать, если это сработает.
@KevinLu-MSFT Большое спасибо, обновление 2 заработало :)
@KevinLu-MSFT Теперь я сталкиваюсь с ошибкой, как показано ниже, когда при запуске mvn Release подготовить «Этот репозиторий настроен для Git LFS, но 'git-lfs' не найден на вашем пути. Если вы больше не хотите использовать Git LFS, удалите этот крючок, удалив .git/hooks/post-commit ".
неудачно: фатальный: 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)
Я добавил fetchDepth:0, после его добавления я столкнулся с еще одной ошибкой: