GitLab CI/CD 运行程序无法执行
Posted
技术标签:
【中文标题】GitLab CI/CD 运行程序无法执行【英文标题】:GitLab CI/CD runner fails to execute 【发布时间】:2021-09-13 12:14:25 【问题描述】:我正在尝试使用 gitlab CI/CD。我正在使用 Ubuntu 服务器和带有 Maven 的 Spring Boot。一切都很好,跑步者开始管道作业,但它得到很多错误模式“警告:无法删除目标/......”即使我在 .yaml 管道脚本 gitlab-ci.yaml 中调用简单的 echo 'something'。我发现如果我删除 /home/gitlab-runner/builds 那么一切都开始正常工作,直到 /builds 再次生成。我究竟做错了什么?我已经尝试重新安装 runner,制作 gitlab-user,脚本的不同变体^在我手动删除 builds 文件夹之前没有任何效果。但是,还有一个 js 前端,它也在 gitlab ci/cd 上,并且在那里一切正常。请帮帮我!
这是我试图让我的 java spring boot maven 管道工作时遇到的错误:
enter image description here
gitlab-ci.yaml 代码在这里:
stages:
- test
- package
- deploy
# - sonar
test:
stage: test
only:
- master
- merge_requests
except:
- tags
script:
- echo 'test are running i swear!!!!!!'
- sudo mvn clean
- sudo systemctl stop socnet.service
package:
stage: package
only:
- master
except:
- tags
script:
- sudo mvn package -Dmaven.test.skip=true
deploy_to_server:
stage: deploy
only:
- master
except:
- tags
script:
- sudo systemctl restart socnet.service
【问题讨论】:
你在 CI 脚本中使用 sudo 吗?可以分享.gitlab-ci.yml
的内容吗?
好的,已添加到帖子中!
【参考方案1】:
从您的.gitlab-ci.yml
中删除sudo
。
使用sudo
会以root 用户身份执行mvn package
,因此所有生成的文件都以root 作为所有者。
当 gitlab-runner 拿起一个工作并继续清理以前生成的文件时,它仍然是无特权的,因此无法删除 root 拥有的文件。
您可能希望将以下变量添加到您的 .gitlab-ci.yml
文件中,以便将 Maven 依赖项缓存的位置更改为项目目录内:
variables:
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Maven.gitlab-ci.yml
【讨论】:
好的。我删除了 sudo,现在它抱怨:线程“主”com.google.common.util.concurrent.ExecutionError 中的异常:java.lang.NoClassDefFoundError:无法初始化类 com.google.inject.internal.cglib.core.$ com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203) 上的 ReflectUtils 在项目中使用 Java 11 @BarneyZinger 请找到我对要添加到您的 gitlabci.yml 的其他变量的编辑 Gitlab runner 在我的项目在 jdk 11 上时使用了 jdk 16。所以我在 gitlab-ci.yaml 中添加了 env var 以将 16 切换到 11,现在一切都很好!感谢您的帮助!以上是关于GitLab CI/CD 运行程序无法执行的主要内容,如果未能解决你的问题,请参考以下文章
当我试图设置 gcp 服务帐户时,Gitlab ci/cd 作业显示错误(无法读取 json 文件)
centos7下使用gitlab+shell实现CI/CD持续集成持续部署