yakamara / ydeploy

Deployment von REDAXO-Projekten
MIT License
21 stars 6 forks source link

deployment auf Webhoster cyon.ch schlägt fehlt #89

Closed ynamite closed 4 months ago

ynamite commented 4 months ago

Bei Cyon klappt das deployment bei mir mit der vanilla ydeploy deployer config nicht. Git wird von deployer nicht gefunden. Augenscheinlich weil deployer Git mit which git auf dem Remote sucht, aber lokal ausführt. Auf dem remote gibt es kein Repo ... Ähnliches Problem wie bei meinem anderen Issue.

Das ist das erste Mal, dass ich deployer mit Cyon verwende. Irgendwas ist an deployer faul. @gharlan wir können das gerne im Detail testen, ich muss das nämlich heute oder morgen deployen.

[remote] run command -v 'git' || which 'git' || type -p 'git'
[remote] /usr/local/cpanel/3rdparty/lib/path-bin/git
[localhost] run /usr/local/cpanel/3rdparty/lib/path-bin/git rev-parse --abbrev-ref HEAD
[localhost] bash: line 1: /usr/local/cpanel/3rdparty/lib/path-bin/git: No such file or directory
[remote]  error  in info.php on line 8:
[remote] exit code 127 (Command not found)
done deploy:info 167ms
ynamite commented 4 months ago

https://github.com/yakamara/ydeploy/issues/82

ynamite commented 4 months ago

Auch hier funktioniert der Fix aus dem Issue 82 , allerdings scheitert es dann bei task deploy:lock mit folgendem Fehler:

[remote] run [ -f /public_html/stage/.dep/deploy.lock ] && echo +locked || echo 'ynamite' > /public_html/stage/.dep/deploy.lock
[remote] bash: Zeile 1: /public_html/stage/.dep/deploy.lock: Datei oder Verzeichnis nicht gefunden
[remote]  error  in lock.php on line 9:
[remote] exit code 1 (General error)
done deploy:lock 133ms
ERROR: Task deploy:lock failed!

Problem ist, dass bei diesem Hosting der Befehl echo 'ynamite' > /public_html/stage/.dep/deploy.lock die Datei nicht gleich erstellt.

edit: mein Fehler, stupid me, ich hatte den deployment Pfad falsch angegeben

gharlan commented 4 months ago

mit der vanilla deployer config

Was meinst du damit? Also wirklich rein deployer ohne ydeploy? Oder bindest du die deploy.php (oder deploy_yak.php) aus dem Addon mit ein?

Denn Deployer geht default ja anders mit dem Deployment um. Da wird auf dem Server per git das Repository geladen. YDeploy konfiguriert es aber so, dass es per Git auf dem lokalen Rechner geladen wird, und per rsync hochgeladen wird.

ynamite commented 4 months ago

Entschuldige, ich meine mit ydeploy vanilla config. Ich binde die ydeploy_yak.php ein.

Wie's funktioniert ist mir mittlerweile eigentlich klar, aber du siehst ja im log, dass es nicht richtig aufgerufen wird. Das kann imo nicht funktionieren, wenn hier der remote Pfad verwendet wird: [localhost] run /usr/local/cpanel/3rdparty/lib/path-bin/git rev-parse --abbrev-ref HEAD

Das Problem mit deploy:lock habe ich mittlerweile gelöst. Ich bin dumm und habe den deployment Pfad mit einem Slash am Anfang angegeben. Also statt public_html/stage hatte ich /public_html/stage 🤦

ynamite commented 4 months ago

Hier meine komplette deploy.php im Root meines Projekts:

<?php

namespace Deployer;

if ('cli' !== PHP_SAPI) {
    throw new \Exception('The deployer configuration must be used in cli.');
}

require __DIR__ . '/src/addons/ydeploy/deploy_yak.php';

set(
    'bin/php',
    function () {
        return '$HOME/Library/Application\ Support/Herd/bin/php';
    }
);

// Hosts
host($deploymentName)
    ->setHostname($deploymentHost)
    ->setRemoteUser($deploymentUser)
    ->setPort($deploymentPort)
    ->set('http_user', 'benutzername')
    ->set('labels', ['stage' => $deploymentType])
    ->setDeployPath($deploymentPath)
    ->set(
        'bin/php',
        function () {
            return run('which php');
        }
    );

set('repository', $deploymentRepository);

zusätzlich habe ich die Anpassungen aus Issue 82 in der ydeploy config.php gemacht.

gharlan commented 4 months ago

Das kann imo nicht funktionieren, wenn hier der remote Pfad verwendet wird:

Das stimmt schon. Aber bei mir wird der lokale Pfad verwendet (wie ich im anderen Issue getestet hatte). Bei mir steht vor der entsprechenden Zeile auch [local] (siehe mein Log im anderen Issue), bei dir aber [remote]. Da müssen wir rausfinden, wieso das so ist.

