Сценарий Powershell не работает, если он включен в сценарий конвейера Дженкинса

#powershell #jenkins

Вопрос:

С помощью Powershell я пытаюсь добиться следующего: Увеличьте номер сборки в файле AssemblyInfo.cs на сервере сборки. Мой сценарий выглядит так, как показано ниже, прямо сейчас, после более чем 100 итераций различных вариантов, я все еще не могу заставить его работать. Сценарий хорошо работает в консоли Powershell, но при включении в сценарий конвейера Дженкинса я получаю различные ошибки, которые трудно исправить…

 def getVersion (file) {
    def result = powershell(script:"""Get-Content '${file}' | 
    Select-String '[0-9] \.[0-9] \.[0-9] \.' | 
    foreach-object{$_.Matches.Value}.${BUILD_NUMBER}""", returnStdout: true)
    echo result
    return result
}
...
powershell "(Get-Content ${files[0].path}).replace('[0-9] \.[0-9] \.[0-9] \.[0-9] ', 
${getVersion(files[0].path)})) } | Set-Content ${files[0].path}"
...
 

Комментарии:

1. Взгляните на плагин ассемблерной версии , он в значительной степени делает то, что вы хотите из коробки. Вот ссылка на соответствующие этапы конвейера для заданий конвейера.

2. Да, я действительно наткнулся на этот плагин в самом начале … Но на его домашней странице написано «Готов к усыновлению»… это заставляло меня нервничать по поводу его использования… Поэтому решил написать свой собственный сценарий… Я проверю и попробую это сделать

3. Только что связался с менеджером … Не в порядке, чтобы использовать плагин … Придется придерживаться моего собственного сценария …

Ответ №1:

Как насчет классного подхода (с ключевыми словами Дженкинса) вместо PowerShell:

 def updtaeAssemblyVersion() {
   def files = findFiles(glob: '**/AssemblyInfo.cs')
   files.each {
       def content = readFile file: it.path
       def modifedContent = content.repalceAll(/([0-9] \.[0-9] \.[0-9] \.)([0-9] )/,"$1${BUILD_NUMBER}")
       writeFile file: it.path, text: modifedContent
   }
}
 

Он прочитает все соответствующие файлы и заменит только раздел сборки версии для каждого события, соответствующего регулярному выражению версии.

Комментарии:

1. Да, именно это я в итоге и сделал … Я смешивал классный код со сценарием Powershell … Что не очень хорошо прошло … Спасибо