Привести к сбою конвейера, если в журнале появляется определенное предложение. Найдите подстроку, но игнорируйте определенную подстроку

В моем первом вопросе целью было намеренно вызвать сбой конвейера CI/CD, если преобразование в Web.Live.Config невозможно. Мне пришлось сохранить сборку в переменной. Если трансформация невозможна, строка "No element in the source document matches" появляется в журнале. Но: Хотя в файлах конфигурации нет ключа с «connectionString», странным образом появляется строка "No element in the source document matches '/configuration/connectionStrings'". Я хотел проигнорировать это.

Может ли кто-нибудь помочь мне найти в журнале строку, но игнорировать "No element in the source document matches '/configuration/connectionStrings'"? Я попробовал -ne, -notmatch и -notlike, но это не помогло.

Несмотря на появление строки " ... warning : No element in the source document matches '/configuration/appSettings/add[@key='anotherKEY']'", конвейер не выходит из строя.

Я новичок в PowerShell и буду признателен за вашу помощь.

-  echo "Verifying build…"
- |
 $msbuildOutput = & $MSBUILD_PATH "$Our_ASMX_PROJECT_PATH" /Target:Rebuild /property:Configuration=Live /T:Package 
 $pattern = "No element in the source document matches"
 $ignorePattern = "No element in the source document matches '/configuration/connectionStrings'" # ignore the specific message
 $relevantMatches = $pattern | Where-Object { $_ -notmatch $ignorePattern }
 if ($relevantMatches)
 {
    Write-Host "Build failed due to missing configuration key or transformation."
    exit 1
 }

Еще одна попытка:

-  echo "Verifying build…"
- |
 $msbuildOutput = & $MSBUILD_PATH "$Our_ASMX_PROJECT_PATH" /Target:Rebuild /property:Configuration=Live /T:Package 
 $pattern = "No element in the source document matches"
 $ignorePattern = "No element in the source document matches '/configuration/connectionStrings'" # ignore the specific message
 $matches = $msbuildOutput | Select-String -Pattern $pattern | ForEach-Object { $_.Line }
 $relevantMatches = $matches | Where-Object { $_.Line -notlike "*$ignorePattern*" }
 if ($relevantMatches)
 {
    Write-Host "Build failed due to missing configuration key or transformation."
    exit 1
 }

Попытка 22.07.2024

- |
 Write-Host "Verifying build…"
 $msbuildOutput = & $MSBUILD_PATH "$Our_ASMX_PROJECT_PATH" /Target:Rebuild /property:Configuration=Demo /T:Package 
 $pattern = "No element in the source document matches"
 $IgnorePattern = "No element in the source document matches '/configuration/connectionStrings'"
 # Split the long string into an array of lines
 $msbuildOutputLines = $msbuildOutput -split "(\r\n)"
 $errors = $msbuildOutputLines | Where-Object { $_ -like "*$pattern*" -and $_ -notlike "*$IgnorePattern*" }
 if ($errors)
 {
   Write-Host "Build failed due to missing configuration key or transformation."
   exit 1
 }

26.07.2024 Вывод (анонимизировано, отрывок)

''
''
'"D:\gitlab-runner-ps\builds\BuildNumber\0\aNamespace\anotherNamespace\Project\OurDirectory\ProjectName.vbproj" (Rebuild;Package Ziel) (1) ->'
'"D:\gitlab-runner-ps\builds\BuildNumber\0\aNamespace\anotherNamespace\Project\AnotherDirectory\AnotherProjectName.csproj" (Standardziel) (3:3) ->'
'"D:\gitlab-runner-ps\builds\BuildNumber\0\aNamespace\anotherNamespace\Project\EvenAnotherDir\EvenAnotherProjectName" (Standardziel) (13:5) ->'
'  D:\gitlab-runner-ps\builds\BuildNumber\0\aNamespace\anotherNamespace\Project\AnotherDir\FileName.cs(72,30): warning CS0168: Die Variable "e" ist deklariert, wird aber nie verwendet. [D:\gitlab-runner-ps\builds\BuildNumber\0\aNamespace\anotherNamespace\Project\AnotherDir\ProjectName.csproj]'

Редактировать 29.07.2024, показаны ошибки

Showing errors:
C:\Windows\TEMP\build_scriptSomeNumber\script.ps1 :
D:\gitlab-runner-ps\builds\AnotherNumber\0\aNamespace\aNamespace\Project\OurProjectPath\Web.Live.config(204,10): warning : No element in the source document matches '/configuration/appSettings/add[@key='THATKEY']'
[D:\gitlab-runner-ps\builds\AnotherNumber\0\aNamespace\aNamespace\Project\Namespace\OurProjectPath.vbproj]
D:\gitlab-runner-ps\builds\AnotherNumber\0\aNamespace\aNamespace\Project\OurCompany.ANamespace.Project.AsmxService\Web.Live.config(204,10): warning : No element in the source document matches '/configuration/appSettings/add[@key='THATKEY']' 
[D:\gitlab-runnerps\builds\AnotherNumber\0\aNamespace\aNamespace\Project\OurCompany.ANamespace.Project.AsmxService\OurProjectPath.vbproj]
In Zeile:1 Zeichen:1
+ C:\Windows\TEMP\build_scriptSomeNumber\script.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,script.ps1