Bei dir steht noch deploy:info. Es ist also noch nicht ydeploy 2.0.1, oder? Oder passiert es erst im späteren Schritt (in 2.0.0 kam deploy:info zwei Mal, seit 2.0.1 kommt am Anfang build:info und später deploy:info).

gharlan commented 4 months ago

Oder rufst du dep release auf? Mir fällt gerade auf, dass es da vielleicht wirklich nicht passt. Das muss ich nochmal testen.

gharlan commented 4 months ago

Ok, ich sehe es nun, wo es hängt. Bei dep deploy wird git am Anfang zwar lokal gesucht, aber im späteren Verlauf wird es dann tatsächlich nochmal gesucht, dann auf dem Server.

Ich werde das korrigieren.

ynamite commented 4 months ago

Bei dir steht noch deploy:info. Es ist also noch nicht ydeploy 2.0.1, oder?

Ist ydeploy 2.0.1

Oder rufst du dep release auf?

ich rufe einfach dep deploy -vvv auf.

Hier nochmal der Output, habe nun mein deployment name auf stage geändert, damit es klarer ist.

task deploy:info
[stage] ~/Library/Application Support/Herd/bin/php83 ~/Herd/***/vendor/deployer/deployer/dep worker --port 58439 --task deploy:info --host stage --decorated -vvv
[stage] ssh '-p' '22' '-A' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=60' '-o' 'ControlPath=~/.ssh/***:22' '***' ': 7cbfdd99588258212889; bash -ls'
[stage] run if [ -d public_html/stage/.dep ]; then echo +yes; fi
  ⠏ zyvu@frisco-baurealisierung.ch's password:   ⠸
[stage] +yes
[stage] ssh '-p' '22' '-A' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=60' '-o' 'ControlPath=~/.ssh/***:22' '***' ': c51ad626e70d75dc4d38; bash -ls'
[stage] run cd public_html/stage && (cat .dep/latest_release || echo 0)
[stage] 1
[stage] ssh '-p' '22' '-A' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=60' '-o' 'ControlPath=~/.ssh/***:22' '***' ': 9c8cec6f9a3510d30bc0; bash -ls'
[stage] run command -v 'git' || which 'git' || type -p 'git'
[stage] /usr/local/cpanel/3rdparty/lib/path-bin/git
[localhost] run /usr/local/cpanel/3rdparty/lib/path-bin/git rev-parse --abbrev-ref HEAD
[localhost] bash: line 1: /usr/local/cpanel/3rdparty/lib/path-bin/git: No such file or directory
[stage]  error  in info.php on line 8:
[stage] exit code 127 (Command not found)

Mit meinem Fix scheint es zu klappen. Ich habe zwar noch einen weiteren Fehler, der erst bei deploy:writeable geschieht, aber ich glaube den kann ich fixen, in dem ich statt acl für writable_mode dann chmod verwende. Ich teste weiter

ynamite commented 4 months ago

Und noch ein Problem und zwar in deploy:release, aber ich denke das ist mehr bei deployer selbst im release recipe bzw. beim Webhoster.

[stage] run cd public_html/stage && (ln -nfs --relative releases/3 public_html/stage/release)
[stage] ln: die symbolische Verknüpfung „public_html/stage/release“ konnte nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
[stage]  error  in release.php on line 132:
[stage] exit code 1 (General error)
done deploy:release 567ms
ERROR: Task deploy:release failed!

Wenn ich entweder aus dem Root heraus ln -nfs --relative public_html/stage/releases/3 public_html/stage/release oder unter public_html/stage ln -nfs --relative releases/3 release mache, klappt es ... falls du eine Idee hast, bin ich natürlich froh :) scheint als müsste ich deploy:release komplett überschreiben. Hmpf.

Danke schon mal!

gharlan commented 4 months ago

Kann es sein, dass du den Deploy-Path nicht als absoluten Pfad angibst? (->setDeployPath)

ynamite commented 4 months ago

Mein Deploy-Path sieht so aus: public_html/stage. Also ->setDeployPath('public_html/stage').

Das ist ausgehend vom Root der absolute Pfad.

gharlan commented 4 months ago

Da fehlt dann aber der Slash vorne. Also der Deploy-Path sollte als absoluter Pfad angegeben werden. /public_html/stage

ynamite commented 4 months ago

Ah, wenn ich es so angebe, läufts: ->setDeployPath('~/public_html/stage')

/public_html/stage geht eben nicht, das hatte ich anfänglich und führte zu dem Fehler hier: https://github.com/yakamara/ydeploy/issues/89#issuecomment-2126478230

Danke, hat mich auf die richtige Fährte gebracht.