想要自动更新Gitea

3 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