7.6.2.3. 教程:管道中的二进制工件


OpenShift 上的 Jenkins 允许在适当的工具中使用从属镜像来构建您的代码。例如,您可以使用 maven slave 从代码存储库构建 WAR。但是,构建此工件后,您需要将其提交到包含运行代码的适当运行时工件的镜像。二进制构建可用于将这些工件添加到运行时镜像中。在以下教程中,我们将创建一个 Jenkins 管道,以使用 maven slave 构建 WAR,然后使用带有 Dockerfile 的二进制构建将该 WAR 添加到 wildfly 运行时镜像中。

  1. 为您的应用程序创建新目录:

    $ mkdir mavenapp
    $ cd mavenapp
  2. 创建一个 Dockerfile,它将 WAR 复制到 wildfly 镜像内部的适当位置,以进行执行。将以下内容复制到名为 Dockerfile 的本地文件中:

    FROM wildfly:latest
    COPY ROOT.war /wildfly/standalone/deployments/ROOT.war
    CMD  $STI_SCRIPTS_PATH/run
  3. 为该 Dockerfile 创建新的 BuildConfig:

    注意

    这将自动启动构建,该构建最初将失败,因为 ROOT.war 构件还不可用。以下管道将使用二进制构建将该 WAR 传递给构建。

    $ cat Dockerfile | oc new-build -D - --name mavenapp
  4. 使用 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: []
  5. 创建管道构建。如果 Jenkins 没有部署到项目中,使用管道创建 BuildConfig 将导致 Jenkins 部署。Jenkins 准备好构建管道前可能需要几分钟时间。您可以通过调用 oc rollout status dc/jenkins 检查 Jenkins rollout 的状态:

    $ oc create -f ./mavenapp-pipeline.yml
  6. Jenkins 就绪后,启动前面定义的管道:

    $ oc start-build mavenapp-pipeline
  7. 当管道完成构建后,使用 new-app 部署新应用程序并公开其路由:

    $ oc new-app mavenapp
    $ oc expose svc/mavenapp
  8. 使用您的浏览器,进入应用程序的路由:

    $ oc get route mavenapp
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.