Gitea-Action-Workflow zum Bereitstellen einer Website auf Netcup-Webhosting

Der folgende Gitea-Action-Workflow stellt eine Hugo-Website auf einem Netcup-Webhosting-Konto bereit. Er verwendet SSH-Zugriff mit einem vorinstallierten privaten Schlüssel (ssh-keygen -t ed25519 -f id_netcup echo $(cat id_netcup.pub) >> ~/.ssh/authorized_keys auf dem Netcup-Server).

Er erwartet, dass die folgenden Secrets in Gitea über das Webinterface konfiguriert sind (Repository-Einstellungen -> Runners -> Secrets):

Dies ist erforderlich, um eine passwortlose Anmeldung vom CI/CD-Job aus zu ermöglichen.

Gitea Netcup secrets

Darüber hinaus wird erwartet, dass Sie das Netcup-Konto so konfigurieren, dass es von my-domain.com/httpdocs aus bedient wird.

Es funktioniert in Verbindung mit der Hugo-Build-Action, die Sie in unserem vorherigen Beitrag Gitea Hugo-Build-Action finden. Eine Modifikation erfordert jedoch nur, dass Sie den Download artifact-Schritt ändern.

deploy_netcup.yml
name: Deploy
run-name: Deploying homepage
on: [push]

jobs:
  Deploy-Netcup:
    runs-on: ubuntu-latest
    steps:
      - name: Download artifact
        uses: actions/download-artifact@v3
        with:
          name: hugo-site
          path: public
      # Put into a tarball
      - name: Make tarball
        run: mkdir -p my-domain.com && mv public my-domain.com/httpdocs && tar -czf my-domain.com.tar.gz my-domain.com
        shell: sh
      # Accept host key
      - name: Accept SSH host key
        run: echo "my-domain.com ssh-ed25519 ${{ secrets.NETCUP_SSH_HOST_KEY }}" >> ~/.ssh/known_hosts && cat ~/.ssh/known_hosts
        shell: sh
      # Deploy to Netcup
      - name: Export SSH key
        run: echo "${{ secrets.NETCUP_SSH_KEY }}" > id_netcup && chmod 600 id_netcup
        shell: sh
      - name: Remove old files
        run: ssh -i id_netcup ${{ secrets.NETCUP_USERNAME }}@my-domain.com "rm -rfv my-domain.com/*"
        shell: sh
      - name: Deploy to Netcup
        run: "scp -i id_netcup my-domain.com.tar.gz ${{ secrets.NETCUP_USERNAME }}@my-domain.com:"
        shell: sh
      - name: Extract tarball on server
        run: ssh -i id_netcup "${{ secrets.NETCUP_USERNAME }}@my-domain.com" "tar xzvf my-domain.com.tar.gz"
        shell: sh

ALLE zuvor existierenden Dateien werden gelöscht aus dem my-domain.com-Verzeichnis auf dem Server, bevor die neuen Dateien hochgeladen werden. Am besten stellen Sie sicher, dass sich nichts Wichtiges in diesem Ordner befindet.

Ich empfehle nicht, dies zu entfernen, da sonst im Repository umbenannte oder gelöschte Dateien nicht vom Server entfernt werden und für immer zugänglich bleiben.

Um den Upload zu beschleunigen (rsync ist auf Netcup-Webhosting über SSH nicht verfügbar und ist auch etwas langsam, wenn viele kleine Dateien hochgeladen werden), erstellen wir zuerst ein Tarball, laden dann nur das Tarball mit scp hoch und führen dann tar xzvf auf dem Server aus.


Check out similar posts by category: Gitea, CI/CD