Ошибка Git при пересборке приложения — не удалось найти удалённую ссылку refs/heads/tests-passed

Привет, ребята,

При пересборке приложения я получаю эту ошибку:

Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c ’
set -o errexit
if [ $(git rev-parse --is-shallow-repository) == “true” ]; then
git remote set-branches --add origin main
git remote set-branches origin tests-passed
git fetch --depth 1 origin tests-passed
else
git fetch --tags --prune-tags --prune --force origin
fi
’ failed with return #<Process::Status: pid 145 exit 128>

Когда я выполняю это:

git fetch --tags --prune-tags --prune --force origin

Получаю ошибку:

fatal: couldn’t find remote ref refs/heads/tests-passed

Неужели я что-то делаю не так?

Спасибо и до встречи!

P.S. Забыл упомянуть. Первая проверка (checkout) прошла успешно, ошибка возникает только при выполнении задачи rebuild app. Так что, думаю (надеюсь :)), проблема не в Git с моей стороны.

Только что заметил ещё проблемы в логах выше :frowning:

Обновление успешно. Пересборка через 5 секунд.
Сборка приложения
Обнаружена архитектура x86_64.
Проверка актуальности лаунчера
fatal: не удалось найти удалённую ссылку refs/heads/tests-passed
fatal: ветка upstream ‘refs/heads/main’ не сохранена как ветка отслеживания удалённого репозитория
fatal: ветка upstream ‘refs/heads/main’ не сохранена как ветка отслеживания удалённого репозитория
./launcher: строка 794: [: 69d7558c98a3775f62b720a8393e76f2b42bd916: ожидается унарный оператор
./launcher: строка 797: [: 69d7558c98a3775f62b720a8393e76f2b42bd916: ожидается унарный оператор

Когда я запускаю контейнер с помощью команды docker run -it --entrypoint /bin/bash
и пытаюсь использовать git, я получаю следующее:

git clone https://github.com/discourse/discourse.git/
Cloning into 'discourse'...
fatal: unable to access 'https://github.com/discourse/discourse.git/': server certificate verification failed. CAfile: none CRLfile: none

Не могли бы вы, пожалуйста, опубликовать полный вывод журнала, используя блок кода с предварительным форматированием? Это помогло бы.

Подозреваю, что вы делаете это в корпоративной сети, где для исходящего веб-трафика используется MITM-прокси?

Если да, вам нужно настроить ваш сервер (и образ Docker) так, чтобы он доверял вашему корневому сертификату Удостоверяющего центра предприятия.

Это именно тот случай.
Существует ли стандартная функциональность в Docker-образе Discourse для этого (я имею в виду именно образ Docker, а не сервер), или мне придется делать это вручную?

Заранее большое спасибо и приветствия,

WS

Обновление: Нет, я ошибся. На самом деле я делаю это в корпоративном контексте, но экземпляр находится на инстансе EC2 (стандартный образ Amazon Linux 2 AMI), который может выходить через прокси…
И, как я уже сказал, первая проверка прошла успешно, сломалась только пересборка.

Проверил ещё раз: на хосте работает, а в контейнере — нет :frowning:

Привет, @Lilly, извини, что заставил ждать, но вот лог (наверное, нужная часть):

I, [2024-11-20T05:57:07.498456 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git reset --hard
Updating files: 100% (34680/34680), done.
I, [2024-11-20T05:57:11.943323 #1]  INFO -- : HEAD is now at 274e18622 FIX: Video uploads sometimes hang indefinitely (#28523)

I, [2024-11-20T05:57:11.943867 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git clean -f
I, [2024-11-20T05:57:12.079705 #1]  INFO -- : 
I, [2024-11-20T05:57:12.080107 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
fatal: unable to access 'https://github.com/discourse/discourse.git/': server certificate verification failed. CAfile: none CRLfile: none
I, [2024-11-20T05:57:12.186392 #1]  INFO -- : 
I, [2024-11-20T05:57:12.187130 #1]  INFO -- : Terminating async processes
I, [2024-11-20T05:57:12.187180 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 39
2024-11-20 05:57:12.187 UTC [39] LOG:  received fast shutdown request
I, [2024-11-20T05:57:12.187839 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 107
107:signal-handler (1732082232) Received SIGTERM scheduling shutdown...
2024-11-20 05:57:12.189 UTC [39] LOG:  aborting any active transactions
107:M 20 Nov 2024 05:57:12.193 # User requested shutdown...
107:M 20 Nov 2024 05:57:12.193 * Saving the final RDB snapshot before exiting.
2024-11-20 05:57:12.194 UTC [39] LOG:  background worker "logical replication launcher" (PID 54) exited with exit code 1
2024-11-20 05:57:12.194 UTC [49] LOG:  shutting down
107:M 20 Nov 2024 05:57:12.197 * DB saved on disk
107:M 20 Nov 2024 05:57:12.197 # Redis is now ready to exit, bye bye...
2024-11-20 05:57:12.227 UTC [39] LOG:  database system is shut down


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
' failed with return #<Process::Status: pid 144 exit 128>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"code", "cmd"=>["sudo -H -E -u discourse git reset --hard", "sudo -H -E -u discourse git clean -f", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [ $(git rev-parse --is-shallow-repository) == \"true\" ]; then\n      git remote set-branches --add origin main\n      git remote set-branches origin $version\n      git fetch --depth 1 origin $version\n  else\n      git fetch --tags --prune-tags --prune --force origin\n  fi\n'", "sudo -H -E -u discourse bash -c '\n  set -o errexit\n  if [[ $(git symbolic-ref --short HEAD) == $version ]] ; then\n      git pull\n  else\n      git -c advice.detachedHead=false checkout $version\n  fi\n'", "sudo -H -E -u discourse git config user.discourse-version $version", "mkdir -p tmp", "chown discourse:www-data tmp", "mkdir -p tmp/pids", "mkdir -p tmp/sockets", "touch tmp/.gitkeep", "mkdir -p                    /shared/log/rails", "bash -c \"touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log\"", "bash -c \"ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log $home/log\"", "bash -c \"mkdir -p           /shared/{uploads,backups}\"", "bash -c \"ln    -s           /shared/{uploads,backups} $home/public\"", "bash -c \"mkdir -p           /shared/tmp/{backups,restores}\"", "bash -c \"ln    -s           /shared/tmp/{backups,restores} $home/tmp\"", "chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp", "[ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete"]}
bootstrap failed with exit code 128
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

Извините, ребята, это была проблема с прокси. Пришлось настроить прокси в файле ~/.docker/config.json, чтобы они подставлялись в контейнер, и всё заработало…

Боже, сколько же жизни я потратил на проблемы с прокси? :stuck_out_tongue: