Автоматически объединять ветку «разработка» с веткой «сонарное сканирование»

У нас есть ветка с именем sonar-scan (например, ветка функций), где конфигурация, связанная с SonarQube, присутствует в конвейере azure-pipelines.yml, поэтому эту ветку нельзя объединить с веткой develop из-за уникальных конфигураций.

Но нам всегда нужны последние версии кода/коммитов из ветки разработки, чтобы SonarQube их сканировал. Однако только ветка sonar-scan должна работать на локальном агенте Ubuntu (VMSS) из-за требований безопасности, поэтому нет возможности использовать пулы агентов по умолчанию в отличие от других ветвей. Кроме того, может возникнуть конфликт слияния, поскольку оба azure-pipelines.yml теперь имеют разные конфигурации.

Я пытался реализовать простой git-скрипт внутри ветки sonar-scan, но, к сожалению, пока безуспешно. Вероятно, git ведет себя в Azure DevOps иначе, чем локально.

- script: |
    git fetch origin
    git checkout develop
    git pull origin develop
    git checkout feat/sonar-scan
    git pull origin feat/sonar-scan

    git merge develop --no-commit --no-ff --allow-unrelated-histories || true
     
    // Tries to solve conflicts by keeping 'azure-pipelines.yml' from the sonar-scan branch as it is
    // --ours flag wants keep the version of .yml file in sonar-scan branch, like stash or staging
    git checkout --ours azure-pipelines.yml
    git add azure-pipelines.yml

    // Complete the merge
    git add .
    git commit -m "Auto-merge latest changes from develop"
    git push origin feat/sonar-scan

  displayName: 'Checkout and merge branch'  

Ссылка: https://marketplace.visualstudio.com/items?itemName=ShaykiAbramczyk.CreatePullRequest

В настоящее время эта задача работает только на компьютерах с Windows.

Как решить вышеуказанную проблему и найти оптимальное решение?

Рассматривали ли вы возможность создания нового конвейера, ссылающегося на другой файл .yml в sonar-branch? Поскольку нет sonar.yml из ветки develop, не будет конфликтов, когда PR объединяет код из ветки develop в sonar-branch для сканирования.

Alvin Zhao - MSFT 20.06.2024 11:48

Итак, требуется вытащить код из ветки develop и сохранить azure-pipelines.yml без изменений в sonar-branch?

Alvin Zhao - MSFT 20.06.2024 11:51

@AlvinZhao-MSFT -> Да, это правильно. Всегда объединяйте ветку «разработка» с веткой «сонарное сканирование». Не наоборот. Разработчик будет использовать ветку «sonar-scan» только для проверки проблемы с кодом. И это была опечатка, поэтому название ветки — «sonar-scan».

kishorK 20.06.2024 15:26

Работает ли у вас конвейер YAML?

Alvin Zhao - MSFT 20.06.2024 15:30

@AlvinZhao-MSFT -> Во-первых, спасибо за ваши искренние усилия. Что ж, частично это сработало, но он не может перенести последний код в ветку функций. Поэтому переименовал «azure-pipeline.yml» в *-sq.yml и создал отдельный новый конвейер из нового файла *-sq.yml. Он также создает 2 совершает. Дополнительную информацию я добавляю под ответом.

kishorK 20.06.2024 16:28
Стоит ли изучать 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
5
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлять

Насколько я тестировал, предыдущий рабочий процесс может переносить как вновь созданные, так и обновленные файлы из ветки develop в sonar-branch и сохранять azure-pipelines.yml в sonar-branch без изменений.

Непонятно, почему изменения в вашем файле index.html из ветки develop не удалось объединить с веткой sonar-branch, но вы также можете попробовать описанный ниже рабочий процесс, как мы обсуждали.

  1. Создайте новую ветку под названием newsonar на основе последнего коммита в ветке develop;
  2. Создайте новый файл sonar.yml с тем же содержимым, что и файлы azure-piplines.yml из sonar-branch, чтобы выполнить те же шаги сканирования SonarQube в пуле агентов VMSS;
  3. Создайте новый конвейер, ссылающийся на файл sonar.yml;
  4. Когда код из ветки develop готов к сканированию, вы можете создать PR для объединения изменений/коммитов из ветки develop в ветку newsonar;
  5. Слияние должно завершиться без перебазирования, чтобы файл sonar.yml существовал только в ветке newsonar и, следовательно, в этом файле не было конфликтов;
  6. Если вам нужно настроить сканы SonarQube, вы можете отредактировать файл определения sonar.yml в ветке newsonar; и не трогайте остальные файлы в ветке newsonar, так как изменения в них всегда должны быть перенесены из ветки develop.

