如何配置GitLab流水线生成不带子文件夹的Artifacts压缩包
解决方案
场景1:仅需要生成普通产物,不需要部署GitLab Pages
你的原始配置用了pages作为作业名,这是GitLab Pages的专属作业名,要求必须输出public目录。如果不需要部署Pages,修改作业名并调整文件存放路径即可:
build_artifacts: stage: deploy script: - mkdir .tmp - cp -r * .tmp # 把所有待发布文件直接移到CI工作根目录,不套外层文件夹 - mv .tmp/* . # 如果需要保留隐藏文件,再加下面这条 - mv .tmp/.* . 2>/dev/null || true - rm -rf .tmp artifacts: paths: # 匹配根目录下所有非隐藏文件 - "./*" # 如果需要包含隐藏文件,取消注释下面这条 # - "./.*" exclude: # 排除不需要的冗余文件,可根据实际需求调整 - ".git/" - ".gitlab-ci.yml"
场景2:同时需要部署GitLab Pages和符合要求的产物
GitLab Pages强制要求作业输出public目录,这种情况下可以额外自行打包一个符合结构要求的压缩包作为产物:
pages: stage: deploy script: - mkdir .public - cp -r * .public - mv .public public # 自行打包无外层目录的压缩包 - cd public - zip -r ../output.zip ./* # 如果需要包含隐藏文件,把上面的命令替换成下面这条 # - zip -r ../output.zip ./* ./.* - cd .. artifacts: paths: - public # 保留给Pages部署使用 - output.zip # 解压后直接是所有根目录文件
原配置问题说明
GitLab CI打包产物时,会把artifacts.paths中指定的目录本身作为顶层目录放入压缩包,没有内置参数可以跳过该外层目录,因此需要通过调整文件存放路径或者预打包的方式满足需求。
内容的提问来源于stack exchange,提问作者jack rk
相关产品推荐
相关产品推荐

