从构建管道推送到本地Azure DevOps Git

问题描述 投票:6回答:3

短版

谁能告诉我如何在Azure DevOps构建管道中设置“命令行脚本”任务,以将更改推送到本地Git存储库(实际上,管道所基于的Git存储库)?

无论我如何尝试,我的脚本在打印[Pushing commits to git后总是超时。

Longer version

我们正在将现有的Java / Maven项目从Jenkins构建服务器迁移到Azure DevOps构建环境,并且我正在尝试建立一个模仿Jenkins“发布阶段”功能的构建管道。

我的第一次尝试是直接在检出的源上调用Maven版本插件。这涉及几个障碍,我可以以一种或多种方式克服其中的大部分障碍:

  1. 标准Azure DevOps git环境没有设置必需的配置值“ user.email”和“ user.name”;这可以通过在推送之前在单独的“命令行脚本”任务中调用git config来解决。
  2. Azure DevOps以“分离的HEAD状态”签出源-为了解决此问题,安装脚本任务也调用git checkout master

一旦设置好,我的Maven调用脚本就会运行到发行插件试图推送到Git的地步;日志文件中的相应行读取为

[INFO] Executing: cmd.exe /X /C "git push https://xxx.visualstudio.com/YYY/_git/zzz refs/heads/master:refs/heads/master"
[INFO] Working directory: D:\a\1\s</code>

此后,直到超时发生,什么都没有发生(至少没有任何记录):>

##[error]The operation was canceled.
##[section]Finishing: Maven pom.xml

为了找出导致此问题的原因,我尝试了其他一些方法,

  • 禁用Maven调用并直接从脚本中调用git push,>
  • 注册“商店”类型的Git凭据帮助器(假设身份验证问题导致超时),>

    但没有成功。我现在想法不多了,如何可以拨打git push电话上班-这里有人可以帮助我吗?

  • P.S .:您可能会说,就Azure DevOps而言,我是个新手,因此我当然不知道该系统的所有技巧和功能。特别是,我不知道是否有任何功能与Maven发布插件具有相同的功能。我们确实使用了Azure DevOps软件包管理,但是我们希望为快照和发行版本保留单独的提要(如Nexus这样的工具),因此我们必须具有一种机制,可以自动提前发行版本号,签入和签入以及构建打包的模块并将其发布到发布提要。

    [如果有人可以建议实现此目标的另一种方法,我也可以提出建议。

简短版本有人可以告诉我如何在Azure DevOps构建管道中设置“命令行脚本”任务,该任务将更改推送到本地Git存储库(实际上是在其上的Git存储库...

< [
要将更改推送到Azure DevOps,您应

将凭据集成到Git存储库URL中>>]

    如果没有,首先创建一个PAT
  • 然后使用以下命令进行推送:

git push https://Personal%20Access%20Token:[email protected]/YYY/_git/zzz master

您不必走PAT路线进行身份验证-根据this,如果您的回购与构建管道属于同一Azure DevOps项目的一部分,则凭据就应该流动。您是否可能未授权构建代理写入您的存储库?需要两件事:

  • 在您的Azure DevOps项目的

    项目设置->存储库]下,允许项目集合生成服务

实体贡献者
适当的存储库(或所有项目存储库)的权限。
  • 允许脚本在“代理作业”设置下访问OAuth令牌:

    enter image description here

  • 还要注意一个糟糕的陷阱:这对于子模块操作将不起作用,因为DevOps不会自动将凭据传递到子模块实例,并且唯一的症状就是无声的挂起。找到手动流动凭证的解决方法here

    即使正确设置了允许脚本访问OAuth令牌以及回购权限,我在内部DevOps Server中也遇到了相同的问题(git push会挂起直到超时)。>

    就我而言,问题是Build Agent在PATH环境变量的开头添加了一个路径-对我来说,它是'C:\ ins \ agent \ externals \ git \ cmd \'。这里驻留了一个旧的git版本(git版本2.18.0.windows.1),并在构建代理的管道上下文中启动了该版本。您可以通过在构建任务中添加“ git --version”调用来验证这一点。

    我还没有调查为什么旧的git版本不起作用,而只是在管道任务中对最新的git.exe使用了完整路径限定

    “ C:\ Program Files \ Git \ bin \ git.exe”推送源主机

    并且使用此git版本-当前的“ git版本2.24.0.windows.2”一切正常。当然,使用较新的git.exe将您的Build Agent更新到一个版本也应该可以解决此问题。
    git maven azure-devops azure-pipelines maven-release-plugin
    3个回答
    3
    投票
    要将更改推送到Azure DevOps,您应

    将凭据集成到Git存储库URL中>>]


    12
    投票
    您不必走PAT路线进行身份验证-根据this,如果您的回购与构建管道属于同一Azure DevOps项目的一部分,则凭据就应该流动。您是否可能未授权构建代理写入您的存储库?需要两件事:

    • 在您的Azure DevOps项目的

      项目设置->存储库]下,允许项目集合生成服务

    实体贡献者

    0
    投票
    即使正确设置了允许脚本访问OAuth令牌以及回购权限,我在内部DevOps Server中也遇到了相同的问题(git push会挂起直到超时)。>

    就我而言,问题是Build Agent在PATH环境变量的开头添加了一个路径-对我来说,它是'C:\ ins \ agent \ externals \ git \ cmd \'。这里驻留了一个旧的git版本(git版本2.18.0.windows.1),并在构建代理的管道上下文中启动了该版本。您可以通过在构建任务中添加“ git --version”调用来验证这一点。

    我还没有调查为什么旧的git版本不起作用,而只是在管道任务中对最新的git.exe使用了完整路径限定

    “ C:\ Program Files \ Git \ bin \ git.exe”推送源主机

    并且使用此git版本-当前的“ git版本2.24.0.windows.2”一切正常。当然,使用较新的git.exe将您的Build Agent更新到一个版本也应该可以解决此问题。
    © www.soinside.com 2019 - 2024. All rights reserved.