maven 发布:在 azure 构建管道中准备

Posted

技术标签:

【中文标题】maven 发布:在 azure 构建管道中准备【英文标题】:maven release:prepare in azure build pipeline 【发布时间】:2021-03-22 18:14:03 【问题描述】:

我正在尝试在一个内置于 maven 工具中的 scala 项目上实现 azure devops。

我必须在项目中使用发布管理,以便我使用下面的 scm 连接和 maven-release 在 pom.xml 文件中如下所示的插件。

...
...
<groupId>com.group.id</groupId>
    <artifactId>engineering-parsers</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>
....
....
....
    <scm>
        <connection>scm:git:git@git.org.com:data-layer/engineering-parser.git</connection>
        <developerConnection>scm:git:git@git.org.com:data-layer/engineering-parser.git</developerConnection>
        <url>https://git.org.com/data-layer/engineering-parser</url>
        <tag>v1.0.0</tag>
    </scm>

...
...
<build>
     <plugins>
         <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>3.0.0-M1</version>
                   <configuration>
                       <tagNameFormat>v@project.version</tagNameFormat>
                       <checkModificationExcludes>
                           <checkModificationExclude>pom.xml</checkModificationExclude>
                       </checkModificationExcludes>
                   </configuration>
               </plugin>
           </plugins>
</build>

...
...

我在 azure 构建管道中添加了一个 maven 任务,如下所示,并提供了命令 release:prepare 并尝试使用 --batch-mode release:clean release:prepare -Dtag= 2.0.0 -DreleaseVersion=2.0.0 -DdevelopmentVersion=2.0.1-SNAPSHOT -Dusername=Personal%20Access%20Token -Dpassword=xxxxxGIT PATxxxxx

在运行构建管道时,maven 构建因抛出以下错误而失败。

似乎使用提供的命令我无法连接到 git 存储库并将更改推送到存储库。

在使用带有 devops 的 maven 发布插件时,我还有什么需要添加的吗?

感谢任何潜在客户!

【问题讨论】:

【参考方案1】:

[错误] git-commit 命令失败。 ....

你好像没有通过认证信息。

您可以尝试在 pom.xml 文件中添加project.scm.id

<properties>
  <project.scm.id>my-scm-server</project.scm.id>
</properties>

然后您可以添加一个 Settings.xml 文件来传递身份验证。

<settings>  
   <servers>  
      <server>
         <id>my-scm-server</id>  
         <username>myUser</username>  
         <password>myPassword</password>  
      </server>   
   </servers>
</settings>

这里是a doc,你可以参考一下。

或者您可以尝试在命令中传递身份验证信息(不推荐)。

 release:prepare -Dusername=[username] -Dpassword=[password] 

您可以参考this ticket了解更多信息。

根据pom.xml中的值而不是硬编码..有没有 有什么办法吗?

为了达到这个目的,需要使用powershell脚本来获取对应位置的值,并将其设置为管道变量。

例如:

$filePath = "filepath/pom.xml"
[xml]$pomXml = Get-Content $filePath
$version = $pomXml.project.version      
Write-Host "##vso[task.setvariable variable=version]$version"

这种情况下,可以获取json文件所在位置对应的参数值。

然后你可以使用变量(例如$(version))来代替硬编码。

更新:

您可以尝试在 maven 任务之前添加额外的命令行任务来运行 git config 命令。

git config --global user.email "you@example.com"
git config --global user.name "PAT"

【讨论】:

我尝试传递用户名和密码,有无connectionUrl-B --batch-mode -Dtag=v1.0.0 release:prepare -DreleaseVersion=1.0.0 -DdevelopmentVersion=2.0.0-SNAPSHOT -DconnectionUrl=scm:svn:https://git.org.com/data-layer/engineering-parser -Dusername=antony -Dpassword=antony 但我仍然遇到同样的错误。 [ERROR] The git-commit command failed. [ERROR] Command output: [ERROR] *** Please tell me who you are. [ERROR] Run [ERROR] git config --global user.email "you@example.com" [ERROR] git config --global user.name "Your Name" @Antony。从 scm git url connection 和 developerConnection 看来,您正在使用 ssh key auth。您可以尝试更改为使用 Https url 吗?例如:&lt;connection&gt;scm:git:https://git.org.com/data-layer/engineering-parser&lt;/connection&gt; 尝试提供 https 连接参数,但得到相同的错误 如果我在 IntelliJ IDE 中尝试相同的 https 连接参数,如果我运行以下命令,则构建成功并且发布准备完成。 --batch-mode release:clean release:prepare -Dtag=1.0.0 -DreleaseVersion=1.0.0 -DdevelopmentVersion=2.0.0-SNAPSHOT -Dusername=Personal%20Access%20Token -Dpassword=[PAT] 而 pom.xml 中的 scm 标签如下。 &lt;scm&gt; &lt;!--&lt;connection&gt;scm:git:git@git.org.com/data-layer/engineering-parser.git&lt;/connection&gt;--&gt; &lt;developerConnection&gt;scm:git:https://git.org.com/data-layer/engineering-parser.git&lt;/developerConnection&gt; &lt;tag&gt;1.0.0&lt;/tag&gt; &lt;/scm&gt;【参考方案2】:

您需要在Maven调用中添加参数-B以避免交互模式。

【讨论】:

我已经添加了 --batch-mode -Dtag=v1.0.0 release:prepare -DreleaseVersion=1.0.0 -DdevelopmentVersion=2.0.0-SNAPSHOT 并且它成功直到 git commit 并且失败并出现以下错误。 [ERROR] The git-commit command failed. [ERROR] Command output: [ERROR] [ERROR] *** Please tell me who you are. [ERROR] [ERROR] Run [ERROR] [ERROR] git config --global user.email "you@example.com" [ERROR] git config --global user.name "Your Name" 而且我还需要根据 pom.xml 中的值给出-Dtag=v1.0.0 release:prepare -DreleaseVersion=1.0.0 -DdevelopmentVersion=2.0.0-SNAPSHOT 而不是硬编码..有什么办法吗? 如果您还有其他问题,请在 *** 上提出新问题。

以上是关于maven 发布:在 azure 构建管道中准备的主要内容,如果未能解决你的问题,请参考以下文章

Azure Devops maven 构建在声纳 qube 实例中失败

在 Azure DevOps 发布管道中运行 Java Selenium 测试

缺少 Azure Maven 任务输出

如何使用构建管道部署 Azure 数据工厂资源?

Azure 构建管道 yaml 模板参考

如何在发布前使用 azure 管道在 Web 应用程序中复制反应构建文件?