Ошибка обнаружения текущей ветки: фатальный: 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)

Я добавил fetchDepth:0, после его добавления я столкнулся с еще одной ошибкой:

Dev0001 05.07.2024 11:23

Можете ли вы поделиться некоторыми подробностями об ошибке? Насколько я знаю, первоначальная проблема заключается в том, что команда SCM обнаруживает ref HEAD в текущей ветке. Когда мы устанавливаем fetchDepth:0 для оформления всей ветки, исходная проблема должна быть решена.

Kevin Lu-MSFT 05.07.2024 11:24

Пожалуйста, обратитесь к обновлению в моем ответе. Вам нужно запустить git config --global, чтобы настроить имя пользователя и адрес электронной почты, чтобы решить эту проблему. И вам нужно установить persistCredentials: true, чтобы установить учетные данные git.

Kevin Lu-MSFT 05.07.2024 11:46

И вы можете проверить, содержит ли папка .git в репозитории файл .git/config.lock. Если да, вы можете удалить его.

Kevin Lu-MSFT 05.07.2024 11:53

@KevinLu-MSFT Я все еще получаю сообщение об ошибке даже после того, как удалил файл конфигурации и добавил упомянутые комментарии. ошибка: не удалось заблокировать файл конфигурации /home/jenkins/.gitconfig: разрешение отклонено

Dev0001 05.07.2024 16:59

@ Dev001 Dev001 Какой агент вы используете? Самостоятельный агент или агент, размещенный в Microsoft? Если возможно, вы можете попробовать использовать агент, размещенный Microsoft, для запуска конвейера, чтобы убедиться, что он может работать.

Kevin Lu-MSFT 08.07.2024 08:42

Если вы используете автономный агент, вы можете вручную войти в систему на локальном компьютере, где находится агент, и запустить команду `git config --global user.name. Затем вы можете пропустить шаг настройки git в Azure Pipelines.

Kevin Lu-MSFT 08.07.2024 10:09

@KevinLu-MSFT Пробовал в агенте, размещенном в Microsoft, получаю ту же ошибку: не удалось обнаружить текущую ветку: фатальный: ref HEAD не является символической ссылкой

Dev0001 11.07.2024 18:29

Вы установили fetcheepeep:0 на этапе оформления заказа?

Kevin Lu-MSFT 11.07.2024 18:31

да, все это - проверка: self fetchDepth: 0 persistCredentials: true

Dev0001 11.07.2024 18:38

Можете ли вы поделиться с нами определением конвейера?

Kevin Lu-MSFT 11.07.2024 18:44

Можете ли вы попробовать добавить «имя ветки git checkout» перед задачей maven и проверить результат?

Kevin Lu-MSFT 11.07.2024 19:04

Я добавил git checkout $(Build.SourceBranch) в нижней части «Добавлено git Identity», получил ошибку: pathspec 'refs/heads/feature/23972-Pipeline-To-Release' не соответствует ни одному файлу(ам) известно git

Dev0001 12.07.2024 11:24

Пожалуйста, попробуйте запустить команду: git checkout $(Build.SourceBranchName), если вам нужно использовать переменную.

Kevin Lu-MSFT 12.07.2024 11:33

Давайте продолжим обсуждение в чате.

Dev0001 12.07.2024 14:20

Я проверил последнюю ошибку. Пожалуйста, попробуйте запустить команду: git checkout feature/$(Build.SourceBranchName)

Kevin Lu-MSFT 12.07.2024 14:27

@ Dev001 Dev001 Раньше я пропустил комментарий в чате. Я проверил проблему с разрешением сейчас. Когда вы используете конвейер для создания ветки, для выполнения действия будет использоваться учетная запись службы. Вам необходимо предоставить разрешение на участие следующим двум учетным записям служб: ProjectName Build Service (OrganizationName) и Project Collection Build Service (OrganizationName). Не стесняйтесь, дайте мне знать, если это сработает.

Kevin Lu-MSFT 17.07.2024 09:18

@KevinLu-MSFT Спасибо, это сработало, но как я могу обобщить сценарий идентификации git для всех типов ветвей, таких как исправление ошибок/функция/улучшение. на данный момент ветка указана в скрипте

Dev0001 17.07.2024 11:17

@ Dev001 Dev001 нет встроенной переменной, которая могла бы напрямую получить ожидаемое имя. Чтобы удовлетворить ваши требования, вы можете использовать выражение replace для создания пользовательской переменной с ожидаемым именем ветки. Обратитесь к моему обновлению 2 в моем ответе. Не стесняйтесь, дайте мне знать, если это сработает.

Kevin Lu-MSFT 17.07.2024 11:33

@KevinLu-MSFT Большое спасибо, обновление 2 заработало :)

Dev0001 17.07.2024 18:24

@KevinLu-MSFT Теперь я сталкиваюсь с ошибкой, как показано ниже, когда при запуске mvn Release подготовить «Этот репозиторий настроен для Git LFS, но 'git-lfs' не найден на вашем пути. Если вы больше не хотите использовать Git LFS, удалите этот крючок, удалив .git/hooks/post-commit ".

Dev0001 19.07.2024 18:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
21
153
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 REST API: сопоставить шаги ручного тестового примера с результатами тестового запуска?
Не удалось завершить частичное восстановление нашей базы данных Azure DevOps
Переменные среды как параметр объекта типа в конвейерах Azure DevOps
Имя файла, начинающееся с .(точки), не отображается в конвейере Azure Devops
Visual Studio 2022 не может подключиться к проекту из-за плохих фильтров