Gitea를 자동 업데이트하고 싶다

4 min

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

안녕하세요, 무능입니다.
오늘도 어김없이 오타를 냈지만 이대로 가겠습니다.

기본적으로 Git 서버는 별로 건드리지 않고 운영적인 부분을 많이 생각하고 싶지 않기 때문에 자동으로 업데이트되도록 하고 싶습니다.
어쩌면Gitea의 장점이자 단점이기도 하지만, Gitea는 단일 바이너리로 프론트엔드와 백엔드를 모두 간결하게 처리합니다.
그러므로 바이너리만 가져오면 됩니다.

어떻게 안정적으로 바이너리를 저장할까

그래서 안정적으로 바이너리를 저장하고 싶은데,Releases에서 얻을 수 있을 것 같습니다. Releases · go-gitea/gitea · GitHub
즉, 여기서 저장할 URL을 가져오면 될 것 같습니다.

API를 호출해보기

아래에서 다운로드 URL을 얻을 수 있습니다.

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

이상적인 것은 여기서 jq로 더 필터링하고 싶은데,jsonkey:value를 보면 불가능할 것 같아서 그저 이 다음에 목적하는 바이너리를grep할 수밖에 없을 것 같습니다.※1


※1 hymkor (HAYAMA_Kaoru) · GitHub 님에게 그런 일은 없을 것이라고 듣고, 최근 업무에서jq를 사용했던 것을 떠올려 아래와 같이 대상 객체만 추출할 수 있었습니다.

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

또는

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

그래서, 불가능하다는 것은 착각이었습니다(헤헤)
나머지는 제 헛소리로 봐주세요


그래서 이렇게 했습니다.

$ 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

현재 버전과의 차이

매번 새로운 바이너리를 배치하면 트래픽이 아깝기 때문에 여기서 판단할 필요가 있습니다.
가장 간단한 방법은 현재 Gitea의 버전을 확인하고 그것을grep -qi하는 것입니다.

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

이것을 변수에 저장해 둡니다.

완성

그래서 이렇게 되었습니다.

#!/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

이것을 root의 crontab에 넣어두면 정기 스크립트로 실행될 것입니다.
애초에chmod에서 실패하면exit 2로 종료되므로 이상한 동작이 발생할 일은 없을 것 같습니다.

이것저것 Gitea가 너무 풍부하다고 말하면서도 결국 사용하고 있다는 점이 스스로 부족하다고 느낍니다.

Related Posts