Пожалуйста, отредактируйте свой вопрос, чтобы улучшить минимально воспроизводимый пример. В частности, покажите код, где определен $matches. Более того, поделитесь (при необходимости очистив) соответствующей частью файла журнала…

JosefZ 19.07.2024 17:31

У меня нет файла журнала, и я не должен его писать.

Daniel 19.07.2024 17:37

Добавьте к своему скрипту строку Set-StrictMode -Version latest, чтобы увидеть некоторые (скрытые) ошибки, сохраняя значение $ErrorActionPreference по умолчанию (Continue)…

JosefZ 19.07.2024 17:58
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Предполагая, что каждое предупреждение будет в отдельной строке, вы можете использовать это:

$MsBuildOutput = & $MSBUILD_PATH "$Our_ASMX_PROJECT_PATH" /Target:Rebuild /property:Configuration=Live /T:Package 
$pattern = "No element in the source document matches"
$IgnorePattern = "No element in the source document matches '/configuration/connectionStrings'"
$errors = $MsBuildOutput -split "`n" | where { $_ -notlike "*$IgnorePattern*" -and $_ -like "*$pattern*" }
if ($errors) { Write-Error -ErrorAction Stop -Message "$errors" }

В этом коде предполагается, что каждое предупреждение находится на отдельной строке.

Здравствуйте, ваше решение работает в онлайн-инструменте. Когда я удаляю «Ни один элемент в исходном документе не соответствует», блок if не выполняется, а когда я добавляю «Ни один элемент в исходном документе не соответствует», он выполняется. Однако в реальном конвейере сборка не завершается сбоем в любом случае. Кроме того, сегодня я написал еще немного кода, который вскоре отредактирую в своем вопросе. И здесь трубопровод не выходит из строя.

Daniel 22.07.2024 11:56

@Daniel Итак, вы говорите, что Write-Error -ErrorAction Stop выделяется, но трубопровод не выходит из строя?

y y 22.07.2024 23:41

Блок If не выполняется, как если бы §errors не было правдой.

Daniel 23.07.2024 08:59

@Daniel, так этот порт $errors = $MsBuildOutput | where { $_ -notlike "*$IgnorePattern*" -and $_ -like $pattern } не работает? как результаты в $MsBuildOutput ? это несколько строк или одна строка? и если да, то это одна строка или многострочная строка?

y y 23.07.2024 20:27

Да, $errors что-то присвоено, потому что $MsBuildOutput что-то возвращает. Это одна многострочная строка. Я распечатал результат в качестве теста.

Daniel 24.07.2024 08:53

@Daniel, если это одна многострочная строка, вам нужно сначала ее разделить, я обновил свой ответ.

y y 24.07.2024 20:10

Я уже разделился. Смотрите Attempt 7/22/2024 в моем вопросе.

Daniel 25.07.2024 08:29

@Daniel Итак, дважды проверьте, есть ли что-то в $errors, запустите $errors | Out-Host и покажите нам результаты.

y y 25.07.2024 20:31

Хорошо, теперь я написал отрывок из ответа на вопрос.

Daniel 26.07.2024 15:56

@Daniel Похоже, вы показываете вывод $MsBuildOutput, но что такое вывод $errors или $MsBuildOutput -split "`n" | where { $_ -notlike "*$IgnorePattern*" -and $_ -like "*$pattern*" }?

y y 28.07.2024 20:41

ошибка System.Object[]" cannot be converted to the type "System.String" required for the parameter "Message". The specified method is not supported.

Daniel 29.07.2024 09:00

@Daniel Хорошо, я обновил код, изменил $errors на "$errors".

y y 29.07.2024 17:51

Эй, да, я добавил вывод ошибки в свой вопрос. В сообщении об ошибке проблема упоминается только в строке 1, символ 1... @y-y

Daniel 29.07.2024 19:33

@Daniel Хорошо, выглядит великолепно, PowerShell улавливает строки с warning : No element in the source document matches '/configuration/appSettings/ и игнорирует строку с No element in the source document matches '/configuration/connectionStrings, а Write-Error фактически выдает ошибку завершения, так в чем же ваша проблема сейчас?

y y 29.07.2024 22:18

Привет @y-y, твой код теперь работает. Если ключ в LiveConfig не найден, появляется сообщение об ошибке, и конвейер завершается с ошибкой, как ожидалось. Я добавил Write-Host «Сборка не удалась из-за отсутствия ключа конфигурации или преобразования». к коду. Если ни один ключ не пропущен, конвейер работает успешно, несмотря на сообщение с /configuration/connectionStrings. Это хорошо. Спасибо за вашу помощь и за ваши настойчивые комментарии в течение последних нескольких дней. Моя проблема несколько дней назад заключалась в том, что конвейер проходил, даже если ключ отсутствовал.

Daniel 30.07.2024 11:48

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