git - Azure 发布管道:使用提交同步文件
问题描述
我第一次使用 Azure VM(Linux、Ubuntu 18),我的任务是为一个简单网站的持续开发设置管道/发布
它应该像这样工作:当 master 分支提交到 Azure 时,自动运行管道并发布以将其部署到 VM 中的目录(不涉及构建,是一个简单的 Wordpress 站点)
我设法让它像这样工作:
- 我设置了一个管道,它只从 git 获取代码并将其复制到 $(Build.ArtifactStagingDirectory) (使用复制文件任务)
- 而不是将其作为工件发布(使用 Publish Artifact 任务)
然后是执行以下操作的发布管道:
- 将工件文件复制到目录(再次使用复制文件任务)
它正在工作,但看起来不错。有一些明显的问题:
- 很慢:它每次都会复制所有文件,而不仅仅是更改的内容
- 如果我删除一个文件,它不会在部署目录中被删除
所以我想要的是将 git commit 与站点目录同步的某种方式,仅覆盖更改的文件并删除任何已删除的文件,忽略 .git-ignore 等上的文件和目录
看起来很简单(我知道如何使用 git hooks 来做),但我只是找不到在 Azure DevOps 中做这件事的方法
可能吗?谁能给我一个方向?
解决方案
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 小时内修改过的所有文件。
您可以查看此线程以获取更多详细信息。
推荐阅读
- python - Django/Rest 框架嵌套序列化
- javascript - http javascript 中的 API/身份验证
- vue.js - Nuxt 仅在特定页面上转换
- c++ - c ++:将shared_ptr传递给lambda的有效方法
- csv - AWK:根据所选列对数据进行多步过滤
- java - JUnit 5 AfterEach 方法在测试方法完成之前调用
- java - SpringBoot / JSF Whitelabel 错误仅作为 IntelliJ 中的模块
- c# - 如何从带有参数的构造函数创建对象
- angular - Angular / Typescript:将泛型类型 T 作为 ComponentType 中的参数传递
- r - 获得向量 R 中两个条目之间的距离