ECS Fargate部署Jenkins:启用ECS代理任务的工作区文件访问
解决ECS Fargate上Jenkins Docker代理工作区无法访问的问题
核心原因
ECS Fargate上的Jenkins构建代理是临时任务容器,构建完成后会被销毁,工作区数据仅存于代理容器的本地存储中,Jenkins主节点无法直接访问这些临时存储,导致原生Workspaces链接失效。
可行解决方案
1. 为代理容器挂载持久化存储
在ECS代理任务模板中,给容器挂载EFS(弹性文件系统)作为持久化工作区:
- 配置Jenkins代理的Docker容器,将工作区目录(如
/var/jenkins_home/workspace)挂载到EFS的指定路径 - 在Jenkins作业配置里,指定自定义工作区路径为EFS挂载的目录
- 构建完成后,工作区文件会保留在EFS上,只要Jenkins主节点也能访问同一个EFS,就能通过Workspaces链接直接查看文件
2. 构建后归档工作区文件
在Jenkins作业中添加构建后步骤,把工作区文件归档到Jenkins主节点或外部存储:
- 使用
Archive the artifacts插件,指定需要归档的文件路径(比如**/*),构建完成后文件会被上传到Jenkins主节点存储 - 归档后可直接在作业的
Artifacts标签页查看、下载文件,替代原生Workspaces功能 - 若需要长期存储,也可通过Jenkins的S3插件将文件归档到S3
3. 配置远程文件系统浏览器插件
安装Remote File System Browser插件,让它对接代理的持久化存储(如EFS):
- 在插件配置中,选择NFS类型(对应EFS),填写EFS的挂载地址和路径
- 为Jenkins作业关联该文件系统浏览器,此时Workspaces链接会跳转至插件提供的界面,直接访问EFS上的工作区文件
4. 临时保留代理容器(仅用于调试)
修改ECS任务定义,设置任务保留策略为RETAIN,构建完成后不销毁代理容器:
- 在ECS控制台或任务定义JSON中,延长
stopTimeout时间,或配置任务完成后保留容器 - 之后在Jenkins的「节点管理」页面找到对应代理节点,查看工作区路径,再通过ECS任务的exec命令直接访问容器内文件(需提前开启Fargate的exec权限)
注意事项
- 使用EFS时,要确保Jenkins主节点和代理任务在同一VPC,且安全组允许NFS端口(2049)的访问
- 归档文件会占用Jenkins主节点存储,需定期清理无用归档避免溢出
- 保留代理容器会增加ECS资源消耗,仅适合临时调试,不建议生产环境长期使用
内容的提问来源于stack exchange,提问作者stonewalker747
相关产品推荐
相关产品推荐

