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 吗?例如:<connection>scm:git:https://git.org.com/data-layer/engineering-parser</connection>
尝试提供 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 标签如下。 <scm> <!--<connection>scm:git:git@git.org.com/data-layer/engineering-parser.git</connection>--> <developerConnection>scm:git:https://git.org.com/data-layer/engineering-parser.git</developerConnection> <tag>1.0.0</tag> </scm>
【参考方案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 实例中失败