在jenkins中,我需要使用power shell运行一些spring boot项目。我可以使用以下命令在本地执行部分操作-
mvn -f $repoLocation -D "spring-boot.run.profiles=e2e" -DskipTests=true spring-boot:run
问题在于,第一个项目运行后,它会一直等待,而不会移至下一个项目。也就是说,它不会将此命令作为后台进程运行。
有什么建议,我该怎么做?我基本上需要按照$repos
数组中的顺序启动项目。
注意-我尝试如下使用start process
,但是它只是在新的命令提示符中调用了它,并且只能运行第一个,类似于我能够实现的。
foreach ($element in $repos) {
$repoLocation = $localPath + $element.Split('/')[-1]
Write-Host('Maven build for ' + $repoLocation)
start-process -FilePath mvn -ArgumentList ("-f $repoLocation -D `"spring-boot.run.profiles=prod`" -DskipTests=true spring-boot:run") -Wait
#mvn -f $repoLocation -D "spring-boot.run.profiles=prod" -DskipTests=true spring-boot:run
Write-Host('Maven build completed for ' + $repoLocation)
$repoLocation = ''
}
答案 0 :(得分:1)
我将参考以下博客文章...
Parallel processing with PowerShell
您将要跳到Powershell作业的各个部分。您的工作可能看起来像这样...
## Using Jobs...
$repositories = $(...)
foreach ($repository in $repositories) {
Start-Job `
-Name "build-${repository}" `
-Scriptblock {
param($repository)
mvn --file .\${repository}\xml.pom -D "spring-boot.run.profiles=e2e" -DskipTests=true spring-boot:run } `
-ArgumentList $repository
}
您的Maven电话可能会有所不同,但是您对我要去的地方有所了解。 Start-Job
开始异步操作。
有关Powershell的工作有很多资料,我在这里不再赘述。
Powershell工作流程(在文章中也有详细介绍)也可能适合您的需求。 如果您对并行化空间进行更深入的研究,您将开始了解运行空间。一般来说,我喜欢运行空间,但不喜欢您正在做什么。