如何在jenkins文件中使用openshiftBuild?

时间:2018-08-09 19:36:33

标签: jenkins openshift jenkins-pipeline

我已经设置了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')
    }
}

1 个答案:

答案 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映像。