use*_*413 58 shell artifactory continuous-deployment
我需要来自Artifactory中的存储库的最新工件(例如,快照).需要通过脚本将此工件复制到服务器(Linux).
我有什么选择?像Wget/SCP这样的东西?我如何获得工件的路径?
我找到了一些需要Artifactory Pro的解决方案.但我只有Artifactory,而不是Artifactory Pro.
是否有可能在没有用户界面的情况下从Artifactory下载而没有Pro-Version?有什么经历?
如果重要的话,我正在使用OpenSUSE 12.1(x86_64).
bti*_*nay 65
像以下bash脚本之类的东西com.company:artifact将从snapshotrepo中检索最新的快照:
# Artifactory location
server=http://artifactory.company.com/artifactory
repo=snapshot
# Maven artifact location
name=artifact
artifact=com/company/$name
path=$server/$repo/$artifact
version=$(curl -s $path/maven-metadata.xml | grep latest | sed "s/.*<latest>\([^<]*\)<\/latest>.*/\1/")
build=$(curl -s $path/$version/maven-metadata.xml | grep '<value>' | head -1 | sed "s/.*<value>\([^<]*\)<\/value>.*/\1/")
jar=$name-$build.jar
url=$path/$version/$jar
# Download
echo $url
wget -q -N $url
Run Code Online (Sandbox Code Playgroud)
感觉有点脏,是的,但它完成了工作.
noa*_*amt 32
Artifactory有一个很好的扩展REST-API,几乎任何可以在UI中完成的事情(可能甚至更多)也可以使用简单的HTTP请求来完成.
你提到的功能 - 检索最新的工件,确实需要专业版; 但也可以通过一些工作和一些基本脚本来实现.
选项1 - 搜索:
对一组组 ID和工件ID坐标执行GAVC搜索,以检索该组的所有现有版本; 然后您可以使用任何版本字符串比较算法来确定最新版本.
选项2 - Maven方式:
Artifactory生成一个由Maven使用的标准XML元数据,因为Maven面临同样的问题 - 确定最新版本; 元数据列出了工件的所有可用版本,并为每个工件级文件夹生成; 通过简单的GET请求和一些XML解析,您可以发现最新版本.
小智 11
curl 'http://$artiserver/artifactory/api/storage/$repokey/$path/$version/?lastModified'上面的命令用一个带有两个元素的JSON响应 - "uri"和"lastModified"
获取uri中的链接会返回另一个具有工件"downloadUri"的JSON.
获取"downloadUri"中的链接,您就拥有了最新的人工制品.
(需要Pro)解析并下载最新工件,如果使用Jenkins Artifactory插件在另一个工作中发布到artifactory:
${repokey}:**/${component}*.jar;status=${STATUS}@${PUBLISH_BUILDJOB}#LATEST=>${targetDir}您还可以使用Artifactory 查询语言来获取最新的工件。
以下 shell 脚本只是一个示例。它使用“items.find()”(在非专业版中可用),例如items.find({ "repo": {"$eq":"my-repo"}, "name": {"$match" : "my-file*"}})搜索存储库名称等于“my-repo”的文件并匹配所有以“my-file”开头的文件. 然后它使用shell JSON 解析器 ./jq通过按日期字段“更新”排序来提取最新文件。最后它使用 wget 下载工件。
#!/bin/bash
# Artifactory settings
host="127.0.0.1"
username="downloader"
password="my-artifactory-token"
# Use Artifactory Query Language to get the latest scraper script (https://www.jfrog.com/confluence/display/RTF/Artifactory+Query+Language)
resultAsJson=$(curl -u$username:"$password" -X POST http://$host/artifactory/api/search/aql -H "content-type: text/plain" -d 'items.find({ "repo": {"$eq":"my-repo"}, "name": {"$match" : "my-file*"}})')
# Use ./jq to pars JSON
latestFile=$(echo $resultAsJson | jq -r '.results | sort_by(.updated) [-1].name')
# Download the latest scraper script
wget -N -P ./libs/ --user $username --password $password http://$host/artifactory/my-repo/$latestFile
Run Code Online (Sandbox Code Playgroud)
使用最新版本的 artifactory,您可以通过 api 进行查询。
如果您有一个带有 2 个快照的 Maven 工件
名称 => 'com.acme.derp'
版本 => 0.1.0 存储
库名称 => 'foo'
快照 1 => derp-0.1.0-20161121.183847-3.jar
快照 2 => derp-0.1.0-20161122.00000- 0.jar
那么完整的路径将是
和
你会像这样获取最新的:
curl https://artifactory.example.com/artifactory/foo/com/acme/derp/0.1.0-SNAPSHOT/derp-0.1.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
您可以使用 REST-API 的“ Item last modified ”。从文档中,它返回如下内容:
GET /api/storage/libs-release-local/org/acme?lastModified
{
"uri": "http://localhost:8081/artifactory/api/storage/libs-release-local/org/acme/foo/1.0-SNAPSHOT/foo-1.0-SNAPSHOT.pom",
"lastModified": ISO8601
}
Run Code Online (Sandbox Code Playgroud)
例子:
# Figure out the URL of the last item modified in a given folder/repo combination
url=$(curl \
-H 'X-JFrog-Art-Api: XXXXXXXXXXXXXXXXXXXX' \
'http://<artifactory-base-url>/api/storage/<repo>/<folder>?lastModified' | jq -r '.uri')
# Figure out the name of the downloaded file
downloaded_filename=$(echo "${url}" | sed -e 's|[^/]*/||g')
# Download the file
curl -L -O "${url}"
Run Code Online (Sandbox Code Playgroud)