如何从 Azure DevOps Pipeline Dynamics 365 CE 添加/更新 git 存储库中的文件

Nit*_*tin 5 command-line github azure-devops azure-pipelines dynamics-365

精简版

当构建管道被触发时,构建管道任务之一将获取最新文件,并且必须在当前运行管道的 git 存储库中添加/更新它。我试图通过使用命令行任务来做到这一点,但由于不是 git 存储库而失败

fatal: not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)

长版

我试图实现动态 365 实例的解决方案打包和解包过程。所以构建管道有以下任务

  1. 从 Dynamics 365 导出解决方案并将其存储在 $(build.binariesdirectory) 中

  2. 解压解决方案 zip 文件并存储在 $(Build.Repository.LocalPath) 中,即添加/更新现有文件

  3. 提交文件并将文件推送到当前管道存储库的命令行任务

ECHO "Setting git config..."
git config --global user.email "xxx@xyz.com"
git config --global user.name "Admin"

ECHO "CHECK GIT STATUS..."
git status

ECHO "GIT ADD..."
git add -A

ECHO "CHECK GIT STATUS..."
git status

ECHO "Commiting the changes..."
git commit -m "Latest Customizations updated"

ECHO "Pushing the changes..."
git push -u origin master

ECHO "Customization Committed Successfully"
Run Code Online (Sandbox Code Playgroud)

更新

如果使用 2 个命令行任务创建管道,即一个在 中创建随机文件Build.Sourcedirectory,另一个用于提交更改,则 git commit 和 push 命令正在工作。

但是如果我们Build.Sourcedirectory在命令行任务之前添加其他任务(例如解压缩目录中的文件),则会出现错误,因为它不是存储库。

如果你看到下面的截图,在结账阶段,git repo 被克隆到 D:\a\1\s 在此处输入图片说明

下面的截图来自命令行任务,其中当前工作目录与结帐任务相同(即D:\a\1\s),我们可以看到“.git”文件夹存在,因此当前目录中有本地存储库,但仍然得到错误为fatal: not a git repository

在此处输入图片说明

我在这里错过了什么吗?

And*_*SFT 11

默认情况下,源文件被检出到Build.SourcesDirectory(例如:目录D:\a\1\s:),它可以被视为一个临时的 git 存储库。

根据错误消息,命令行任务的工作目录似乎不在该工作目录下Build.SourcesDirectory,您没有git checkout再次进入该工作目录。

因此,请尝试解压解决方案 zip 文件并存储在Build.SourcesDirectory.

ECHO "Setting git config..."
git config --global user.email "xxx@xyz.com"
git config --global user.name "Admin"

ECHO "CHECK GIT STATUS..."
git status

git checkout -b master

ECHO "GIT ADD..."
git add -A

ECHO "CHECK GIT STATUS..."
git status

ECHO "Commiting the changes..."
git commit -m "Latest Customizations updated"

ECHO "Pushing the changes..."
git push -u origin master

ECHO "Customization Committed Successfully"
Run Code Online (Sandbox Code Playgroud)

请注意,您需要向构建服务授予版本控制权限并启用允许脚本访问系统令牌

在此处输入图片说明