我想使用 GitHub“发布”功能来告诉我的生产服务器何时应该从 GitHub 更新其代码库。 我不希望它抓住每次推送,而是在创建新版本时抓住。
我的计划是创建一个 Bash 脚本,每 10-15 分钟检查一次是否有新版本,如果找到新版本,它将执行拉取请求或下载最新版本 ZIP 文件,部署新版本编码并重启节点服务。
但是我被困在第一步了。我如何知道是否有新版本?
正如我在“GitHub 最新版本”中提到的,您有一个专用于获取最新版本的 API。
GET /repos/:owner/:repo/releases/latest
您可以将它(通过适当的身份验证和正确的范围)用于私人存储库。
如果您缓存最新版本,则每次新的最新版本与您缓存的版本不同时,您都可以触发流程。
或者 gh 版本列表 显示版本,自 gh 2.18.0(2022 年 11 月)起,带有 列标题:
$ gh release list
TITLE TYPE TAG NAME PUBLISHED
GitHub CLI 2.18.1 Latest v2.18.1 about 12 days ago
GitHub CLI 2.18.0 v2.18.0 about 14 days ago
CLI
gh release list
命令可以显示发布日期
在curl的帮助下使用bash,您可以使用这一长串从公共存储库获取最新版本:
git clone -b $(basename $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/OWNER/PROJECT/releases/latest)) https://github.com/OWNER/PROJECT.git
像这样的 bash 函数:
gh-clone-latest() {
local owner=$1 project=$2
local output_directory=${3:-$owner-$project-release}
local release_url=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/$owner/$project/releases/latest)
local release_tag=$(basename $release_url)
git clone -b $release_tag -- https://github.com/$owner/$project.git $output_directory
}
会将其减少到
gh-clone-latest Owner Project
。
对于私人项目,您需要正确进行身份验证并确定范围,如其他答案中所述。