如何阻止Azure DevOps的PublishPipelineArtifact任务忽略.git目录
问题原因
Azure DevOps 的 PublishPipelineArtifact 任务存在内置默认忽略规则,即便你没有手动创建 .artifactignore 文件,也会默认忽略 .git、.gitignore 等版本控制相关目录,这就是你日志中出现 .git 路径被过滤提示的原因。你之前流水线正常、后续失效的情况,和Azure DevOps 2021年中对发布任务默认规则的更新有关。
解决方法
方法1:新增自定义.artifactignore文件
在你的代码仓库根目录创建 .artifactignore 文件,语法和 .gitignore 一致,使用 ! 前缀取消对应路径的忽略规则,示例内容如下:
# 明确声明不忽略.git目录及所有子内容 !.git/** # 其他你需要忽略的文件可按常规规则补充,例如: # **/*.log # **/temp/
该配置会覆盖默认的.git忽略规则,发布时就会保留.git目录。
方法2:流水线临时生成忽略规则
如果你不想在仓库中新增文件,可以在发布任务前添加一步任务,临时生成符合要求的忽略规则,示例YAML如下:
- bash: | echo "!.git/**" > .artifactignore workingDirectory: $(Build.SourcesDirectory) displayName: 临时配置制品忽略规则 # 原有发布任务建议显式指定路径,避免歧义 - publish: $(Build.SourcesDirectory) artifact: repository
方法3:使用CopyFiles任务中转
你也可以先通过CopyFiles任务把所有需要的内容(包括.git目录)复制到中转目录,再发布该目录,CopyFiles任务不会触发默认的artifact忽略规则:
# 复制所有内容(含.git)到中转目录 - copy: $(Build.SourcesDirectory) target: $(Build.ArtifactStagingDirectory)/repository # 发布中转目录内容 - publish: $(Build.ArtifactStagingDirectory)/repository artifact: repository
内容的提问来源于stack exchange,提问作者stephen newman
相关产品推荐
相关产品推荐

