You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions容器中复用Python私有包?

GitHub Actions中复用私有Python包的可行方案

问题背景

我们有多个基于Python编写、运行在容器中的GitHub Actions,已搭建内部模板,仅需编写脚本即可在工作流中调用。但每个Action分散在不同仓库,代码重复度高,计划创建Python包实现复用,却遇到以下问题:

  • 无法使用GitHub Packages托管Python包,只能通过pip install git+https://github...方式安装;
  • 本地执行pip install git+正常,但在GitHub Actions容器中因未认证,无法访问公司私有仓库;
  • 尝试过传递SSH密钥、子模块等方案,要么因容器由GitHub构建导致无效,要么存在安全风险,且目前无法将GH_TOKEN传入Docker构建流程。

可行解决方案

方案一:在Action运行时安装私有包(推荐)

Docker构建阶段无法获取GitHub Actions的输入变量,因此将私有包的安装步骤从Dockerfile的构建环节,移到Action启动后的运行环节:

  1. 修改Dockerfile:移除构建时安装私有包的指令,改用入口脚本启动
FROM ghcr.io/cicirello/pyaction:4.19.0
ADD . /app
WORKDIR /app

# 仅安装公共依赖
RUN pip install --target=/app requests

ENV PYTHONPATH /app
# 改用自定义入口脚本
CMD ["/app/entrypoint.sh"]
  1. 新增entrypoint.sh脚本:接收环境变量并安装私有包
#!/bin/bash
set -e

# 利用传入的GitHub Token安装私有Python包
pip install git+https://oauth2:${INPUT_GITHUBTOKEN}@github.com/mycompany/my-package-folder

# 执行主业务脚本
python /app/main.py

注意:提交前需执行chmod +x entrypoint.sh赋予脚本可执行权限

  1. 调整action.yml:确保输入变量传递到容器环境
name: "some name"
description: "some description"
author: "the author"
inputs:
  GitHubToken:
    description: "GitHub Token"
    required: true        
runs:
  using: "docker"
  image: "Dockerfile"
  env:
    INPUT_GITHUBTOKEN: ${{ inputs.GitHubToken }}

方案二:添加依赖缓存优化(可选)

若担心每次运行都安装包耗时过长,可在调用该Action的工作流中添加缓存步骤,减少重复安装:

- name: 缓存Python依赖
  uses: actions/cache@v3
  with:
    path: |
      ~/.cache/pip
    key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
    restore-keys: |
      ${{ runner.os }}-pip-

方案三:使用公司内部PyPI镜像(若有)

如果公司内部搭建了私有PyPI镜像,可将复用的Python包上传至该镜像,然后在Dockerfile中直接指定内部源安装,无需处理GitHub认证:

RUN pip install --index-url https://your-internal-pypi.com/simple/ your-shared-package

注意事项

  • 所有敏感信息(如GitHub Token)均通过GitHub Actions输入变量传递,禁止硬编码在Dockerfile或脚本中;
  • 给GitHub Token分配最小权限,仅授予私有仓库的读取权限即可;
  • 确保入口脚本拥有可执行权限,避免Action启动失败。

内容的提问来源于stack exchange,提问作者Marcio Aleixo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:02:08