You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在GitHub Actions中配置非美国地区运行环境并执行API调用

如何在GitHub Actions中配置非美国地区运行环境并执行API调用

嘿,这个需求我之前刚好折腾过,完全不用依赖任何外部服务器,直接在GitHub Actions的YAML配置文件里就能全部搞定,还能指定非美国的运行区域,给你一步步拆解怎么弄:

一、先搞定非美国区域的运行环境配置

GitHub官方托管的runner支持指定运行区域,你只需要在job的options里加上location参数就行,常用的非美国区域有这些:

  • 新加坡节点:Asia/Singapore
  • 欧洲西部节点:Europe/West
  • 东京节点:Asia/Tokyo
    这样就能确保你的job在指定的非美国服务器上运行,避免跨区域的网络延迟问题。

二、直接在YAML里执行API调用的Python代码

不用单独创建Python脚本文件,直接在workflow的step里写inline代码就行,GitHub Actions的每个step都能直接执行命令,包括调用Python。下面是一个完整的可直接复用的YAML配置示例:

name: Non-US Region API Call
on: [workflow_dispatch, push] # 支持手动触发或代码push时自动运行

jobs:
  execute-api-request:
    runs-on: ubuntu-latest
    options:
      location: 'Asia/Singapore' # 这里替换成你需要的非美国区域
    steps:
      - name: 配置Python环境
        uses: actions/setup-python@v5
        with:
          python-version: '3.11' # 按需指定Python版本

      - name: 安装requests依赖库
        run: pip install requests # 默认Python环境没有requests,需要先安装

      - name: 执行API请求
        run: |
          python << 'EOF'
          import requests

          # 替换成你的目标API地址
          target_url = "https://api.blabla.com/endpoint"
          try:
              response = requests.get(target_url)
              response.raise_for_status() # 自动抛出HTTP错误状态码的异常
              print(f"请求成功,状态码: {response.status_code}")
              print(f"响应内容(前500字符): {response.text[:500]}")
          except requests.exceptions.HTTPError as errh:
              print(f"HTTP错误: {errh}")
          except requests.exceptions.ConnectionError as errc:
              print(f"连接错误: {errc}")
          except requests.exceptions.Timeout as errt:
              print(f"请求超时: {errt}")
          except requests.exceptions.RequestException as err:
              print(f"其他错误: {err}")
          EOF

代码解释:

  • on:定义触发workflow的事件,workflow_dispatch支持你在GitHub页面手动触发job,push则是代码推送时自动运行
  • runs-on:使用官方的Ubuntu runner,搭配options.location指定运行区域
  • setup-python action:快速配置指定版本的Python环境,比手动安装更省心
  • 最后一个step用python << 'EOF'的方式写inline Python代码,这样不用额外存脚本文件,所有逻辑都在YAML里

三、一些实用的注意事项

  • 如果你的API需要密钥或敏感参数,绝对不要硬编码在YAML里!用GitHub仓库的Secrets功能,比如在仓库设置里添加API_SECRET,然后在代码里用${{ secrets.API_SECRET }}引用
  • 可以加一个step验证运行区域是否生效,比如执行curl ipinfo.io,会返回当前服务器的地理位置信息,方便你确认是不是在指定的非美国区域
  • 除了Ubuntu,Windows和macOS的官方runner也支持指定location参数,用法完全一样

这样整个流程就完全在GitHub Actions的托管环境里运行了,不需要任何外部服务器,所有配置和代码都在你的仓库workflow文件里,维护起来也方便。

内容来源于stack exchange

火山引擎 最新活动