创建部署问题时,请参考下面模板,你提供的信息越多,越容易及时获得解答。如果未按模板创建问题,管理员有权关闭问题。
确保帖子格式清晰易读,用 markdown code block 语法格式化代码块。
你只花一分钟创建的问题,不能指望别人花上半个小时给你解答。

操作系统信息
例如:虚拟机,Centos7.9,8C/16G

Kubernetes版本信息
kubectl version

Client Version: version.Info{Major:“1”, Minor:“23”, GitVersion:“v1.23.10”, GoVersion:“go1.17.13”, Compiler:“gc”, Platform:“linux/amd64”}

Server Version: version.Info{Major:“1”, Minor:“23”, GitVersion:“v1.23.10”, GoVersion:“go1.17.13”, Compiler:“gc”, Platform:“linux/amd64”}

容器运行时
Client:

Version: 20.10.8

API version: 1.41

Go version: go1.16.6

Git commit: 3967b7d

Built: Fri Jul 30 19:50:40 2021

OS/Arch: linux/amd64

Context: default

Experimental: true

Server: Docker Engine - Community

Engine:

Version: 20.10.8

API version: 1.41 (minimum version 1.12)

Go version: go1.16.6

Git commit: 75249d8

Built: Fri Jul 30 19:55:09 2021

OS/Arch: linux/amd64

Experimental: false

containerd:

Version: v1.4.9

GitCommit: e25210fe30a0a703442421b0f60afac609f950a3

runc:

Version: 1.0.1

GitCommit: v1.0.1-0-g4144b638

docker-init:

Version: 0.19.0

GitCommit: de40ad0

KubeSphere版本信息
例如:v3.4.0。在线安装。使用kk安装。

问题是什么

想使用maven 3.9.6 和 jdk21打包,自定义了agent,Dockerfile内容如下:

FROM eclipse-temurin:21-jdk

RUN apt-get update \

&& apt-get install -y ca-certificates curl git openssh-client –no-install-recommends \

