在使用像 Hudson/Jenkins 这样的 CI 工具时,我如何成功地将 Maven 发布插件与 GitHub(或 GitHub 企业)一起使用

Posted

技术标签:

【中文标题】在使用像 Hudson/Jenkins 这样的 CI 工具时,我如何成功地将 Maven 发布插件与 GitHub(或 GitHub 企业)一起使用【英文标题】:How do i successfully use the Maven release plug-in with GitHub (or GitHub enterprise) when using a CI tool like Hudson/Jenkins 【发布时间】:2014-11-19 14:44:48 【问题描述】:

在使用像 Hudson/Jenkins 这样的 CI 工具时,如何在 GitHub(或 GitHub 企业)中成功使用 Maven 发布插件

遇到的问题是

如果 pom.xml 位于子文件夹而不是***文件夹中,Maven 不会提交。因此,后续构建失败,标签名称已存在。 尽管在运行 CI 作业的源服务器之间设置了公钥身份验证,git push 还是失败并出现以下错误之一 公钥认证失败 未知服务 git

【问题讨论】:

在子文件夹中有父级不是一个好习惯。它会使所有 pom 变得比需要的更复杂。 【参考方案1】:

有很多事情需要正确才能使其正常工作。

    为了使 pom.xml 的子文件夹提交工作,该错误已在 Maven 发布插件 2.5.1 中得到解决。获取最新的依赖项。以下部分显示了 pom.xml

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.5.1</version>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.scm</groupId>
                <artifactId>maven-scm-provider-gitexe</artifactId>
                <version>1.9.2</version>
            </dependency>
        </dependencies>
    
        <configuration>
            <checkModificationExcludes>
                <checkModificationExclude>pom.xml</checkModificationExclude>
            </checkModificationExcludes>
        </configuration>
    </plugin>
    

    正确配置 pom.xml 中的 SCM 部分。要使公钥身份验证起作用,请使用 SSH 协议。对于 https 协议,将需要用户/密码,这个答案不包括。通过在服务器部分的 Maven settings.xml 中提供 user/pwd 应该是可能的。

    <scm>
        <developerConnection>scm:git:ssh://github.com/org/repo.git</developerConnection>
        <url>https://github.com/org/repo</url>
        <tag>HEAD</tag>
    </scm>
    

    在源服务器中创建一个名为 git 的用户。如果您以任何其他用户身份运行,developerConnection url 需要使用 git@github.com 而不是 github.com。 Maven 将尝试在 git push 命令中放置一个 git:****** ,但由于服务未知而失败。如果您使用任何其他用户 SSH 进入 github,它将拒绝,并且公钥身份验证失败。

    使用 git 作为用户,生成 SSH 密钥并按照以下简单步骤进行配置

    https://help.github.com/articles/generating-ssh-keys/

    如下编辑您的 Hudson/Jenkins 工作

    在源代码管理部分下,提供 git repo 的 URL。您可能需要将 git 作为协议,因为某些 CI 安装不支持 https。 在要构建的分支中提及您的分支(例如开发) 点击高级并将相同的分支名称放在“结帐/合并到本地分支(可选)”部分中

使用 maven 目标 clean compile release:prepare 和 release:perform 运行您的工作。它应该可以工作。

【讨论】:

以上是关于在使用像 Hudson/Jenkins 这样的 CI 工具时,我如何成功地将 Maven 发布插件与 GitHub(或 GitHub 企业)一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用Hudson进行持续集成

使用 Maven、SVN 和 Hudson(jenkins) 发布

让 Checkstyle 自定义规则在 Hudson/Jenkins 中工作

有没有办法将 Hudson / Jenkins 配置文件保存在源代码控制中?

用于 C++ 持续集成的 buildbot vs hudson/jenkins

Hudson/Jenkins Git 构建所有分支