如何在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-pythonaction:快速配置指定版本的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




