Gitea automatisch aktualisieren

5 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

Hallo, hier ist der Inkompetente.
Auch heute habe ich wieder einen Tippfehler gemacht, aber ich lasse es so.

Grundsätzlich möchte ich, dass der Git-Server automatisch aktualisiert wird, da ich ihn nicht viel anfassen und mir keine Gedanken über den Betrieb machen möchte.
Es ist sowohl ein guter als auch ein schlechter Punkt von Gitea, dass Gitea als einzelnes Binärprogramm sowohl das Frontend als auch das Backend vereinfacht.
Daher muss ich nur das Binärprogramm herunterladen.

Wie man Binärdateien stabil speichert

Ich möchte also Binärdateien stabil speichern, und es scheint, dass ich sie von Releases erhalten kann. Releases · go-gitea/gitea · GitHub
Das heißt, es sieht so aus, als könnte ich die Download-URL von hier abrufen.

API aufrufen

Die Download-URL kann wie folgt abgerufen werden.

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'

Idealerweise möchte ich es hier mit jq weiter eingrenzen, aber wenn ich mir die key:value-Paare von json ansehe, scheint es nicht möglich zu sein, also bleibt mir nichts anderes übrig, als die gewünschte Binärdatei danach mit grep zu suchen. *1


*1 Nachdem hymkor (HAYAMA_Kaoru) · GitHub sagte, dass das nicht stimmen kann, erinnerte ich mich an die Zeit, als ich kürzlich bei der Arbeit jq verwendete, und konnte das Zielobjekt wie folgt extrahieren.

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.name | match("linux-amd64$")) | .browser_download_url '

Oder

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.browser_download_url | match("linux-amd64$")) | .browser_download_url '

Es war also ein Fehler zu sagen, dass es nicht möglich ist (ups)
Den Rest betrachten Sie bitte als mein Geschwätz.


Also habe ich es so gemacht.

$ curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url' | grep linux-amd64$ 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  171k    0  171k    0     0   291k      0 --:--:-- --:--:-- --:--:--  291k
https://github.com/go-gitea/gitea/releases/download/v1.23.4/gitea-1.23.4-linux-amd64

Unterschied zur aktuellen Version

Es wäre eine Verschwendung von Traffic, jedes Mal eine neue Binärdatei zu platzieren, daher muss dies hier entschieden werden.
Am einfachsten wäre es, die aktuelle Gitea-Version zu überprüfen und sie mit grep -qi zu suchen.

$ gitea -v | awk '{printf $3}'
1.22.4

Dies wird in einer Variablen gespeichert.

Fertigstellung

Also ist es so geworden.

#!/bin/bash

# give me root

BINARY_URL=$(curl https://api.github.com/repos/go-gitea/gitea/releases/latest |\
  jq -r '.assets[].browser_download_url' |\
  grep linux-amd64$ )

NOW_GITEA_V=$(gitea -v | awk '{printf $3}')
DAEMON_RESTART="service gitea restart"

if ! echo $BINARY_URL | grep -qi $NOW_GITEA_V ; then
  wget -O gitea $BINARY_URL
  chmod +x gitea || exit 2
  mv gitea /usr/local/bin/gitea
  $DAEMON_RESTART 
else
  exit 0
fi

Wenn dies in die Crontab von root eingefügt wird, sollte es als regelmäßiges Skript ausgeführt werden.
Da es bei einem Fehler bei chmod mit exit 2 beendet wird, ist es unwahrscheinlich, dass es zu einem seltsamen Verhalten kommt.

Ich fühle mich selbst unzulänglich, da ich Gitea benutze, obwohl ich sage, dass es zu reichhaltig ist.

Related Posts