标签: artifactory

使用Artifactory的REST API来部署jar文件

鉴于这个api 文档,我如何使用HTTPBuilder和Groovy构建我的查询?我尝试了很多东西,但我没有做对.

def http = new HTTPBuilder()
http.request('http://artifactory:8888/libs-snapshot-local/my/jar/1.0/test-jar-1.0.jar', PUT, JSON ) { req ->

        body = [
            uri: "http://artifactory:8888/libs-snapshot-local/my/jar/1.0/test-jar-1.0.jar",
            downloadUri: "http://artifactory:8888/libs-snapshot-local/my/jar/1.0/test-jar-1.0.jar",
            repo: "libs-snapshot-local",
            path: "c:\\pathtojarfile\\test.jar",
            created: "2012-02-03T08:37:12.599-0800",
            createdBy: "someuser",
            size: "1024",
            mimeType: "application/java-archive"

        ]

    response.success = { resp, json ->


    }

  }
Run Code Online (Sandbox Code Playgroud)

这似乎让我分道扬but,但它上传了一个空的jar文件.好像身体完全被忽略了.删除它会产生相同的结果.我似乎无法找到关于如何做到的好参考.

groovy artifactory gradle

7
推荐指数
1
解决办法
7374
查看次数

如何使用maven从ivy存储库下载工件

我们正从常春藤搬到maven.我们在使用常春藤发布的工件中有很多工件,因此工件文件夹/路径结构类似于

  1. artifactory/libs-release/[organization]/[module]/[revision]/[type]s/[module](-[classifier]).[ext]

  2. artifactory/libs-release/[organization]/[module]/[revision]/[type]s/ivy.xml

但是,当我们在maven pom.xml中添加依赖项时,依赖项名称将类似于com.abc.xyz.但maven试图查看路径com/abc/xyz/文件夹,而我们在神器中有神器com.abc.xyz/my-artifact/1.0.0/jars/my-artifact.jar

我怎样才能告诉maven(pom.xml)阅读和理解神器中的路径.

我尝试使用ivy-maven-plugin,但它为一些groovy类提供classNotFound错误,即使我在我的本地m2存储库文件夹中需要groovy jar.

*回答 好,这是我们做的.我们手动创建文件夹然后我们现在使用makepom插件将ivy.xml转换为maven pom.xml感谢您提出所有建议,欢迎更多.

ivy dependency-management artifactory pom.xml maven

7
推荐指数
1
解决办法
5071
查看次数

使用python将工件上传到artifactory

我试图将工件上传到artfactory repo请求,但我得到405错误.我有一个工作的bash脚本来实现这个目标,但我真的需要一个python实现.

蟒蛇

import os
import hashlib
import requests
from requests.auth import HTTPBasicAuth

username = 'me'
password = 'secrets'


target_file = '/home/me/app-1.0.0-snapshot.el6.noarch.rpm'

artifactory_url = 'https://artifactory.company.com/artifactory'

def get_md5(fin):
    md5 = hashlib.md5()
    with open(fin, 'rb') as f:
        for chunk in iter(lambda: f.read(8192), ''):
            md5.update(chunk)
    return md5.hexdigest()

def get_sha1(fin):
    sha1 = hashlib.sha1()
    with open(fin, 'rb') as f:
        for chunk in iter(lambda: f.read(8192), ''):
            sha1.update(chunk)
    return sha1.hexdigest()


def upload(fin):
    base_file_name = os.path.basename(fin)
    md5hash = get_md5(fin)
    sha1hash = get_sha1(fin)
    headers = {"X-Checksum-Md5": md5hash, "X-Checksum-Sha1": sha1hash} …
Run Code Online (Sandbox Code Playgroud)

python artifactory python-requests

7
推荐指数
2
解决办法
4726
查看次数

错误抓取葡萄......未解决的依赖......未找到

更新 8/6:

