首页 文章

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

提问于
浏览
0

简而言之,我怎样才能配置jenkins将开源工件 that are NOT being published 连续自动地发布到私有nexus存储库,只要有变化?

更长版本:

考虑我的代码所依赖的开源项目,只有项目不会将自己发布到任何存储库 . 因此,如果代码中没有频繁更改,我可以手动克隆并发布到我的私有连接 . 问题是,开源项目变化太频繁,我不想手动跟踪项目状态 . 我想以某种方式在jenkins中创建一个工作,构建并将开源项目发布到我的私有存储库 . 该项目是一个scala sbt项目,我的代码也是如此,所以我想发布常 Spring 藤风格而不是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

    我在这看到两件事:

    • 您正在查看项目的SNAPSHOT版本,代码也在不断变化 . Ivy和Maven都可以配置为检查最新的SNAPSHOT,如果已经更改则下载它 .

    • 你're looking at the Release repo, but the official releases are coming fast and furious. You simply want to use the latest. Both Ivy and Maven can be configured to automatically pull the latest available release (although both my complain about the fact you don' t有一个指定的版本) .

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

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

    现在,如果你想查看新版本是否可用,你可以使用 http://search.maven.org rest API和一些脚本肘部油脂检查是否有's a new version of that artifact. Then, you' d设置repo检查作为Jenkins工作 . Jenkins将运行此脚本,下载最新的jar(如果已更改),然后将其发布或部署到您的本地Nexus存储库中 .

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

相关问题