以下是多分支管道中使用的Jenkinsfile的摘录:
def GetNextFreePort() {
lock ('portProvider') {
def port = powershell(returnStdout: true, script: '((Get-NetTCPConnection | Sort-Object -Property LocalPort | Select-Object -Last 1).LocalPort) + 1')
}
return port.trim()
}
我想获得端口号(在Windows上)的行为每个分支返回一个不同的端口。但是,尽管使用了可锁定资源插件,但我无法序列化对获取下一个可用端口的powershell标注的访问。
答案 0 :(得分:0)
最后,我设法通过Jenkins锁资源插件实现了我想做的事情。这是我获取外部端口号并启动容器的方法:
def StartContainer() {
PORT_NUMBER = GetNextFreePort()
bat "docker run -e \"ACCEPT_EULA=Y\" -e \"SA_PASSWORD=P@ssword1\" --name ${CONTAINER_NAME} -d -i -p ${PORT_NUMBER}:1433 microsoft/mssql-server-linux:2017-GA"
powershell "While (\$((docker logs ${CONTAINER_NAME} | select-string ready | select-string client).Length) -eq 0) { Start-Sleep -s 1 }"
}
这是对此的调用,其中包含对锁的调用:
stage('start container') {
steps {
RemoveContainer()
timeout(time: 20, unit: 'SECONDS') {
lock ('create SQL Server container') {
StartContainer()
}
}
}
}