首页 > 解决方案 > Maven/Gradle 容器无法在内部 k8s 集群上构建项目

问题描述

我正在尝试创建示例 jenkins 管道以在内部 kubernetes 集群上构建基于 maven/gradle 的应用程序。我已经通过环境变量设置了代理,此外我还在 gradle.properties 文件中插入了代理参数。每当我尝试通过gradle build它构建应用程序时都会失败并出现错误Java: READ ONLY FILE SYSTEM。我在网上搜索,发现由于jnlpgradle容器上的 UID 不同,Gradle无法访问/home/jenkins/工作区。我在 pod 上插入Pod Security Policy参数并尝试执行所有具有相同 UID 的容器1000,但仍然失败。我仍然不确定这个奇怪问题的确切根本原因。

参考链接:https ://akomljen.com/set-up-a-jenkins-ci-cd-pipeline-with-kubernetes/

我正在使用Jenkins 官方 helm chart在集群上部署 jenkins。

def label = "maven-${UUID.randomUUID().toString()}"

podTemplate(label: label, containers: [
  containerTemplate(name: 'gradle', image: 'gradle:latest', ttyEnabled: true, command: 'cat',
  envVars: [
    envVar(key: 'http_proxy',value: 'www.xxx:8080'),
    envVar(key: 'https_proxy',value: 'www.xxx:8080')
    ])
  ]) {

  node(label) {
    stage('Build a Gradle project') {
      git 'SOME GRADLE PROJECT REPO.'
      container('gradle') {
          sh 'gradle build --stacktrace'
      }
    }
  }
}

考虑上面的示例(假设jenkinsci/jnlp-slave:latest将由 Jenkins 默认 Pod 模板提供,并将附加到此 pod)

Gradle Daemon 将启动,然后失败并出现以下错误。

Error resolving plugin [id: 'org.springframework.boot', version: '2.1.4.RELEASE']
18:24:47.119 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Could not resolve all dependencies for configuration 'detachedConfiguration1'.
18:24:47.119 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]    > java.io.IOException: Read-only file system

标签: mavengradlekubernetesjenkins-pipelinekubernetes-helm

解决方案


最后,我找到了解决方案。我在 /tmp/ 目录中安装了秘密卷,这就是为什么整个容器进入只读文件系统模式的原因。我仍然不知道为什么jenkins 工作区目录进入只读模式,因为我在/tmp目录中安装了秘密。


推荐阅读