由于项目名称已附加到FETCH URL,Teamcity准备发布失败

时间:2018-04-18 09:33:42

标签: git maven teamcity maven-release-plugin

我正在使用release-plugin通过Temcity进行准备发布 我得到了以下错误

[10:46:19][Step 2/3] [INFO] Executing: /bin/sh -c cd
/home/tcagent/buildAgent/work/860f91e0ad4abff2 && git push
https://username:****@testurl.com:8081/scm/myrepo/my-project-name.git/**buildConfName**
refs/heads/release/release-name:refs/heads/release/release-name

[10:46:19][Step 2/3] [INFO] Working directory:
/home/tcagent/buildAgent/work/860f91e0ad4abff2

[Step 2/3] Failed to execute goal
org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare
(default-cli) on project **my-project-name**: Unable to commit files
Provider message: The git-push command failed. Command output: fatal:
remote error: Repository not found The requested repository does not
exist, or you do not have permission to access it.

我的父母pom低于SCM详细信息

<scm>
    <connection>scm:git:https://testurl.com:8081/scm/myrepo/${env.TEAMCITY_BUILDCONF_NAME}.git</connection>
    <developerConnection>scm:git:https://testurl.com:8081/scm/myrepo/${env.TEAMCITY_BUILDCONF_NAME}.git</developerConnection>
    <tag>1.0.0</tag>
</scm>

我保留了我的bit-bucket存储库名称,buildConfName和artifact id。当我构建父项目时它运行成功,但是当我运行试图构建子模块时,我看到buildConfName被自动附加到在父POM中配置的SCM URL

有人可以告诉为什么要添加额外的项目名称吗?

由于

1 个答案:

答案 0 :(得分:0)

经过一整天的努力后,我发现了以下发现

  1. 我在所有其他项目中使用父pom来放置常见属性,常见构建步骤,常见依赖版本和SCM详细信息,因为所有项目都有点依赖关系,而实际上并不是模块化项目。所以在子pom maven中将工件id附加到scm连接url中,这在模块化项目方面是正确的行为。

  2. 而在git中,我的项目为每个模块都有单独的存储库,而不是父项目的子目录。这会导致构建失败,因为由于错误的URL形成而找不到存储库。

  3. 所以我使用环境驱动的属性来配置scm连接URL,如下所示。

    父pom.xml中的更改如下所示

    <profiles>
    
        <profile>
            <id>parent</id>
             <activation>
              <property>
                <name>scmModule</name>
                <value>parent</value>
              </property>
            </activation>
            <properties>
                <scmConnection>scm:git:https://testurl.com:8081/scm/**myrepo/my-parent.git**</scmConnection>
                <scmDeveloperConnection>scm:git:https://testurl.com:8081/scm/myrepo**/my-parent.git**</scmDeveloperConnection>
            </properties>
        </profile>
    
        <profile>
            <id>child</id>
             <activation>
              <property>
                <name>scmModule</name>
                <value>child</value>
              </property>
            </activation>
            <properties>
                <scmConnection>scm:git:https://testurl.com:8081/scm/**myrepo/**</scmConnection>
                <scmDeveloperConnection>scm:git:https://testurl.com:8081/scm/**myrepo/**</scmDeveloperConnection>
            </properties>
        </profile>
    
    </profiles> 
    <scm>   
        <connection>${scmConnection}</connection>
        <developerConnection>${scmDeveloperConnection}</developerConnection>
        <tag>1.0.0</tag>
    </scm>
    

    在运行构建时,我使用下面的命令

    用于构建父项目

     mvn release:prepare -DscmModule=parent 
    

    用于构建子项目/模块

    mvn release:prepare -DscmModule=child 
    

    这解决了我的问题,就像子模块一样,maven开始追加工件ID并形成了正确的网址