我已经设置了Jenkins管道代码,但是我的'Gradle Build'阶段的项目文件没有通过管道传递,并且最终出现错误:找不到或在最终容器中加载主类App 消息。
您如何在“构建映像”阶段将项目文件提供给 openshiftBuild 命令?
node('gradle'){
stage('SCM Checkout'){
// Clone git repo.
}
stage('Gradle Build'){
dir('/tmp/workspace/myproject/myproject-fproj/javaDemo'){
sh 'gradle build'
}
}
stage('Build Image'){
openshiftBuild(buildConfig: 'javademo', showBuildLogs: 'true')
}
stage('Test Container Availability'){
openshiftVerifyBuild(buildConfig: 'javademo')
}
stage('Deploy Application'){
openshiftDeploy(deploymentConfig: 'javademo')
}
}
答案 0 :(得分:0)
openshiftBuild
没有参数来指定要从哪个目录构建,因为它拉取了为该应用程序设置的构建配置。这是为每个Openshift插件命令指定参数的页面:https://jenkins.io/doc/pipeline/steps/openshift-pipeline/
为解决此问题,我在Jenkinsfile中定义了以下变量:
String ocpApiServer = env.OCP_API_SERVER ? "${env.OCP_API_SERVER}" : "https://openshift.default.svc.cluster.local"
env.TOKEN = readFile('/var/run/secrets/kubernetes.io/serviceaccount/token').trim()
env.OC_CMD = "oc --request-timeout='0' --token=${env.TOKEN} --server=${ocpApiServer} --certificate-authority=/run/secrets/kubernetes.io/serviceaccount/ca.crt"
然后在我使用的“构建映像”阶段:
sh "${env.OC_CMD} start-build javademo --from-dir=build/libs --wait=true --follow=true || exit 1"
这使我可以将所需的文件从libs目录传递到s2i映像。