首页 > 解决方案 > Azure 发布管道:使用提交同步文件

问题描述

我第一次使用 Azure VM(Linux、Ubuntu 18),我的任务是为一个简单网站的持续开发设置管道/发布

它应该像这样工作:当 master 分支提交到 Azure 时,自动运行管道并发布以将其部署到 VM 中的目录(不涉及构建,是一个简单的 Wordpress 站点)

我设法让它像这样工作:

  1. 我设置了一个管道,它只从 git 获取代码并将其复制到 $(Build.ArtifactStagingDirectory) (使用复制文件任务)
  2. 而不是将其作为工件发布(使用 Publish Artifact 任务)

然后是执行以下操作的发布管道:

  1. 将工件文件复制到目录(再次使用复制文件任务)

它正在工作,但看起来不错。有一些明显的问题:

  1. 很慢:它每次都会复制所有文件,而不仅仅是更改的内容
  2. 如果我删除一个文件,它不会在部署目录中被删除

所以我想要的是将 git commit 与站点目录同步的某种方式,仅覆盖更改的文件并删除任何已删除的文件,忽略 .git-ignore 等上的文件和目录

看起来很简单(我知道如何使用 git hooks 来做),但我只是找不到在 Azure DevOps 中做这件事的方法

可能吗?谁能给我一个方向?

标签: gitazureazure-devopsazure-pipelines-release-pipeline

解决方案


Azure 发布管道:使用提交同步文件

Azure devops 构建/发布不支持仅构建/发布更改的文件,因为仅构建/发布更改的文件并不总是有意义并且无法实现项目打算发布的内容。

但我们可以比较每次上传/发布文件 -> 与新提交的信息进行比较 -> 只发布更改的文件:

内联powershell:

cd $(System.DefaultWorkingDirectory)

get-childitem $(System.DefaultWorkingDirectory) -recurse | Foreach { 
        $lastupdatetime=$_.LastWriteTime; 
        $nowtime=get-date; 
        if(($nowtime - $lastupdatetime).totalhours -le 48) { 
          Write-Host $_.fullname 
        } 
        else{ 
          remove-item $_.fullname -Recurse -Force 
        } 
      }

上面的 powershell 脚本会列出过去 48 小时内修改过的所有文件。

您可以查看此线程以获取更多详细信息。


推荐阅读