GitHub Actions 构件保留策略怎样影响流水线
GitHub Actions 构件的保留时间,会决定测试、人工审批、延迟部署和问题追溯还能否取得当时的文件。构建记录显示成功,并不代表文件会永久可下载。流水线需要把“何时上传、下游何时消费、到期如何处理”一起设计;保留期过短,延迟任务可能找不到构件,过长则会积累存储占用。
官方地址:https://github.com/features/actions
把构件保留时间纳入交付窗口
一条流水线当天完成构建,数天后才批准上线,如果部署依赖那个构件,保留时间就必须覆盖等待期和处理余量。它还应考虑失败调查、回滚和审计需要。临时中间文件与正式交付包有不同生命周期,不宜给所有文件套同一个长期保留值。
GitHub.com 官方文档列出的默认构件和日志保留期是 90 天;公共仓库可配置 1—90 天,私有仓库可配置 1—400 天,实际还受组织或企业上限约束。这是配置范围,不表示每个仓库当前都使用最大天数。工作流上传时也能指定 retention-days,但不能超过有效策略上限。

配置一份有限保留的上传下载示例
下面以 GitHub.com 工作流为例,使用 v4 构件动作接口演示,不把它描述成最新版本。将文件保存为 .github/workflows/artifact-retention-demo.yml,提交到默认分支后,在仓库 Actions 中选择该工作流,通过 Run workflow 手动触发。仓库策略需要允许对应动作;GitHub Enterprise Server 的支持范围应另查部署版本文档。
name: artifact-retention-demo
on:
workflow_dispatch:
permissions:
contents: read
jobs:
produce:
runs-on: ubuntu-latest
steps:
- name: Create demo file
shell: bash
run: |
# 只生成一份演示交付文件,不读取仓库或凭据。
mkdir -p output
printf '%s\n' 'artifact retention demo' > output/note.txt
- name: Upload handoff
uses: actions/upload-artifact@v4
with:
name: demo-handoff
path: output/note.txt
# 这里用七天演示,必须满足仓库及上级策略限制。
retention-days: 7
if-no-files-found: error
consume:
needs: produce
runs-on: ubuntu-latest
steps:
- name: Download same-run handoff
uses: actions/download-artifact@v4
with:
name: demo-handoff
path: received
- name: Read demo file
shell: bash
run: |
# 验证同一次运行内的跨任务文件交接。
test -f received/note.txt
cat received/note.txt
produce 上传名为 demo-handoff 的构件,consume 通过 needs 等待上传任务完成,再按名称下载同一次运行的文件。两个任务的 runner 文件系统独立,不能只写一个目录就假定另一个任务能读到。retention-days: 7 控制服务端构件保留,而 needs 控制任务依赖,两者不能互相替代。
读者运行后的预期是两个任务均完成,下载步骤写出 received/note.txt,运行详情的构件区出现 demo-handoff。这里给出的是示例预期,未声称已在真实仓库执行。上传步骤使用 if-no-files-found: error,使输出路径缺失成为明确失败,而非只有警告的“成功”流程。
按运行记录定位下载与过期问题
人工下载时,从仓库 Actions → 对应工作流 → 具体运行 → Artifacts 找到构件。查看构件名、生成运行和时间,不能只拿某次成功构建的截图或日志当文件存在的证明。下载还要求相应访问权限;链接存在与当前用户能否读取,是两个问题。
自动化下载同一次运行可使用上面的配置;下载其他工作流或其他运行的构件,需要明确来源运行标识,并提供足够权限的 token 等必要参数。生产消费方应绑定明确的来源运行,而不是含糊地取“最新同名文件”。

