当前位置: 首页 > 知识库问答 >
问题:

Jenkins Artifactory插件如何将解析器凭据传递给Gradle?

傅旺
2023-03-14

通过使用Jenkins的阿蒂工厂插件和Gradle,我能够成功地部署到我的阿蒂工厂实例。但是,我无法使用进入Jenkins配置的凭据从同一个存储库解析工件。

以下是构建。gradle,取自Artifactory中Artifactory的“生成构建脚本”功能。

apply plugin: 'java'

sourceCompatibility = 1.5
version = '1.0'
buildscript {
    repositories {
        maven {
            url 'http://artifactory.myorg.com:8081/artifactory/plugins-release'
            credentials {
                username = "${artifactory_user}"
                password = "${artifactory_password}"
            }
        }

    }
    dependencies {
        //Check for the latest version here: http://plugins.gradle.org/plugin/com.jfrog.artifactory
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.3"
    }
}

allprojects {
    apply plugin: "com.jfrog.artifactory"
}

artifactory {
    contextUrl = "${artifactory_contextUrl}"   //The base Artifactory URL if not overridden by the publisher/resolver
    publish {
        repository {
            repoKey = 'libs-release-local'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true

        }
    }
    resolve {
        repository {
            repoKey = 'libs-release'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true

        }
    }
}


dependencies {
    compile group: "com.myorg", name: "internal-library", version: '1.0'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}

错误:

FAILURE: Build failed with an exception.

* Where:
Build file '/var/lib/jenkins/jobs/deleteme/workspace/build.gradle' line: 10

* What went wrong:
A problem occurred evaluating root project 'untitled2'.
> Could not find property 'artifactory_user' on Credentials [username: null].

在本地,解析工件是有效的(artifactory\u user等都被解析了,因为我在本地~/.gradle/gradle.properties中配置了它们)。但是,构建失败,因为未定义artifactory\u user。当然,我可以配置gradle。属性供詹金斯使用(这是可行的),但这应该如何工作?Jenkins Artifactory插件Gradle集成似乎应该以某种方式传递解析器凭据。有没有办法在不复制Jenkins上两个地方的凭证的情况下做到这一点?

共有2个答案

司徒运锋
2023-03-14

我也用这个把头撞到墙上...我自己尝试了所有的组合,唯一的一个似乎是工作的是将gradle.properties添加到詹金斯服务器。

最后,我结束了不使用从詹金斯所有的艺术工厂gradle插件。将其添加到build.gradle,并简单地从Jenkins Server gradle插件调用artifactoryPublish。

富锦
2023-03-14

tl; dr用户名 = "${ project.get属性('artifactory.publish.username ')}"

注意:我还没有在詹金斯机器上测试过这个

Jenkins artifactory插件的gradle集成似乎可以做两件事

  • 使用[gradle init脚本]注入人工配置
  • 提供构建和人工配置信息

两者都涉及将文件写入临时文件夹(即linux上的/tmp)。如果您可以访问您的构建服务器,您可能会在临时文件夹中有很多BuildInfo\d{19}。属性init-artiFactory\d{19}gradle文件。

查看其中一个buildInfo文件,可以发现解析和发布凭据存储在artifactory中。决定用户名人工制品。出版用户名分别为

尝试设置和尝试直接使用${artifactory.publish.username}在我的本地计算机上不起作用;我假设它与gradle在设置之前尝试访问属性有关。但是project.get属性方法有效。

buildscript {
    repositories {
        maven {
            url 'http://artifactory.myorg.com:8081/artifactory/plugins-release'
            credentials {
                username = "${project.getProperty('artifactory.resolve.username')}"
                password = "${project.getProperty('artifactory.resolve.password')}"
            }
        }
    }
}

artifactory {
    publish {
        contextUrl = "${project.getProperty('artifactory.publish.contextUrl')}"
        repository {
            repoKey = 'libs-release-local'
            username = "${project.getProperty('artifactory.publish.username')}"
            password = "${project.getProperty('artifactory.publish.password')}"
            maven = true

        }
    }
    resolve {
        repository {
            contextUrl = "${project.getProperty('artifactory.resolve.contextUrl')}"
            repoKey = 'libs-release'
            username = "${project.getProperty('artifactory.resolve.username')}"
            password = "${project.getProperty('artifactory.resolve.password')}"
            maven = true

        }
    }
}

您必须更新您的本地~/。格雷德尔/格雷德尔。属性

artifactory.publish.contextUrl=<artifactory-url>
artifactory.publish.username=<username>
artifactory.publish.password=<password>
artifactory.resolve.contextUrl=<artifactory-url>
artifactory.resolve.username=<username>
artifactory.resolve.password=<password>

 类似资料:
  • 我使用部署到pivotal cloud foundry的spring云数据流,将spring批处理作业作为spring云任务运行,这些作业需要aws凭据才能访问s3存储桶。 我尝试将aws凭据作为任务属性传递,但凭据作为参数或属性显示在任务的日志文件中。(https://docs.spring.io/spring-cloud-dataflow/docs/current/reference/html

  • 问题内容: 我有一个运行Jenkins的节点,该节点使用Maven构建代码。Jenkins作业是声明性管道脚本。Maven需要从需要证书才能访问的私有存储库中下载依赖项。凭证存储在Jenkins凭证管理器中。 我如何将这些凭据传递给Maven,以便Maven可以使用这些凭据从私有存储库正确下载依赖项。 问题答案: 通过将Jenkins凭证注入您的环境,然后将这些凭证传递给Maven,您可以使用Je

  • 作为React课程的一部分,我正在制作一个虚拟电子商店,并希望将产品从一个组件的状态传递到功能组件并在那里显示产品属性。如何将数据从状态传递到无状态组件? 我设置了一个组件ProductList,它存储产品(从api获取)和ProductDetail,它应该显示详细信息(通过id找到产品并显示它的描述、img等)。我设置了一个pp.js,它有两个路由-列表和详细信息。 pp.js: Product

  • 如果我手动生成一个带有swagger-codemen-cli的客户端API,比如: ... 然后我会得到我需要的所有课程。 但是如果从maven内部运行swagger codegen maven插件,如何传递参数——完全解析? 如果没有完全解析,我会错过几个类,比如InlineResponse200。 最好的问候Fredrik

  • 我是Flutter和Dart的新手。我有一些来自基于api json的数据,数据的变量称为。我从官方flutter留档中获取了这个示例代码,我希望能够使用变量并替换字符串文本,如下所示: 但是,我在第行标题中遇到了一个错误:const Text(data[index][“name]),,错误是类型常量创建的参数必须是常量表达式。此错误来自Android Studio本身(版本3.2) 但当我使用这

  • 但是这不起作用,因为上下文是在所有解析器之间共享的,因此如果我在查询上有多个,上下文值就不好。 我还尝试在嵌套解析器上使用上可用的。我可以转到字段,但这里没有参数... 我还尝试在上添加一些数据,但这些数据不在嵌套解析器上共享。