GitLab Runner artifacts打包如何排除public父目录仅导出其下内容
解决方案
GitLab CI 的 artifacts 会默认保留文件相对于项目根目录的路径结构,仅调整 paths 配置无法去掉 public 父目录,需要配合构建步骤的文件操作实现需求,以下是两种可行配置方案:
方案1:直接移动文件到项目根目录
适合工作目录无同名文件冲突的场景:
your_job_name: # 保留原有job的其他配置(如image、tags等) script: # 保留原有全部构建脚本,在末尾添加以下命令 # shopt -s dotglob 用于匹配public下的隐藏文件,不需要可以去掉 - shopt -s dotglob && mv public/* ./ artifacts: name: app paths: # 按需指定原public下需要打包的目录/文件即可 - folder1/ - folder2/ - "*.txt" # 如果不确定public下的内容,也可以用全局匹配,配合exclude排除不需要的文件 # - ./* # exclude: # - .git/ # - .gitlab-ci.yml
方案2:自行打包生成压缩包
适合不想修改工作目录结构、避免文件冲突的场景:
your_job_name: # 保留原有job的其他配置 script: # 保留原有全部构建脚本,在末尾添加以下命令 # 进入public目录打包所有内容(包含隐藏文件),生成的压缩包放在项目根目录 - cd public && tar -czf ../app.tar.gz * .[!.]* artifacts: name: app paths: # 直接把自行打包的压缩包作为产出 - app.tar.gz
该方案下载 artifacts 后得到的 app.tar.gz 解压后直接就是原 public 目录下的所有内容,不会包含 public 父目录。
内容的提问来源于stack exchange,提问作者AnnetteC
相关产品推荐
相关产品推荐

