maven - Maven/Gradle 容器无法在内部 k8s 集群上构建项目
问题描述
我正在尝试创建示例 jenkins 管道以在内部 kubernetes 集群上构建基于 maven/gradle 的应用程序。我已经通过环境变量设置了代理,此外我还在 gradle.properties 文件中插入了代理参数。每当我尝试通过gradle build
它构建应用程序时都会失败并出现错误Java: READ ONLY FILE SYSTEM
。我在网上搜索,发现由于jnlp
和gradle
容器上的 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
解决方案
最后,我找到了解决方案。我在 /tmp/ 目录中安装了秘密卷,这就是为什么整个容器进入只读文件系统模式的原因。我仍然不知道为什么jenkins 工作区目录进入只读模式,因为我在/tmp目录中安装了秘密。
推荐阅读
- ruby-on-rails - 推送到 Heroku - ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: 关系“用户”不存在
- ms-access - 在创建文件夹之前检查 VBA Access 中目录的权限
- java - 具有规范 Blob 列的 Spring 存储库过滤器,Java 中的字符串数组
- rtmp - 如何将直播视频从我的 DJI Spark 获取到我的电脑?(RTMP 或 RTP)
- javascript - JS 中的值非常偏离
- google-bigquery - 是否可以将选择查询输出或表中的数据导出到存储在本地目录中的 excel 文件中
- mysql - MySql 错误消息 - 更新表:数据库错误:无效 SQL:CREATE TABLE
- spring - 如何在使用响应式数据源的 WebFlux 上编写自定义验证器
- python - 使用先前列表的值更改创建一个新列表
- html - 背景图像正在调整大小并重复