• DevOps
  • kubesphere3.1.1,devops工程如何升级node.js

模仿 workadround (kubesphere/ks-devops#465 (comment)):

pipeline {
  agent {
    kubernetes {
      inheritFrom 'nodejs base'
      containerTemplate {
        name 'nodejs'
        image 'node:14.19.0'
      }

    }

  }
  stages {
    stage('Clone repository') {
      agent none
      steps {
        checkout([$class: 'GitSCM', branches: [
            [name: 'main']
          ],
          extensions: [
            [$class: 'CloneOption', depth: 1, shallow: true]
          ], userRemoteConfigs: [
            [url: 'https://github.com/johnniang/vue-sample']
          ]
        ])
      }
    }

    stage('Run npm install') {
      steps {
        container('nodejs') {
          sh 'npm install'
        }

      }
    }

    stage('Run test') {
      steps {
        container('nodejs') {
          sh 'npm run test'
        }

      }
    }

    stage('Run build') {
      steps {
        container('nodejs') {
          sh 'npm run build'
        }

      }
    }

    stage('Archive artifacts') {
      steps {
        container('base') {
          sh 'zip -r dist.zip dist/'
        }

        archiveArtifacts 'dist.zip'
      }
    }

  }
}
    16 天 后

    刚试了,选用镜像版本,可以解决版本的问题

    qxh365

    因为 docker 工具是集成到 base 容器中的,官方的 Node.js 镜像是不会有 docker client,如果你想要在流水线中使用 docker 工具,请参考:

        stage('Use Docker client') {
          steps {
            container('base') {
              sh 'docker version'
              sh 'docker login'
            }
          }
        }
      4 个月 后

      johnniang 换成你这个直接报错了

      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.GeneratedMethodAccessor1808.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 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.GeneratedMethodAccessor130.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.
      7 个月 后

      johnniang 老大, 这个能给个完整的吗, 升级node 后打包成镜像, 现在升级nodejs 了, 打包没有 docker client

        3 个月 后
        4 天 后

        tomsue 参考 3楼 步骤,在 image 处指定自己的镜像;

        @linzea
        docker 命令报错问题,需要 参考 8楼 步骤,在需要执行 docker 命令的步骤中指定容器为 base - container(‘base’) {} ;

        9 天 后
        1 年 后

        方便后来者,重新构建了nodejs和maven镜像

        node版本v18.18.0,npm版本9.8.1;

        jdk版本17

        hub.docker.com/r/liyongyao/kubesphere/tags

          20 天 后

          liyongyao 感谢好心人 !!!中转后的 阿里云镜像

          registry.cn-hangzhou.aliyuncs.com/codesdancing/kubesphere:devops-builder-nodejs-podman-v1.0.0

          7 个月 后

          该镜像执行 npm -v 命令会报错

          node[1]: ../src/node_platform.cc:68:std::unique_ptr<long unsigned int> node::WorkerThreadsTaskRunner:😃elayedTaskScheduler::Start(): Assertion `(0) == (uv_thread_create(t.get(), start_thread, this))' failed.

          1: 0xb87bc0 node::Abort() [node]

          2: 0xb87c3e [node]

          3: 0xbf50fe [node]

          4: 0xbf51e1 node::NodePlatform::NodePlatform(int, v8::TracingController*, v8:😛ageAllocator*) [node]

          5: 0xb458f3 node::InitializeOncePerProcess(std::vector<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, node:😛rocessFlags::Flags) [node]

          6: 0xb45f4b node::Start(int, char**) [node]

          7: 0×7f96a0d4c590 [/lib64/libc.so.6]

          8: 0×7f96a0d4c640 __libc_start_main [/lib64/libc.so.6]

          9: 0xac3f4e _start [node]