如何在GitHub的第三方存储库发布新版本时触发SaaS CI构建

86次阅读
没有评论

问题描述

希望能够在GitHub的第三方存储库发布新版本时自动构建一个Chocolatey软件包。具体的例子是针对KeyPass2的HIBPOfflineCheck插件,但实际上可以适用于任何托管在GitHub并使用Release功能的软件。

用户希望实现的流程如下:
1. 第三方存储库的作者提交更改到GitHub。
2. 作者创建一个新的发布,可以是手动或自动的。
3. 用户的CI构建被触发。
4. 新的Chocolatey软件包被发布到Chocolatey。

用户考虑到的问题是,尽管可以向原始存储库创建拉取请求来实现,但存在以下问题:
1. 这要求原始作者负责维护Chocolatey软件包,他们可能对此不感兴趣。
2. 他们的CI系统可能无法生成和发布软件包。
3. 他们可能不了解配置Chocolatey API密钥等操作。

尽管在Concourse CI中可以基于新的GitHub发布触发CI构建,但Concourse并不是一个SaaS产品。

解决方案

根据提供的信息,以下是两种可能的解决方案,您可以根据您的偏好和需求选择其中之一。

方案1:使用GitHub API

这种方法涉及使用GitHub API监视最新发布的变化,并在有变化时触发CI构建。

  1. 使用GitHub API获取第三方存储库的最新发布信息。
  2. 检查获取到的发布信息的哈希值是否与之前的版本相同。
  3. 如果哈希值不同,触发您的CI构建。

这可以通过一些脚本或工具来实现,比如Bash脚本调用curl或Python脚本等。

方案2:使用专门的服务

如果您不想自己编写脚本来监视GitHub发布并触发CI构建,您还可以考虑使用一些现成的服务,如Zapier、IFTTT或其他集成平台。这些平台通常提供了与GitHub和CI服务(如CircleCI、Travis CI等)的集成,可以方便地设置触发规则,使您的CI构建与GitHub发布保持同步。

请注意,使用第三方服务可能会涉及到一些安全和隐私问题,您需要仔细评估这些服务是否符合您的需求和标准。

引用

如果您选择方案1,以下是一个简单的Bash脚本示例,用于监视GitHub发布并触发CI构建。请根据您的需求进行修改和适配。

#!/bin/bash
# GitHub API URL for the latest release
GITHUB_API_URL="https://api.github.com/repos/username/repository/releases/latest"
# Hash of the previous response
PREVIOUS_HASH=""

while true; do
  # Get the latest release information
  response=$(curl -s $GITHUB_API_URL)
  # Calculate the hash of the response
  current_hash=$(echo $response | md5sum | awk '{print $1}')

  if [ "$current_hash" != "$PREVIOUS_HASH" ]; then
    # Hash has changed, trigger your CI build here
    echo "New release detected. Triggering CI build..."
    # Replace this with your CI build command
    # For example: ./path/to/your/ci_script.sh
    # ...

    # Update the previous hash
    PREVIOUS_HASH="$current_hash"
  fi

  # Sleep for a while before checking again
  sleep 300
done

请注意,上述示例是一个简化的版本,您可能需要根据实际情况进行修改和扩展,以确保脚本的稳定性和适应性。

无论您选择哪种方案,都需要考虑到GitHub API的调用频率限制和安全性问题。在实际应用中,您可能需要将敏感信息(如API密钥)存储在安全的地方,并确保您的脚本或工具能够正确处理可能的错误情况。

请记住,根据您的具体情况,可能需要对方案进行进一步的调整和定制。

正文完