【问题标题】:How can I have CloudBees Jenkins Grails build pick up a JAR from the private maven repository?如何让 CloudBees Jenkins Grails 构建从私有 maven 存储库中获取 JAR?
【发布时间】:2013-08-05 22:08:11
【问题描述】:

我有一个 Grails (2.2.3) 项目,我正在尝试在 CloudBees 上构建它。该项目使用第三方库,该库当前未托管在任何公共 maven 存储库中。因此,我需要将此库 jar 发布到 Jenkins 在 CLoudbees 上构建的私有 maven 存储库可以访问。

我已成功构建第三方 jar 并将其发布到我计算机上的本地 maven repo。

按照http://wiki.cloudbees.com/bin/view/DEV/CloudBees+Private+Maven+Repository 的指示,我已将第三方 jar 发布到我的 cloudbees 版本和快照存储库中。

但是,这还不足以让 Cloudbees Jenkins 构建获取单个 jar。

我知道我的构建设置中的其他一切都很好,因为如果我将第三方 jar 添加到我的 grails 应用程序的 /lib/ 文件夹中,构建就会通过,但是将依赖项添加到 /lib/ 文件夹中是不好的做法,所以我想避免它。

这是我在尝试构建时看到的错误:

| Loading Grails 2.2.3
| Configuring classpath
:: problems summary ::
:::: WARNINGS
        module not found: com.singly#singly-sdk;1.0.0-SNAPSHOT
    ==== grailsPlugins: tried
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /scratch/jenkins/workspace/foobarapp master/foobarapp/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/cache-1.0.0/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/hibernate-2.2.3/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/webxml-1.4.1/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/jquery-1.8.0/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/tomcat-2.2.3/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/database-migration-1.1/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/resources-1.1.6/lib/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/2.2.3/projects/foobarapp/plugins/rest-0.7/lib/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== grailsHome: tried
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/lib/com.singly/singly-sdk/ivy-1.0.0-SNAPSHOT.xml
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/lib/com.singly/singly-sdk/jars/singly-sdk-1.0.0-SNAPSHOT.jar
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/lib/com.singly/singly-sdk/bundles/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== grailsHome: tried
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/src/libs/singly-sdk-1.0.0-SNAPSHOT.xml
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/src/libs/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== grailsHome: tried
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/dist/singly-sdk-1.0.0-SNAPSHOT.xml
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/dist/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== grailsHome: tried
      /home/jenkins/.grails/2.2.3/cached-installed-plugins/singly-sdk-1.0.0-SNAPSHOT.xml
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /home/jenkins/.grails/2.2.3/cached-installed-plugins/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== grailsHome: tried
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/plugins/singly-sdk-1.0.0-SNAPSHOT.pom
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /home/jenkins/.grails/wrapper/2.2.3/grails-2.2.3/plugins/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== grailsCentral: tried
      http://grails.org/plugins/grails-singly-sdk/tags/RELEASE_1.0.0-SNAPSHOT/singly-sdk-1.0.0-SNAPSHOT.pom
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      http://grails.org/plugins/grails-singly-sdk/tags/RELEASE_1.0.0-SNAPSHOT/grails-singly-sdk-1.0.0-SNAPSHOT.jar
    ==== localMavenResolver: tried
      /home/jenkins/.m2/repository/com/singly/singly-sdk/1.0.0-SNAPSHOT/singly-sdk-1.0.0-SNAPSHOT.pom
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /home/jenkins/.m2/repository/com/singly/singly-sdk/1.0.0-SNAPSHOT/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== mavenCentral: tried
      http://repo1.maven.org/maven2/com/singly/singly-sdk/1.0.0-SNAPSHOT/singly-sdk-1.0.0-SNAPSHOT.pom
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      http://repo1.maven.org/maven2/com/singly/singly-sdk/1.0.0-SNAPSHOT/singly-sdk-1.0.0-SNAPSHOT.jar
    ==== localMavenResolver: tried
      /home/jenkins/.m2/repository/com/singly/singly-sdk/1.0.0-SNAPSHOT/singly-sdk-1.0.0-SNAPSHOT.pom
      -- artifact com.singly#singly-sdk;1.0.0-SNAPSHOT!singly-sdk.jar:
      /home/jenkins/.m2/repository/com/singly/singly-sdk/1.0.0-SNAPSHOT/singly-sdk-1.0.0-SNAPSHOT.jar
        ::::::::::::::::::::::::::::::::::::::::::::::
        ::          UNRESOLVED DEPENDENCIES         ::
        ::::::::::::::::::::::::::::::::::::::::::::::
        :: com.singly#singly-sdk;1.0.0-SNAPSHOT: not found
        ::::::::::::::::::::::::::::::::::::::::::::::

本质上,Jenkins 并不知道它还必须查看 Cloudbees 快照或发布存储库。

本文档:http://wiki.cloudbees.com/bin/view/DEV/Sharing+Files+with+Build+Executors 说您可以配置 CloudBees Jenkins 构建以使用您选择的 maven settings.xml 文件,但 CloudBees grails Jeknins 构建似乎没有提供设置自定义 maven settings.xml 的方法

我需要做什么才能让 Cloudbees Grails Jenikns Build 从 cloudbees 快照或发布存储库中获取 jar?

【问题讨论】:

    标签: cloudbees


    【解决方案1】:

    我有一个非常相似的在线示例,它应该包含您需要的大部分内容:它实际上是一个 Android Gradle 构建,它使用 CloudBees 上私有(发布)Maven 存储库中的库。

    实际构建在这里:android-gradle-google-apis

    项目构建文件在这里:build.gradle

    要获取 CloudBees 托管的存储库,您只需添加以下内容:

    repositories {
        mavenCentral()
        maven {
            url "https://repository-partnerdemo.forge.cloudbees.com/release/"
        }
    }
    

    如果您使用的是 DEV@cloud,则无需对 settings.xml 执行任何操作,因为它会自动配置为允许您访问您的私有存储库。如果您还想在本地构建,则需要在本地 settings.xml 中添加一个服务器条目,如此处所述CloudBees Private Maven Repositories

    这里有一个示例构建,展示了如何配置构建以将库安装到您的私人仓库:maven-android-sdk-deployer

    developer.cloudbees.com 上有一份文件解释了这一切的背景。

    【讨论】:

    • 谢谢。但是,我仍然面临这个问题。进一步调查显示,当我运行 grails compile 时,即使是我的本地机器也无法从 cloudbees 发布 repo 中提取工件。但是,同一台机器能够将这些工件发布到同一个 cloudbees 发布存储库。我已经在调试模式下使用记录器运行 Grails 编译,但无法弄清楚错误的含义。本质上:1.可以通过maven发布到repo。 2.可以从repo通过浏览器访问 3.不能从repo通过maven访问。如果我发现我做错了什么,我会更新。
    【解决方案2】:

    终于找出问题所在:我需要在 BuildConfig.groovy 中有 maven 凭据

    CloudBees 支持工程师在解决这个问题方面非常有帮助。

    在我的 grails-app/conf/BuildConfig.groovy 中,我需要有这个:

    grails.project.dependency.resolution = {
    
        repositories {
            ...
            mavenRepo "https://repository-foobar.forge.cloudbees.com/release/" 
            ...
        }
    
        credentials {
          realm = "foobarrealm"
          host = "repository-foobar.forge.cloudbees.com"
          username = "foobarusername"
          password = 'foobarencryptedpassword'
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 2013-04-10
      • 1970-01-01
      • 2016-08-18
      • 2013-05-07
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多