配置jenkins以将开源项目发布到私有nexus

时间:2014-04-07 13:16:42

标签: git maven jenkins sbt ivy

简而言之,我如何配置jenkins将未发布的开放源文件连续发布到私有nexus存储库&自动,只要有变化?

更长版本:

考虑我的代码所依赖的开源项目,只有项目不会将自己发布到任何存储库。因此,如果代码中没有频繁更改,我可以手动克隆并发布到我的私有连接。问题是,开源项目变化太频繁,我不想手动跟踪项目状态。我想以某种方式创建一个jenkins的工作,建立&将开源项目发布到我的私有存储库。该项目是一个scala + sbt项目,我的代码也是如此,所以我想发布常春藤样式而不是 maven样式

我对此的看法:

理想情况下,我会让jenkins运行动作:compile test publish-local,如果一切顺利,我会(以某种方式)发布生成的工件。但是:

  • 我不知道如何(以及是否可能)使用sbt(甚至是Ivy),就像使用maven部署生成的jar一样。
  • 我可以使用一个分叉项目,修改后的build.sbt包含publishTo密钥,并引用我的.credentials并将jenkins发送给compile test publish私人关系,但我必须git pull从原始回购改为我的分支改变,并且我希望自动发生......
  • 我可以使用一个hacky解决方案,比如jenkins会运行两个不同的工作。第一个将由原始的SCM拉动触发,并执行一个脚本,将原点的变化拉到分叉的仓库(与上面的子弹相同)。第二个作业将取决于第一个作业,并且每次执行第一个作业时都会触发。这项工作将构建并发布分叉回购。但这个解决方案听起来太复杂和苛刻。肯定有更简单的方法......

那么,处理这种情况的好方法是什么?

1 个答案:

答案 0 :(得分:0)

我在这里看到两件事:

  • 您正在查看项目的 SNAPSHOT 版本,代码也在不断变化。可以将Ivy和Maven配置为检查最新的 SNAPSHOT ,如果已更改,则下载它。
  • 您正在查看发布回购,但官方发布的内容正在迅速而激烈。你只想使用最新的。 Ivy和Maven都可以配置为自动提取最新的可用版本(虽然我抱怨你没有指定的版本)。

如果你使用Nexus,你可以设置Ivy和Maven来覆盖使用的默认主仓库http://repo1.maven.org,并将你当地的Nexus仓库视为所有Maven仓库的全球主仓。如果您的本地Nexus存储库具有该工件,则会将该本地工件下载到构建版本中。如果没有,您的本地Nexus仓库将会出去并获取所请求的工件。

如果您以这种方式设置本地Nexus仓库,并且部署(Maven)或发布(Ivy)您的罐子到公共仓库,罐子将存储在您当地的Nexus存储库中,而不是存储在远程存储库中。

现在,如果您想查看新版本是否可用,您可以使用http://search.maven.org rest API和一些脚本肘部油脂来检查是否有该工件的新版本。然后,您将repo check设置为Jenkins作业。 Jenkins将运行此脚本,下载最新的jar(如果已更改),然后发布部署到您当地的Nexus存储库中。

如果您想构建最新版本,可以设置Jenkins来轮询该远程第三方存储库。如果那个回购是一个Git或Subversion回购,那么轮询不会占用大量资源(尽管我每天只会回复一次这样的回购只是为了善待)。然后,那个远程仓库只是另一个本地Jenkins的工作。添加发布/部署插件并将该工件发布/部署到您的本地Nexus存储库。