当文件不可下载,先区分未曾上传、名称不一致、来源运行选错、访问权限不足、已经过期或被主动删除。到期删除后的构件不能通过延长默认值重新找回;重新构建会产生新运行及新文件,不能无条件当成原交付物。需要长期保留的版本,应在到期前进入有明确生命周期的发布或归档存储,并记录来源版本。
调整默认策略时区分新旧构件
仓库管理入口通常为 Settings → Actions → General,在构件和日志保留相关区域修改天数并保存;界面具体分组名称可能随版本变化。修改默认保留时间只作用于新的构件和日志,不会追溯改写已有对象的保留时间。因此,不能通过改一次设置,就假定历史构件同步延寿或立即按新值清理。
| 对象 | 应如何安排 |
|---|---|
| 当天跨任务交接文件 | 上传后按明确任务依赖下载 |
| 需要等待人工审批的构件 | 保留期覆盖审批和部署窗口 |
| 正式交付或长期回滚包 | 到期前归档,保留来源标识 |
| 已经过期的旧构件 | 查归档或重新构建,不能靠改默认值恢复 |
清理时优先识别已被消费且无需追溯的临时文件,保留仍支撑审批或回滚的对象。构件删除会影响所有依赖它的消费者,不应只看创建任务已经结束就立即删除。
常见问题
retention-days 写 0 是永久保留吗?
不是。上传动作将 0 解释为使用默认保留设置;具体上限仍以仓库和上级策略为准。
工作流成功,为什么没有构件?
构件需要显式上传。检查上传步骤是否执行、路径是否存在,以及空路径时动作是警告还是失败。缓存也不能直接当作交付构件。
删除运行记录会不会影响下载?
会影响关联构件的可用性。构件链接的有效性还取决于构件、运行和仓库未被删除,不能当作永久公开下载地址。
构件保留策略最终约束的是文件可用窗口。把有效策略、来源运行、下游消费和到期归档连在一起安排,才能避免“构建成功但交付文件已经消失”的断点。
Transformers 怎样用 repetition_penalty 缓解重复输出
- 上一篇
- Transformers 怎样用 repetition_penalty 缓解重复输出
- 下一篇
- Kubernetes 版本发布说明怎样提取对运维有影响的变更
-
- 科技周边 · 业界新闻 | 10分钟前 |
- OpenSSF GUAC 怎样串联软件供应链关系
- 446浏览 收藏
-
- 科技周边 · 业界新闻 | 12分钟前 | 云原生 · kubernetes · 网络安全 · tls Kubernetes Gateway API SNI BackendTLSPolicy SubjectAltNames
- Kubernetes Gateway API BackendTLSPolicy 怎样表达后端 TLS
- 233浏览 收藏
-
- 科技周边 · 业界新闻 | 13分钟前 |
- OpenAPI Webhooks 描述怎样帮助生成客户端
- 201浏览 收藏
-
- 科技周边 · 业界新闻 | 20分钟前 |
- GitHub Actions schedule 仅在默认分支生效怎么办
- 501浏览 收藏
-
- 科技周边 · 业界新闻 | 23分钟前 | 云原生 · 运行时 · manifest OCI Image Spec OCI镜像规范 mediaType artifactType 镜像工具链
- OCI 镜像规范变更怎样影响镜像工具链
- 297浏览 收藏
-
- 科技周边 · 业界新闻 | 23分钟前 | 云原生 · 运维 · kubernetes · 版本升级 · 兼容性 · Kubernetes 弃用 版本升级 版本偏差 Release notes 版本发布说明 运维变更
- Kubernetes 版本发布说明怎样提取对运维有影响的变更
- 271浏览 收藏
-
- 科技周边 · 业界新闻 | 16小时前 | 云原生 · 可观测性 · 业界新闻 · 云原生 FLUSH OpenTelemetry Collector batch processor observability
- OpenTelemetry Collector batch processor 怎样控制 flush 频率
- 268浏览 收藏
-
- 科技周边 · 业界新闻 | 16小时前 | 云原生 · kubernetes · Kubernetes NameSpace Requests limits ResourceQuota LimitRange
- Kubernetes 资源配额怎样避免命名空间之间互相争抢
- 471浏览 收藏
-
- 科技周边 · 业界新闻 | 16小时前 | rebase Cloud Native Buildpacks builder run image
- Cloud Native Buildpacks 怎样把运行时与源码构建分离
- 482浏览 收藏
-
- 科技周边 · 业界新闻 | 16小时前 |
- Kubernetes Sidecar 生命周期变化后怎样安排应用启动顺序
- 302浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 1029次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 1030次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 1173次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 1133次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 973次使用
-
- GitHub Actions schedule 仅在默认分支生效怎么办
- 2026-11-14 501浏览
-
- 蒙面演唱引争议,旺仔小乔被平台封禁
- 2025-08-08 501浏览
-
- openGauss向量驱动升级,RAC多写突破内核
- 2025-07-30 501浏览
-
- 安普瑞斯工厂放假,电芯供应受影响
- 2025-07-04 501浏览
-
- 农产品APP开发优势与功能全解析
- 2025-04-30 501浏览