增强的日志记录显示,从缓存中删除旧 jar 存在问题,这会导致致命的“未找到”错误。还有其他类似的线程,但只有当有人用他们的 IDE 锁定文件时。我们正在运行来自 Jenkins 的单个 groovy 脚本,并且没有人登录到此框。

我们在失败后立即运行进程浏览器,并且没有锁定。然后我使用 Jenkins 用来运行脚本的用户登录,并且删除文件没有错误。

此外,IVY 2.1 中似乎有一个修复程序,当无法删除 jar 时不会失败,而我使用的是 Ivy 2.2(Groovy 1.8.4)。是什么赋予了?

Couldn't delete outdated artifact from cache: C:\Users\myUser\.groovy\grapes\com.a.b.c\x-y-z\jars\x-y-z-1.496.jar
Run Code Online (Sandbox Code Playgroud)

然后是假(?)错误:

Caught: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: Error grabbing Grapes -- [unresolved dependency: com.a.b.c#x-y-z;1.+: not found]
at smokeTestSuccess.<clinit>(smokeTestSuccess.groovy)
Run Code Online (Sandbox Code Playgroud)

有趣的是,每天早上 5 点之后脚本第一次运行时都会发生这种情况。我猜缓存会在凌晨 5 点通过某些默认配置失效?这是某种线索吗??


原帖:

在运行许多共享相同 @Grab 声明的不同 Groovy 脚本时,我间歇性地收到错误消息。(更改文件名以保护无辜者)。首先是完整的 Grab 声明:

@GrabResolver(name = 'libs.release', root = 'http://myserver:8081/artifactory/libs-release', m2compatible = 'true') @Grapes([
@Grab(group = 'com.a.b.c, module = 'x-y-z', version = '1.+', changing …
Run Code Online (Sandbox Code Playgroud)

groovy ruby-grape artifactory

7
推荐指数
1
解决办法
1万
查看次数

Artifactory不删除唯一快照

我们有一个使用220Gb的Artifactory服务器- libs-snapshots-local存储库使用98%的存储空间.

当我们查看存储库的配置时,我们注意到Maven快照行为设置为:unique并且Max Unique Snapshots值为0.

我们将Max Unique Snapshots值更改为5.

当我们仍在处理快照时,这似乎有效,但是如果我们不再部署到快照(已经发布了版本),那么它不会删除任何这些文件.

例如:我们在Snapshots存储库中有以下内容:

com/company/some/app/1.23-SNAPSHOT/.. (50+ artifacts)
com/company/some/app/1.24-SNAPSHOT/.. (5 artifacts)
Run Code Online (Sandbox Code Playgroud)

Artifactory将当前SNAPSHOT目录(1.24-SNAPSHOT)保留为最多5个工件,但1.23-SNAPSHOT目录中的工件数量永远不会减少.

似乎Artifactory使用工件的部署来触发清理检查 - 因此,如果您不再部署到该工件,那么不会进行清理吗?

我们如何让Artifactory开始删除1.23-SNAPSHOT文件夹中的多余工件?

artifactory maven

7
推荐指数
1
解决办法
1482
查看次数

如何使用 maven-publish 和 artifactory-gradle-plugin 生成 maven-metata.xml?

我已经用 groovy 编写了一个 Gradle 插件并使用 Gradle 来构建它。我有一个本地网络 Artifactory 服务器,我使用 Gradle Artifactory 插件和 Gradle 中的 maven-publish 插件发布结果。我有另一个依赖此插件的 Gradle 构建脚本作为依赖项。如果我列出特定版本的依赖项,我就可以让这一切正常工作。我曾尝试使用 maven 版本范围(例如“[1.0,2.0)”),但这失败了,说它找不到 maven-metadata.xml。我检查了 Artifactory,果然,它不在那里。我需要做什么来制作它,最好是在插件的构建过程中?

这是我的自定义 gradle 插件的 build.gradle 文件:

buildscript {
    repositories {
        maven {
            url "${artifactory_contextUrl}/plugins-release"
            credentials {
                username = "${artifactory_user}"
                password = "${artifactory_password}"
            }
        }
    }
    dependencies {
        classpath group: 'org.apache.directory.studio', name: 'org.apache.commons.io', version: '2.4'
        classpath group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.0.9'
    }
}

plugins {
    id 'com.jfrog.artifactory' version '3.0.1'
}

apply plugin: 'groovy'
apply plugin: 'maven-publish'

artifactory {
    contextUrl …
Run Code Online (Sandbox Code Playgroud)

artifactory gradle maven maven-metadata

7
推荐指数
1
解决办法
5862
查看次数

如何将Maven站点部署到Artifactory?

我们已经从一个非常古老的Artifactory(6-7岁)升级.当时,由于篇幅限制,部分存储库不是由Artifactory处理的,而是通过Apache httpd服务器通过HTTP提供的.通过Apache httpd提供的工件被部署在SCP上.我们正试图将所有内容从SCP迁移到HTTPS.我们已经迁移了很多东西.但是,我们现在留下了Maven站点,这些站点也部署在SCP上并由Apache提供服务.

我们希望将所有这些网站迁移到Artifactory.我们需要一个单独的存储库吗?我无法在Artifactory中找到它是如何工作的.有人可以提供解释或链接吗?

提前谢谢了!

artifactory maven

7
推荐指数
1
解决办法
2217
查看次数

如何使用artifactoryPublish发布发布和调试工件

我有Android Studio项目,可以在发布版本和调试版本中构建AAR或APK.我想将这些发布到我的Artifactory服务器上的不同存储库中.该JFrog例子似乎并没有涵盖这种情况.

这是否意味着仅仅构建版本或仅构建调试版本,并根据构建类型选择上载内容和位置,这被认为是最佳实践?

android artifactory gradle maven

7
推荐指数
1
解决办法
6880
查看次数

如何在Artifactory中重建maven-metadata.xml?

我们正在使用Artifactory 3.9.2并且必须合并两个存储库的部分(通过复制工件),这些存储库具有相同的(SNAPSHOT-versioned)工件.这搞砸了maven-metadata.xml.在Nexus中,可以简单地重建此工件的元数据,并让存储库管理器为您排序.我似乎无法找到关于如何使用Artifactory执行此操作的任何链接/解释.有人可以告诉我怎么做到这一点?

artifactory maven maven-metadata

7
推荐指数
3
解决办法
1万
查看次数

使用Artifactory防止覆盖部署

我已经设置了Artifactory(4.1.2)的实例,我用它来存储java文物.我使用如下配置的gradle插件将工件推送到实例

artifactory {
    contextUrl = 'http://example.com/artifactory'
    publish {
        repository {
            // The Artifactory repository key to publish to
            repoKey = 'libs-release-local'

            username = artifactory_username
            password = artifactory_password
        }
        defaults {
            publications('releaseJar')
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够防止按版本覆盖已部署的人工制品.这似乎是一个共同的要求,文档

您可以通过不授予"删除"权限来阻止用户或组覆盖已部署的版本或唯一快照.可以始终覆盖非唯一快照(前提是已授予"部署"权限).

但是,我已经设置了一个 具有相关权限的deploy用户组.1 | deployers1 | CanDeploy

CanDeploy权限仅具有Deploy/Cachedeployers组的权限.

然而!我可以使用将覆盖的工件覆盖到我心中的内容gradle artifactoryPublish.

任何建议都会感激不尽:)

编辑:自问这个问题后,功能已开始按预期工作.这非常奇怪,因为我根本没有更改Artifactory设置,但现在403当我尝试上传与已部署的版本号相同的工件时返回.我只能假设在访问权限的缓存方面存在一些奇怪的东西,或者某些东西导致我通过Web UI进行的更改在一两天内无效 - 令人不安但它目前正在工作.在我确保其工作的同时,会暂时提出问题!

artifactory

7
推荐指数
1
解决办法
808
查看次数