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

操作系统信息
阿里云ECS服务器,linux,4C/8G

Kubernetes版本信息
例如:v1.20.4。8节点。

容器运行时
docker

KubeSphere版本信息
v3.1.1。在线安装。全套安装。

问题是什么
devops流水线部署react项目。编译项目报错:

  • yarn install
    yarn install v1.22.17
    warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
    [¼] Resolving packages…
    [2/4] Fetching packages…
    error http-proxy-middleware@2.0.0: The engine “node” is incompatible with this module. Expected version “>=12.0.0”. Got “10.16.3”
    error Found incompatible module.
    info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
    script returned exit code 1
    提示node.js版本过低,node.js为kubesphere平台devops工程自带的,请问如何升级node.js版本呢?
5 天 后

模仿 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]