在我们的工件中,我们定义了一个快照仓库来处理最多5个独特的快照.我们在文件名中添加了-SNAPSHOT-.extension.SNAPSHOT也转换为时间戳.使用gradle完成构建,并使用bamboo和artifactory插件发布工件.
部署到神器的文件......
inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-SNAPSHOT-79.amp
Run Code Online (Sandbox Code Playgroud)
变得......
inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-20120321.154621-1-79.amp
Run Code Online (Sandbox Code Playgroud)
这很好,每个构建添加一个增加内部版本号的新文件,但timestamp-number总是保留20120321.154621-1所以我们有一个文件列表,如:
任何人都有另一个目录布局的解决方案或建议?
假设我有工件"mylibrary-5.2.jar"和"mylibrary-5.3.jar"代表我们的项目为我们的其他项目创建和发布的库的5.2和5.3版本.
Artifactory是否支持具有每个这些工件的多个"版本"来表示在发布期间为构造此工件而执行的不同构建?
例如,要生成5.2版本的"mylibrary"的最终版本,即工件:mylibrary-5.2.jar,我们通过3个版本来获得通过我们的集成环境的自动化测试和用户验收测试的版本.
因此,有三个单独的构建为5.2版本生成了三个单独的构件.我们希望能够在以后保留并可能回忆起这些不同构建的工件(用于测试等).
为了做到这一点,以下哪个选项可行?
将工件捕获为单独的工件,即build-5.2-b1.jar(构建1的工件),build-5.2-b2.jar(构建2的工件),build-5.2-b3.jar(构建3的工件),以及构建 - 5.2.jar(最终的生产版本;与build 3匹配)
捕获名为"build-5.2.jar"的SINGLE工件,该工件具有捕获构建1到3的工件的VERSIONS,并且可以通过版本号稍后调用.
我是gradle和Artifactory集成的新手,到目前为止,我可以将工件从一个工作区发布到另一个工作区.
我所做的是创建了一个gradle示例项目,现在我想将JUnit jar发布到Artifactory中,然后将其作为依赖项检索到我的项目类路径,以便我可以运行我的项目.
apply plugin: 'java'
apply plugin: 'eclipse'
//apply plugin: 'artifactory-publish'
sourceCompatibility = 1.5
version = '1.0'
jar
{
manifest
{
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation Version': version
}
}
buildscript
{
repositories
{
maven
{
url 'http://dl.bintray.com/jfrog/jfrog-jars'
}
mavenCentral()
}
dependencies
{
classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.1.0')
}
}
//pull/retrieve artifacts(jar) from artifactory
repositories
{
ivy
{
url = 'http://localhost:8081/artifactory/APM-jars'
credentials
{
username = 'admin'
password = 'password'
}
}
mavenCentral()
dependencies {
compile group: …
Run Code Online (Sandbox Code Playgroud) 我无法在一台Artifactory服务器上解决两个存储库(ext-releases-local和repo1-cache).我的构建似乎只解决了列表中的最后一个存储库而忽略了第一个存储库.基本上,我将项目的依赖项放在ext-releases-local中,并且可以在名为repo1-cache的远程存储库中找到它们的传递依赖项.所以我需要使用Artifactory Gradle插件解决这两个问题.这是我在build.gradle中尝试过的设置:
artifactory {
contextUrl = "https://myartifactory.host.com"
publish {
repository {
repoKey = "myproj-releases-local"
username = "${artifactory_deployer_user}"
password = "${artifactory_deployer_password}"
}
}
resolve {
repository {
repoKey = "repo1-cache"
username = "${artifactory_reader_user}"
password = "${artifactory_reader_password}"
}
repository {
repoKey = "ext-releases-local"
username = "${artifactory_reader_user}"
password = "${artifactory_reader_password}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果有任何帮助/建议,我将不胜感激.在jfrog的网站上没有任何文件说明是否支持解析两个回购.没有Artifactory Gradle插件,这绝对是可能的,但不幸的是我将通过Bamboo构建,并且Artifactory Gradle插件已成为发布管理所必需的.
我有一个项目,它有一个SharedCode
(Java)模块,其次是一个Android
(Android库)模块,它取决于SharedCode
模块.我要发布一个jar
从神器SharedCode
模块和aar
从神器Android
模块.我无法弄清楚如何编写我的build.gradle
文件,以便两个模块在artifactoryPublish
任务运行时发布到Artifactory .目前只有SharedCode
模块将其工件发布到Artifactory.
我的build.gradle
文件如下.请注意,maven-publish
我的build.gradle
文件方面似乎是正确的,因为当我运行publishToMavenLocal
任务时,我会看到本地Maven文件夹中两个模块的工件(即'~/.m2/repository'
).
首先,build.gradle
我的SharedCode
模块中的文件如下:
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.artifactory'
group = "${projectGroupId}"
version = "${projectVersionName}"
dependencies {
compile 'com.google.guava:guava:18.0'
}
publishing {
publications {
SharedCode(MavenPublication) {
groupId "${projectGroupId}"
artifactId 'SharedCode'
version "${projectVersionName}"
from components.java
}
}
}
artifactory {
contextUrl = "${artifactory_url}" …
Run Code Online (Sandbox Code Playgroud) 我正在寻找nginx配置来设置docker存储库
###########################################################
## this configuration was generated by JFrog Artifactory ##
###########################################################
## add ssl entries when https has been set in config
ssl_certificate /etc/nginx/ssl/demo.pem;
ssl_certificate_key /etc/nginx/ssl/demo.key;
ssl_session_cache shared:SSL:1m;
ssl_prefer_server_ciphers on;
## server configuration
server {
listen 443 ssl;
listen 80 ;
server_name ~(?<repo>.+)\.art.local art.local;
if ($http_x_forwarded_proto = '') {
set $http_x_forwarded_proto $scheme;
}
## Application specific logs
## access_log /var/log/nginx/art.local-access.log timing;
## error_log /var/log/nginx/art.local-error.log;
rewrite ^/$ /artifactory/webapp/ redirect;
rewrite ^/artifactory/?(/webapp)?$ /artifactory/webapp/ redirect;
rewrite ^/(v1|v2)/(.*) /artifactory/api/docker/$repo/$1/$2;
chunked_transfer_encoding on;
client_max_body_size 0; …
Run Code Online (Sandbox Code Playgroud) 我正在使用jfrog rt config
配置JFrog CLI.它要求我的"Artifactory服务器ID".我无法在JFrog文档或我的Artifactory实例中找到有关此内容的任何信息.如何找到此服务器ID?
在Gradle中,我只需添加:
repositories {
jcenter()
}
Run Code Online (Sandbox Code Playgroud)
在maven pom.xml中执行相同操作的最简单和最正确的方法是什么?在哪里可以获得jcenter存储库的正确URL.
我在build.gradle文件中使用发布部分将Android库发布到Artifactory:
publishing {
publications {
aar(MavenPublication) {
groupId packageName
version = libraryVersion
artifactId project.getName()
// Tell maven to prepare the generated "*.aar" file for publishing
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
pom.withXml {
def dependencies = asNode().appendNode('dependencies')
configurations.getByName("_releaseCompile").getResolvedConfiguration().getFirstLevelModuleDependencies().each {
def dependency = dependencies.appendNode('dependency')
dependency.appendNode('groupId', it.moduleGroup)
dependency.appendNode('artifactId', it.moduleName)
dependency.appendNode('version', it.moduleVersion)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它失败并出现以下错误:
Execution failed for task ':smartcardsdk:generatePomFileForAarPublication'.
> Could not apply withXml() to generated POM
> Configuration with name '_releaseCompile' not found.
Run Code Online (Sandbox Code Playgroud)
这对Android v2.x来说不是问题.我升级到Android Studio v3时出现了问题(我猜Gradle v3.0.0也是如此).
我猜测配置不再与_releaseCompile名称一起存储.
有谁知道新的"名字"应该是什么?
谢谢.
我们公司有一些Web应用程序,这些应用程序依赖于一长串内部创建和托管的npm包(我们使用JFrog Artifactory),每个包都有自己的依赖项(等等).每当修复错误或在低级别包中实现功能时,当前进程需要开发人员检查他们的更改,等待CICD构建完成并测试运行,更新父包,并冲洗/重复所有链的方式(这可能是一个非常漫长的过程).
这可能不是一个独特的情况,但它会极大地影响我们的生产力,并鼓励单片程序包开发限制更新程序包的数量,而不是正确的代码分离.
我只能想到两个解决方案:
1)更新Web应用程序以直接在package.json中使用传递依赖项.然而,这打破了"封装",因为Web应用程序不应该知道直接依赖关系如何管理其作业.如果直接依赖性稍后使用某些其他传递依赖性,则不应该将Web应用程序引用到现在不相关的包.
2)修改Web应用程序的package-lock.json以指向新版本的传递依赖项.然而,这似乎只是临时工作,因为合并冲突或直接依赖的新安装往往会恢复这些更改.
我意识到答案可能是优化构建/发布过程,减少痛苦和手动,但我希望其他人可能遇到了不同的解决方案.
仅供参考 - 默认情况下,所有依赖项都以"〜"作为版本前缀安装.
artifactory ×10
gradle ×4
build.gradle ×3
android ×2
bintray ×1
groovy ×1
java ×1
jcenter ×1
jfrog-cli ×1
maven ×1
nginx ×1
npm ×1
package.json ×1
snapshot ×1