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 运行程序无法执行的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab CI/CD 不会运行我的部署阶段

当我试图设置 gcp 服务帐户时,Gitlab ci/cd 作业显示错误(无法读取 json 文件)

Gitlab CI/CD 运行器:找不到 mvn 命令

centos7下使用gitlab+shell实现CI/CD持续集成持续部署

开发测试环境通过gitlab+jenkins+docker 实现一命令部署

用 GitLab 做 CI/CD 是什么感觉,太强了