Учитывая требование объединить код из ветки develop и сохранить azure-pipelines.yml в sonar-branch без изменений, вы можете попробовать приведенный ниже скрипт, определенный в файле azure-pipelines.yml из sonar-branch.

steps:
- checkout: self
  clean: true # To make sure no legacy left in the System.DefaultWorkingDirectory that may affect the git commands in each run, since running in self-hosted agent pool.
  fetchDepth: 0 # Disable shallow fetch to keep the related history between branches
  persistCredentials: true

- script: |
    git config --global user.email "$(Build.RequestedForEmail)"
    git config --global user.name "$(Build.RequestedFor)"

    echo "================ 1. Checkout sonar-branch =============== = "
    git checkout -b sonar-branch

    echo "================ 2. Fetch develop =============== = "
    git fetch origin develop

    echo "================ 3. Merge develop into sonar-branch =============== = "
    git merge -X ours --no-commit origin/develop

    echo "================ 4. Restore azure-pipelines.yml from sonar-branch =============== = "
    git checkout sonar-branch -- azure-pipelines.yml
    
    echo "================ 5. Commit the merge =============== = "
    git commit -m "Merge develop into sonar-branch, excluding azure-pipelines.yml"

    echo "================ 6. Push the merge to remote sonar-branch =============== = "
    git push origin sonar-branch

  displayName: 'Merge develop into sonar-branch and push'

Совсем забыл, что не могу сюда добавлять скриншоты, поэтому попробую объяснить. Поэтому мне все еще не удалось получить последний код из файла ветки разработки (index.html): GIT LOGS ---> Автоматическое слияние index.html Автоматическое слияние прошло хорошо; остановлен перед фиксацией по запросу

kishorK 20.06.2024 16:40

В этом файле тоже есть конфликты?

Alvin Zhao - MSFT 20.06.2024 16:48

К счастью, конфликтов в файле и конвейере не произошло successful

kishorK 20.06.2024 16:51

Итак, конвейер прошел успешно, но обновление в файле index.html не было перенесено из ветки разработки в ветку сонара, верно?

Alvin Zhao - MSFT 20.06.2024 16:56

Как насчет этого обходного пути. Создайте новую ветку, скажем newsonar, на основе последнего коммита в ветке develop -> Создайте новый файл sonar.yml с вашими работами сонара (то же содержимое, что и в файле azure-pipeline.yml из sonar-branch) -> Создайте новый конвейер с файлом sonar.yml в ветке newsonar. Это позволит избежать переименования коммитов в одном и том же файле azure-pipeline.yml.

Alvin Zhao - MSFT 20.06.2024 16:59

Правильный. Бывший. только что добавил комментарий в ветку develop, но файл index.html в ветке sonar-scan не обновлен.

kishorK 20.06.2024 16:59

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

kishorK 20.06.2024 17:00

Извини, @kishorK, я сейчас не на работе. Я продолжу работу над этим вопросом завтра во время своей смены. Спасибо за ваше время и усилия.

Alvin Zhao - MSFT 20.06.2024 17:01

еще раз я ценю ваши усилия. Однако я отправил ответ в приватный чат? ты все еще можешь получить доступ к чату?

kishorK 21.06.2024 09:42

Обновил ответ с помощью clean; true, как мы обсуждали. Приятно работать с вами и большое спасибо за усилия и обмен информацией.

Alvin Zhao - MSFT 21.06.2024 12:07

Спасибо за ваше время и навыки. Всегда приятно с вами работать. @Элвин

kishorK 21.06.2024 12:09

Другие вопросы по теме