Gitlab CI/CD 运行器:找不到 mvn 命令
Posted
技术标签:
【中文标题】Gitlab CI/CD 运行器:找不到 mvn 命令【英文标题】:Gitlab CI/CD runner : mvn command not found 【发布时间】:2019-03-03 07:07:20 【问题描述】:Maven 已安装在我的 gitlab-runner 服务器上。当直接在我的 repo 上执行 mvn clean
时,它可以工作,当使用 Gitlab UI 运行我的管道时出现此错误:
bash:第 60 行:mvn:找不到命令
错误:作业失败:退出状态 1
我注意到我试图通过在 .gitlab-ci.yml 文件中添加 before_script
部分来解决问题:
before_script:
- export MAVEN_HOME=/usr/local/apache-maven
我还添加了一行:
environment = ["MAVEN_HOME=/usr/local/apache-maven"]
在 config.toml 文件上。
问题依旧,我的执行者是:shell。
任何建议!
【问题讨论】:
【参考方案1】:只需添加 maven docker 镜像,添加以下行作为第一行:
image: maven:latest or image: maven:3-jdk-10 or image: maven:3-jdk-9
参考:https://docs.gitlab.com/ee/ci/examples/artifactory_and_gitlab/
【讨论】:
【参考方案2】:我设法使用此解决方法解决了问题:
script:
- $MAVEN_HOME/bin/mvn clean
【讨论】:
【参考方案3】:对于遇到类似问题的任何人,重新启动 gitlab 运行器“.\gitlab-runner.exe restart”可能是个好主意。尤其是在摆弄环境变量之后。
【讨论】:
【参考方案4】:有一个更简单的方法:
更改 ~/.bash_profile
而不是 ~/.bashrc
。
根据this document:
.bashrc
更常见的是使用非登录 shell
This document说:
对于某些执行程序,运行程序会传递
--login
标志,如上所示,这也会加载 shell 配置文件。
所以应该不是~/.bashrc
,你也可以试试~/.profile
哪个 It can hold the same configurations, which are then also accessible by other shells
在我的场景中,我做了以下事情:
1。设置gitlab-runner
的用户密码。
passwd gitlab-runner
2。登录gitlab-runner
。
su - gitlab-runner
3。在.bash_profile
中进行更改
【讨论】:
【参考方案5】:将 maven 添加到 PATH:
$ export M2_HOME=/usr/local/apache-maven/apache-maven-3.3.9
$ export M2=$M2_HOME/bin
$ export PATH=$M2:$PATH
您可以在$HOME/.bashrc
中包含这些命令
【讨论】:
【参考方案6】:我希望你已经弄清楚了你的问题。我在服务器上构建 ci 时遇到了同样的问题。
我使用 shell 作为我的 Runner 的执行器。 以下是要弄清楚的步骤。
1 检查运行器服务器上的用户
如果你已经在运行器服务器上成功安装了maven,也许它只是成功的root,你可以检查ci进程的真实用户。
job1:
stage: test
script: whoami
如果是我的情况,它会打印 gitlab-runner
,而不是 root
2 su 真实用户,再次查看 mvn
此时,它会像 Gitlab ci UI 一样打印错误。
3 为真实用户安装 maven。再次运行管道。
【讨论】:
以上是关于Gitlab CI/CD 运行器:找不到 mvn 命令的主要内容,如果未能解决你的问题,请参考以下文章
GitLab Runner CI/CD 中用户模式和系统模式之间的区别
GitLab CI/CD 管道在构建 Debian 包时找不到 GCC