首先让我简单介绍一下我想要实现的用例。
mvn clean install
。我也可以用mvn package
创建一个可执行jar,我可以在Docker镜像中使用它。docker-compose up
启动我的环境。 这很好,但这是一个异步的步骤:我不知道让所有服务完全启动接受请求需要多长时间。docker-compose down
来拆除测试环境。waitUntil
步骤,但我正在寻找一些指导...... waitUntil
步骤中调用此脚本吗?答案 0 :(得分:0)
我是否应该实现一个简单的shell脚本,该脚本在循环中向我的某个应用REST端点发出HTTP请求,并在应用发送响应后立即完成?我应该在
waitUntil
步骤中调用此脚本吗?
是的,这是一种合法的方法。
您也可以将其折叠到运行测试的脚本中。为了使Pipeline脚本保持简洁和重点,并使其更容易单独测试逻辑,将该脚本存储在SCM中。假设它是在Bash中(但Python或其他什么工作正常):
while :
do
if curl http://endpoint/
then
echo Up and running
break
else
echo Still waiting
fi
done
make test
然后您的Pipeline脚本可以读取类似
的内容node {
stage 'build'
checkout scm
sh 'mvn clean install'
stage 'test'
sh 'docker-compose up'
try {
sh './run-tests-when-ready'
finally {
sh 'docker-compose down'
}
}
当然,如果您愿意,可以将对docker-compose
的调用放入这样的外部脚本中。在Bash中可以可靠地进行清理(可以使用trap EXIT '…'
),在实际语言中更容易。
答案 1 :(得分:0)
我最终在Jenkinsfile中做了类似的事情:
stage 'Validation'
dir("microservice") {
sh "docker-compose down"
sh "docker-compose up &"
}
waitUntil {
def appIsReady = false
try {
echo "Checking Spring Boot status page via ${GAMEDOCK_URL}"
sh "set +e; curl -f -sL -w \"%{http_code}\\n\" ${GAMEDOCK_URL} -o /dev/null; echo \$? > springBootAppStatus; return 0"
def status = readFile('springBootAppStatus').trim()
echo 'status: ' + status
appIsReady = (status == '0')
} catch (e) {
echo 'exception: ' + e
appIsReady = false
}
echo 'return appIsReady'
return appIsReady == true
}
echo "application is ready"