7.6.2.3. 教程:来自管道的二进制工件
OpenShift 上的 Jenkins 允许在适当的工具中使用从属镜像来构建您的代码。例如,您可以使用 maven
slave 从代码存储库构建 WAR。但是,构建此工件后,您需要将其提交到包含运行代码的适当运行时工件的镜像。二进制构建可用于将这些工件添加到运行时镜像中。在以下教程中,我们将创建一个 Jenkins 管道,以使用 maven
slave 构建 WAR,然后使用带有 Dockerfile
的二进制构建将该 WAR 添加到 wildfly 运行时镜像中。
为您的应用程序创建新目录:
$ mkdir mavenapp $ cd mavenapp
创建一个
Dockerfile
,它将 WAR 复制到 wildfly 镜像内部的适当位置,以进行执行。将以下内容复制到名为Dockerfile
的本地文件中:FROM wildfly:latest COPY ROOT.war /wildfly/standalone/deployments/ROOT.war CMD $STI_SCRIPTS_PATH/run
为该 Dockerfile 创建新的 BuildConfig:
注意这将自动启动构建,该构建最初将失败,因为
ROOT.war
构件还不可用。以下管道将使用二进制构建将该 WAR 传递给构建。$ cat Dockerfile | oc new-build -D - --name mavenapp
使用 Jenkins 管道创建 BuildConfig,它将构建 WAR,然后使用该 WAR 使用之前创建的
Dockerfile
构建镜像。同一模式可用于由一组工具构建二进制工件的其他平台,然后与最终软件包的不同运行时镜像组合。将以下代码保存到mavenapp-pipeline.yml
:apiVersion: v1 kind: BuildConfig metadata: name: mavenapp-pipeline spec: strategy: jenkinsPipelineStrategy: jenkinsfile: |- pipeline { agent { label "maven" } stages { stage("Clone Source") { steps { checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [ [$class: 'RelativeTargetDirectory', relativeTargetDir: 'mavenapp'] ], userRemoteConfigs: [[url: 'https://github.com/openshift/openshift-jee-sample.git']] ]) } } stage("Build WAR") { steps { dir('mavenapp') { sh 'mvn clean package -Popenshift' } } } stage("Build Image") { steps { dir('mavenapp/target') { sh 'oc start-build mavenapp --from-dir . --follow' } } } } } type: JenkinsPipeline triggers: []
创建管道构建。如果 Jenkins 没有部署到项目中,使用管道创建 BuildConfig 将导致 Jenkins 部署。Jenkins 准备好构建管道前可能需要几分钟时间。您可以通过调用
oc rollout status dc/jenkins
检查 Jenkins rollout 的状态:$ oc create -f ./mavenapp-pipeline.yml
Jenkins 就绪后,启动前面定义的管道:
$ oc start-build mavenapp-pipeline
当管道完成构建后,使用 new-app 部署新应用程序并公开其路由:
$ oc new-app mavenapp $ oc expose svc/mavenapp
使用您的浏览器,进入应用程序的路由:
$ oc get route mavenapp