&& rm -rf /var/lib/apt/lists/*

# common for all images

LABEL org.opencontainers.image.title=“Apache Maven”

LABEL org.opencontainers.image.source=https://github.com/carlossg/docker-maven

LABEL org.opencontainers.image.url=https://github.com/carlossg/docker-maven

LABEL org.opencontainers.image.description=“Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.”

ENV MAVEN_HOME=/usr/share/maven

COPY –from=maven:3.9.9-eclipse-temurin-17 ${MAVEN_HOME} ${MAVEN_HOME}

COPY –from=maven:3.9.9-eclipse-temurin-17 /usr/local/bin/mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh

COPY –from=maven:3.9.9-eclipse-temurin-17 /usr/share/maven/ref/settings-docker.xml /usr/share/maven/ref/settings-docker.xml

RUN ln -s ${MAVEN_HOME}/bin/mvn /usr/bin/mvn

ARG MAVEN_VERSION=3.9.9

ARG USER_HOME_DIR=“/root”

ENV MAVEN_CONFIG=“$USER_HOME_DIR/.m2”

ENTRYPOINT [“/usr/local/bin/mvn-entrypoint.sh”]

CMD [“mvn”]

jenkins-casc-config的jenkins_user.yam内,添加了如下内容:

     - name: "mavenjdk21"
        label: "mavenjdk21"
        inheritFrom: "maven"
        containers:
        - name: "maven"
          image: "harbor.host.com/public/maven:3.9.6-jdk21"
        volumes:
        - hostPathVolume:
            hostPath: "/var/run/docker.sock"
            mountPath: "/var/run/docker.sock"
        - hostPathVolume:
            hostPath: "/var/data/jenkins_maven_cache"
            mountPath: "/root/.m2"
        - hostPathVolume:
            hostPath: "/var/data/jenkins_sonar_cache"
            mountPath: "/root/.sonar/cache"
        - hostPathVolume:
            hostPath: "/usr/bin/docker"
            mountPath: "/usr/bin/docker"
        - hostPathVolume:
            hostPath: "/usr/bin/kubectl"
            mountPath: "/usr/bin/kubectl"
        - hostPathVolume:
            hostPath: "/usr/bin/envsubst"
            mountPath: "/usr/bin/envsubst"
        yaml: |
          spec:
            containers:
              - name: "maven"
                volumeMounts:
                  - name: config-volume
                    mountPath: /usr/share/maven/conf/settings.xml
                    subPath: settings.xml
            volumes:
              - name: config-volume
                configMap:
                  name: ks-devops-agent
                  items:
                    - key: MavenSetting
                      path: settings.xml

jenkinsfile流水线如下:

pipeline {

agent {

    node {

      label 'mavenjdk21'

   }

}

environment {

           KS_SPACE = 'dev'

           DOCKER_CREDENTIAL_ID = 'harbor-id'

           GITHUB_CREDENTIAL_ID = 'github-id'

           KUBECONFIG_CREDENTIAL_ID = 'kubeconfig'

           REGISTRY = 'harbor.ktiis.com'

           DOCKERHUB_NAMESPACE = 'cdb'

           GITHUB_ACCOUNT = 'wangzongce'

           APP_NAME = 'manage-center-start'

           ALIAS_NAME = '管理服务'

}

stages {

    stage ('build & push') {

        steps {

            container ('maven') {

                sh 'mvn  -Dmaven.test.skip=true -gs \`pwd\`/ops/configuration/settings.xml -U clean package'

                sh 'cd $APP_NAME && docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$KS_SPACE-$BUILD_NUMBER .'

                withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) {

                    sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'

                    sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$KS_SPACE-$BUILD_NUMBER'

                }

            }

        }

    }

}

    stage('deploy to server') {

              steps {

                 container ('mavenjdk21') {

                              withCredentials([

                                  kubeconfigFile(

                                  credentialsId: env.KUBECONFIG_CREDENTIAL_ID,

                                  variable: 'KUBECONFIG')

                                  ]) {

                                  sh 'envsubst < /ops/dev/deploy/devops-sample.yaml | kubectl apply -f -'

                                  }

                            }

              }

        }

}

}

执行到最后一步stage(‘deploy to server’)后失败,报错如下:

io.fabric8.kubernetes.client.http.WebSocketHandshakeException
at io.fabric8.kubernetes.client.okhttp.OkHttpWebSocketImpl$BuilderImpl$1.onFailure(OkHttpWebSocketImpl.java:65)
at okhttp3.internal.ws.RealWebSocket.failWebSocket(RealWebSocket.java:571)
at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:198)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:203)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Suppressed: java.lang.Throwable: waiting here
at io.fabric8.kubernetes.client.utils.Utils.waitUntilReady(Utils.java:164)
at io.fabric8.kubernetes.client.utils.Utils.waitUntilReadyOrFail(Utils.java:175)
at io.fabric8.kubernetes.client.dsl.internal.core.v1.PodOperationsImpl.exec(PodOperationsImpl.java:322)
at io.fabric8.kubernetes.client.dsl.internal.core.v1.PodOperationsImpl.exec(PodOperationsImpl.java:84)
at org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$1.doLaunch(ContainerExecDecorator.java:427)
at org.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator$1.launch(ContainerExecDecorator.java:344)
at hudson.Launcher$ProcStarter.start(Launcher.java:507)
at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:176)
at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:132)
at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep.java:320)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:319)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:193)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
at jdk.internal.reflect.GeneratedMethodAccessor2570.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:163)
at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:158)
at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:161)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:165)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:86)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)
at jdk.internal.reflect.GeneratedMethodAccessor800.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
at com.cloudbees.groovy.cps.Next.step(Next.java:83)
at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:185)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:402)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:96)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:314)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:278)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
… 3 more
Caused by: java.net.ProtocolException: Expected HTTP 101 response but was ‘400 Bad Request’
at okhttp3.internal.ws.RealWebSocket.checkResponse(RealWebSocket.java:229)
at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:196)
… 5 more
An error has occurred.

研究两天了,也没解决好,求大神帮忙,不胜感激!!!

15 天 后

stage(‘deploy to server’) 这个步骤下的container (‘mavenjdk21’)的mavenjdk21,内容改成maven

商业产品与合作咨询