#jenkins #groovy #msbuild #jenkins-pipeline
#Дженкинс #groovy #msbuild #Дженкинс-конвейер
Вопрос:
Я пытаюсь создать конвейер Jenkins для моей компании, чтобы извлекать его из Gitlab, выполнять MSBuild, публиковать артефакты в каталоге, а затем архивировать все артефакты для отправки в репозиторий или общий файловый ресурс. Приложение представляет собой веб-приложение.
Моя проблема возникает, когда я пытаюсь реализовать функцию zip из AntBuilder. Независимо от того, что я указываю для своего basedir, задание завершается неудачно, сообщая, что каталог не найден. Мой код выглядит следующим образом.
#!groovy
node('dotnet') { //select any node with a doctnet label
stage('Checkout') { //checkout the code from source
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Windows_Gtt', submoduleCfg: [], userRemoteConfigs: [[credentialsId: '99999999-9999-9999-99999', url: 'git@repos.somecompany.com:api/sharedservices.git']]])
}
stage('Build') { //build steps go here
bat 'nuget restore LandingPageSvc.sln' //restore nuget sources
bat ""${tool 'MSBUILD46_64_Pipeline'}" LandingPageSvc.sln /m /p:VisualStudioVersion=14.0" //msbuild
}
// stage('NUnit Tests') { //Unit testing steps go here
// bat '"C:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe" ./LandingPageSvc.Test/bin/Debug/LandingPageSvc.Tests.dll --result nunit-result.xml'
// }
stage('Packaging') {
bat ""${tool 'MSBUILD46_64_Pipeline'}" LandingPageSvc\LandingPageSvc.csproj /m /p:VisualStudioVersion=14.0;Configuration=Debug;PublishDestination=..\Publish\Dev /t:PublishToFileSystem"
def ant = new AntBuilder()
ant.zip(destfile: "test.zip", basedir: "./Publish/Dev")
}
stage('Publish') {
// build nuget package
//push nuget pcakage to artifactory
}
}
Итак, все остальное отлично переносится в рабочую область в агенте сборки dotnet, и я даже пытался использовать ${WORKSPACE}
in the path, и он все еще жалуется.
Не уверен, почему или в каком контексте выполняется эта конкретная функция, но, похоже, ее нет в агенте сборки dotnet или в рабочей области проекта.
Ценю любые предложения.
Ответ №1:
Может быть, вы ссылаетесь на два разных расположения файлов? В том, который вы используете..Опубликовать Dev, а в другом, который вы используете./Publish/Dev . Я думаю, что «.» и «..» будут разрешены для двух разных расположений файлов. «..» относится к родительской папке папки, в которой вы находитесь, тогда как «.» относится к папке, в которой вы находитесь.
Jenkins/ProjectBasedir/Публикация / Разработка (.) против Jenkins/Публикация / разработка (..)