使用带有Openshift/jenkins客户端插件的管道从Dockerfile构建映像

使用带有Openshift/jenkins客户端插件的管道从Dockerfile构建映像,openshift,Openshift,我正在尝试设置OpenShift Jenkins管道,以: 从git获取源代码。源代码包括一个Dockerfile 运行测试 使用Dockerfile构建映像 将图像推送到Imagestream 我已经用Docker策略创建了一个BuildConfig,它实际上可以在没有管道的情况下工作。问题是我不知道如何运行测试 如果我尝试从管道启动构建,它不会触发构建 我走对了吗?对于这样的项目,最好的方法是什么?我应该继续依赖OpenShift特定的工具吗?还是搬到普通的库伯内特斯 我正在使用一个新的管道

我正在尝试设置OpenShift Jenkins管道,以:

  • 从git获取源代码。源代码包括一个
    Dockerfile
  • 运行测试
  • 使用Dockerfile构建映像
  • 将图像推送到Imagestream
  • 我已经用
    Docker
    策略创建了一个
    BuildConfig
    ,它实际上可以在没有管道的情况下工作。问题是我不知道如何运行测试

    如果我尝试从管道启动构建,它不会触发构建

    我走对了吗?对于这样的项目,最好的方法是什么?我应该继续依赖OpenShift特定的工具吗?还是搬到普通的库伯内特斯

    我正在使用一个新的管道

    这是我的BuildConfig:

    kind: "BuildConfig"
    apiVersion: "v1"
    metadata:
      name: "front-end-build"
    spec:
      runPolicy: "Serial"
      nodeSelector:
        hostname: "vhkdld518"
      source:
        git:
          uri: "https://kraporta@bitbucket/scm/~kraporta/test-kube.git"
      strategy:
        dockerStrategy:
          from:
            kind: "ImageStreamTag"
            name: "nginx:alpine"
          dockerfilePath: Dockerfile
      output:
        to:
          kind: "ImageStreamTag"
          name: "front-end:latest"
    
    以下是管道:

    node {
        stage('build') {
            openshift.withCluster() {
                openshift.withProject() {
                  echo "Using project: ${openshift.project()}"
                  def builds = openshift.selector("bc", "front-end-build").related('builds')
                  builds.describe()
                  timeout(5) { 
                    builds.untilEach(1) {
                        it.describe()
                        echo "Inside loop: ${it}"
                        return (it.object().status.phase == "Complete")
                    }
                  }
                }
            }
        }
    }
    

    非常感谢

    我知道这是个老问题,但我想把它作为参考

    问题: 缺少步骤,您尚未启动构建过程,因此没有构建

    解决方案: 我们需要在获取构建之前启动构建过程,如下所示:

    def builds = openshift.selector("bc", "front-end-build").related('builds')
    
    要做到(有很多方法可以做到):


    检查:

    所以,您想做什么似乎并不清楚。你想让詹金斯执行Docker构建?然后我想你会想把源代码拉到Jenkins中,然后启动docker build。。然后,您可以对OpenShift注册表进行身份验证,并执行
    docker推送操作
    。或者,您似乎正在定义构建,让OpenShift执行构建,但使用Jenkins触发它。我在Jenkins管道中没有看到任何触发构建的东西,只列出了它们。您可以完全跳过Jenkins,使用git webhook触发OpenShift的构建。
    def buildConfig = openshift.selector("bc", "front-end-build")
    openshift.startBuild("front-end-build") # we started the build process
    def builds = buildConfig.related('builds')