想要自动更新Gitea
你好,我是无能。
今天也像往常一样打错了字,但我就这样继续了。
基本上,我不想过多地操作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进一步筛选,但是看着json的key: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功能过于丰富,但自己却一直在使用,感觉有些不足。