Лазурный трубопровод:
У меня возникла проблема при попытке создать и выпустить микросервисы с помощью команд Maven mvn release:prepare release:perform
. Конвейер выдает следующую ошибку:
error: remote unpack failed: error VS403702: The push was rejected because one or more commits contain author email '' which does not match the policy-specified patterns.
Похоже, что отправка отклоняется из-за фиксации с пустым адресом электронной почты автора, что не соответствует политике организации в отношении электронных писем о фиксации.
Это для пользователя {{имя вашего проекта}} Build Service ({ваша организация}), у которого пустой адрес электронной почты.
Результат git log --pretty=format:"%h %an <%ae>" | grep '<>'
:
0fc26c311 {{название вашего проекта}} Служба сборки ({ваша организация}) <>
Кроме того, у меня уже есть несколько действительных адресов электронной почты, указанных для проверки политики репозитория/автора фиксации.
Обновления от 07.16.2024:
Ошибка:
Caused by: org.apache.maven.shared.release.scm.ReleaseScmCommandException: Unable to commit files
Provider message:
The git-push command failed.
Command output:
error: remote unpack failed: error VS403702: The push was rejected because one or more commits contain author email '' which does not match the policy-specified patterns.
To https://dev.azure.com/URL
! [remote rejected] feature/23972-Pipeline-To-Release -> feature/23972-Pipeline-To-Release (VS403702: The push was rejected because one or more commits contain author email '' which does not match the policy-specified patterns. )
error: failed to push some refs to 'https://dev.azure.com/URL'
at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin (AbstractScmCommitPhase.java:165)
at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.performCheckins (AbstractScmCommitPhase.java:145)
Скрипт:
Пожалуйста, найдите сценарий:
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
git checkout feature/$(Build.SourceBranchName)
git push origin feature/$(Build.SourceBranchName)
displayName: 'Added git identity'
- task: DownloadPipelineArtifact@2
inputs:
artifact: m2
path: $(System.DefaultWorkingDirectory)/.m2
- task: Maven@3
displayName: 'Release clean'
inputs:
mavenPomFile: '$(System.DefaultWorkingDirectory)/pom.xml'
options: '-B -X -s $(System.DefaultWorkingDirectory)/.m2/settings.xml'
goals: 'release:clean'
- task: Maven@3
displayName: 'Release prepare'
inputs:
mavenPomFile: '$(System.DefaultWorkingDirectory)/pom.xml'
options: '-B -X -s $(System.DefaultWorkingDirectory)/.m2/settings.xml'
goals: 'release:prepare'
- task: Maven@3
displayName: 'Release perform'
inputs:
mavenPomFile: '$(System.DefaultWorkingDirectory)/pom.xml'
options: '-B -X -s $(System.DefaultWorkingDirectory)/.m2/settings.xml'
goals: 'release:perform'
Если конвейер выполнит отправку здесь, будет запущен новый конвейер, у которого будет запрошенная учетная запись службы сборки. В этом случае вам, вероятно, следует проверить значение и заменить значение по умолчанию. git config --local user.email "$(build.RequestedForEmail)"
Команда «mvn Release:prepare» обновит POM-файл, а затем отправит его с новой фиксацией в исходный репозиторий в Azure Repos.
Если вы включили опцию «Commit author email validation
» и установили шаблоны в политиках репозитория, при отправке нового коммита он будет проверять, может ли адрес электронной почты автора коммита соответствовать шаблонам. Если не совпадает, он вернет эту ошибку.
При попытке зафиксировать и отправить новые изменения в Azure Repos из Azure Pipelines задача по умолчанию будет использовать учетную запись службы сборки. Чтобы избежать проблем в конвейерах, перед запуском команды «mvn release:prepare
» вы можете попробовать запустить команду «git config», чтобы установить автора коммита, который может соответствовать шаблонам, установленным в политиках репозитория.
steps:
. . .
- bash: |
git config --global user.name "User01"
git config --global user.email [email protected]
displayName: 'Set Commit Author'
. . .
При использовании этого метода при последующих шагах по фиксации новых изменений будет использоваться автор фиксации, установленный на предыдущем шаге.
Можете ли вы предоставить подробный YAML-файл вашего конвейера и подробные журналы невыполненной задачи конвейера?