Ошибка обнаружения текущей ветки: фатальный: ref HEAD не является символической ссылкой в ​​выпуске mvn — Azure Pipeline

Я получаю следующий вывод ошибки при запуске шага подготовки плагина выпуска 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)

153
1

Ответ:

Решено

неудачно: фатальный: 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)

Интересные вопросы для изучения

Как настроить проверку утверждения конвейера Azure для развертывания в приложениях-функциях Azure?Ошибка: невозможно зарегистрировать свойство «TestType» как тип значения «System.Guid», поскольку оно уже зарегистрировано как «System.String»Использование API Azure Devops в Python для получения всех измененных файлов в PRИзмените обработку заданий с FIFO на LIFOПочему я получаю сообщение об ошибке: Ошибка: шаблон файла шаблона соответствует каталогу, а не файлу: /home/vsts/work/1/s в моем файле конвейера файлов yaml?Использование многострочной строки в качестве параметра в шаблоне задачи Azure DevOpsКак настроить проверку утверждения конвейера Azure для развертывания в приложениях-функциях Azure?Измените обработку заданий с FIFO на LIFOРазвертывание приложения Teams Toolkit через CI/CD завершается с ошибкой «Эта команда работает только для проекта, созданного с помощью Teams Toolkit»Переменные среды как параметр объекта типа в конвейерах Azure DevOps