本文旨在指导您如何使用 GitHub Actions 运行 Jupyter Notebook 脚本,并安全地管理脚本中的凭据。我们将探讨如何配置 GitHub Actions 的定时任务,如何从 GitHub 仓库运行 Jupyter Notebook 脚本,以及如何利用 GitHub Secrets 安全地存储和访问敏感信息,避免硬编码凭据带来的安全风险。通过本文,您将掌握一种可靠且安全的自动化 Jupyter Notebook 脚本执行方案。
GitHub Actions 是一种强大的自动化工具,可以用于构建、测试和部署代码。它也可以用来运行 Jupyter Notebook 脚本,这对于需要定期执行数据分析、报告生成等任务的场景非常有用。本文将详细介绍如何配置 GitHub Actions 来实现 Jupyter Notebook 脚本的定时运行,并重点讲解如何安全地管理脚本中涉及的敏感信息,例如 API 密钥、数据库密码等。
1. 设置 GitHub Actions 工作流
首先,需要在你的 GitHub 仓库中创建一个 .github/workflows 目录,并在该目录下创建一个 YAML 文件,例如 jupyter_notebook.yml。这个 YAML 文件定义了 GitHub Actions 的工作流。
以下是一个示例 jupyter_notebook.yml 文件:
name: Run Jupyter Notebook on: schedule: - cron: '0 0 * * *' # 每天凌晨 00:00 运行 jobs: run_notebook: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.9' # 根据你的需求选择 Python 版本 - name: Install dependencies run: | pip install papermill pip install -r requirements.txt # 如果有 requirements.txt 文件 - name: Execute Jupyter Notebook run: | papermill your_notebook.ipynb output_notebook.ipynb
解释:
- name: 工作流的名称,这里设置为 “Run Jupyter Notebook”。
- on: 定义触发工作流的条件。这里使用 schedule 来设置定时任务,cron: ‘0 0 * * *’ 表示每天凌晨 00:00 运行。
- jobs: 定义工作流中包含的任务。这里只有一个任务 run_notebook。
- runs-on: 指定运行任务的操作系统,这里使用 ubuntu-latest。
- steps: 定义任务中包含的步骤。
- actions/checkout@v3: 检出你的代码仓库。
- actions/setup-python@v4: 设置 Python 环境。
- pip install papermill: 安装 papermill,它是一个用于参数化和执行 Jupyter Notebook 的工具。
- pip install -r requirements.txt: 安装项目依赖,如果你的项目有 requirements.txt 文件。
- papermill your_notebook.ipynb output_notebook.ipynb: 使用 papermill 执行 Jupyter Notebook。your_notebook.ipynb 是你的 Jupyter Notebook 文件名,output_notebook.ipynb 是输出文件名。
注意事项:
- cron 表达式的格式请参考 GitHub Actions 的官方文档。
- 根据你的项目需求修改 Python 版本和依赖安装命令。
- 确保你的 Jupyter Notebook 文件名正确。
- 如果你的 Jupyter Notebook 中使用了特定的 kernel,需要在安装依赖的步骤中安装相应的 kernel。
2. 安全地管理凭据:使用 GitHub Secrets
为了安全地管理 Jupyter Notebook 脚本中使用的凭据,强烈建议使用 GitHub Secrets。 GitHub Secrets 允许你存储敏感信息,例如 API 密钥、数据库密码等,而无需将它们硬编码到你的代码中。
步骤:
- 在你的 GitHub 仓库中,进入 “Settings” -> “Security” -> “Secrets and variables” -> “Actions”。
- 点击 “New repository secret”。
- 输入 Secret 的名称(例如 API_KEY)和值(你的 API 密钥)。
- 点击 “Add secret”。
在 Jupyter Notebook 中访问 Secrets:
在你的 Jupyter Notebook 脚本中,可以使用 os.environ 来访问 GitHub Secrets。
import os api_key = os.environ.get("API_KEY") if api_key: print("API Key:", api_key) else: print("API Key not found in environment variables.")
在 GitHub Actions 工作流中使用 Secrets:
在你的 jupyter_notebook.yml 文件中,可以使用 ${{ secrets.SECRET_NAME }} 的形式来访问 Secrets。
例如,如果你想将 API 密钥传递给 papermill 命令,可以这样做:
- name: Execute Jupyter Notebook run: | papermill your_notebook.ipynb output_notebook.ipynb -p API_KEY "${{ secrets.API_KEY }}"
然后在 Jupyter Notebook 脚本中,可以通过 papermill 传递的参数来访问 API 密钥。
import papermill as pm api_key = pm.parameters.get("API_KEY") if api_key: print("API Key:", api_key) else: print("API Key not found in papermill parameters.")
注意事项:
- 永远不要将 Secrets 硬编码到你的代码中。
- 确保你的 Secrets 名称清晰明了,以便于理解和维护。
- 定期审查你的 Secrets,确保它们仍然有效且安全。
3. 完整示例
下面是一个完整的示例,展示了如何使用 GitHub Actions 运行 Jupyter Notebook 脚本,并安全地管理 API 密钥。
jupyter_notebook.yml 文件:
name: Run Jupyter Notebook on: schedule: - cron: '0 0 * * *' # 每天凌晨 00:00 运行 jobs: run_notebook: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.9' - name: Install dependencies run: | pip install papermill pip install -r requirements.txt - name: Execute Jupyter Notebook run: | papermill your_notebook.ipynb output_notebook.ipynb -p API_KEY "${{ secrets.API_KEY }}"
your_notebook.ipynb 文件:
import papermill as pm import os # 从 papermill 参数中获取 API 密钥 api_key = pm.parameters.get("API_KEY") # 如果 papermill 参数中没有 API 密钥,则尝试从环境变量中获取 if not api_key: api_key = os.environ.get("API_KEY") if api_key: print("API Key:", api_key) else: print("API Key not found in papermill parameters or environment variables.") # 在这里使用你的 API 密钥进行操作 # 例如,调用 API 接口 # ...
总结
通过本文,你学习了如何使用 GitHub Actions 运行 Jupyter Notebook 脚本,并安全地管理脚本中使用的凭据。 这种方法可以帮助你自动化数据分析、报告生成等任务,并确保你的敏感信息得到保护。记住,安全性至关重要,永远不要将 Secrets 硬编码到你的代码中。使用 GitHub Secrets 是一种安全且可靠的管理凭据的方式。
python git github 操作系统 编码 ubuntu 工具 环境变量 Python pip github jupyter 数据库 数据分析 ubuntu 自动化