Задать вопрос
@I2etr0
Jun DevOps

Как исправить ошибку mvn: command not found?

Привет! Изучаю GitLab CI. Написал .gitlab-ci.yml:

stages:
  - build
  - test
  - publish


build_job:
  stage: build
  script:
    - export PATH="/usr/bin:/usr/local/bin:$PATH"
    - mvn --version
    - echo "Start building"
    - cd $CI_PROJECT_DIR/src
    - mvn clean package
    - ls -la $CI_PROJECT_DIR/src/target
  artifacts:
    paths:
      - $CI_PROJECT_DIR/src/target/test.jar  
    expire_in: 1 day
  tags:
    - shell

publish_to_registry:
  stage: publish
  script:
    - export PATH="/usr/bin:/usr/local/bin:$PATH"
    - echo "Publishing package to GitLab Package Registry..."
    - /usr/bin/mvn deploy -s  $CI_PROJECT_DIR/.mvn/settings.xml
  tags:
    - shell


Но как бы я не указывал путь к mvn (/usr/bin/mvn), экспортировал PATH (export PATH="/usr/bin:/usr/local/bin:$PATH"), GitLab runner мне твердит одно и то же:

bash: line 136: /usr/bin/mvn: No such file or directory


Странность в том, что при рандомном количестве перезапусков, эта фигня начинает работать. То есть, оно может заработать и при коммите, или через 20 нажиманий "Retry".

UPD: Гитлаб расположен локально. Ранер находится в локальной сети на другом хосте. Установлен в OS (ubuntu 24), не в докере. Запускается автоматически по коммиту

UPD2: я понял что каждая job в GitLab CI запускается в новой, независимой среде, обычно в новой директории. Из этого выходит, что "скармливать" ей путь /usr/bin/mvn (в случае с Maven) нет смысла, так как runner ее не увидит, но мне тогда не понятно как передать runner'y эту команду 0_о
  • Вопрос задан
  • 43 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 1
@I2etr0 Автор вопроса
Jun DevOps
Вопрос решен. Требовалось дописать раздел "before_script":
before_script:
  - sudo apt update # для Ubuntu/Debian
  - sudo apt install -y maven


По крайней мере это решило мою проблему

UPD: если я верно понял, то это должно работать, исходя из утверждения
Каждая job в GitLab CI запускается в новой, независимой среде, обычно в новой директории.

Ключевой фразой тут является словосочетание "независимая среда", так как для этой независимой среды мы и устанавливаем Maven. Если я все верно понял, то для gitlab runner нет разницы установлен maven в систему или нет (не могу сказать того же про Docker - не пробовал). Он требует чтобы пакет Maven был установлен в его независимой среде! Решение, конечно, не самое очевидное, но... Что делать. Другого варианта с моим уровнем знаний (оно чуть выше дна) я пока не придумал.

Мысль вслух
Может быть, когда я стану ГУРУ GitLab CI/CD, я вернусь и напишу тут гениальный ответ, но пока так :(
Sowwy
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы