我正在尝试将每1k展现的收入工件发布到artiFactory上的本地YUM存储库,使用gradle和ivy发布插件。我遇到的问题是发布任务似乎尝试上传工件两次,第二次尝试失败(正确),HTTP状态代码为403。我验证的工件用户具有部署/缓存权限,但不能删除。
我的问题是,为什么发布任务要两次上载工件?
我包括了我的gradle配置和下面的artiFactory日志文件的摘录。请注意,每1k展现的收入是使用Netflix os包构建的
Gradle配置发布配置:
apply plugin: "ivy-publish"
publishing {
publications {
rpm(IvyPublication) {
artifact buildRpm.outputs.getFiles().getSingleFile()
/* Ivy plugin forces an organisation to be set. Set it to anything
as the pattern layout later supresses it from appearing in the filename */
organisation 'dummy'
}
}
repositories {
ivy {
credentials {
username 'username'
password 'password'
}
url 'http://my.artifactory.com/artifactory/yum-dev-local/'
layout "pattern", {
artifact "${buildRpm.outputs.getFiles().getSingleFile().getName()}"
}
}
}
}
为了构建和发布工件,我执行以下操作(在工件上使用空的yum-local-repo)
./gradlew clean buildRpm publish
产生以下结果:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':my-artifact-service:publishRpmPublicationToIvyRepository'.
> Failed to publish publication 'rpm' to repository 'ivy'
> java.io.IOException: Could not PUT 'http://my.artifactory.com/artifactory/yum-dev-local/my-artifact-service-0.0.1-1.el7.x86_64.rpm'. Received status code 403 from server: Forbidden
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Artifactory日志显示:
2016-10-12 15:41:41,828 [http-nio-8081-exec-92] [INFO ] (o.a.e.UploadServiceImpl:453) - Deploy to 'yum-dev-local:my-artifact-service-0.0.1-1.el7.x86_64.rpm' Content-Length: 4420
2016-10-12 15:41:41,842 [http-nio-8081-exec-64] [INFO ] (o.a.e.UploadServiceImpl:299) - Deploy to 'yum-dev-local:my-artifact-service-0.0.1-1.el7.x86_64.rpm.sha1' Content-Length: 40
2016-10-12 15:41:41,850 [http-nio-8081-exec-90] [WARN ] (o.a.r.ArtifactoryResponseBase:105) - Sending HTTP error code 403: Not enough permissions to overwrite artifact 'yum-dev-local:my-artifact-service-0.0.1-1.el7.x86_64.rpm' (user 'username' needs DELETE permission).
最后一行日志指示请求再次放置工件。当我检查repo时,工件确实已成功上载,但发布任务失败。有人能指出这是怎么回事吗?
版本:
------------------------------------------------------------
Gradle 2.14.1
------------------------------------------------------------
Build time: 2016-07-18 06:38:37 UTC
Revision: d9e2113d9fb05a5caabba61798bdb8dfdca83719
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_73 (Oracle Corporation 25.73-b02)
OS: Linux 4.3.5-300.fc23.x86_64 amd64
我也有类似的问题。
解决通过使用Gradle工艺品插件。
其他答案中提供的示例配置:
https://stackoverflow.com/a/41238443/575350
之所以会出现这种情况,是因为Gradle Ivy publishing插件除了您的工件之外,还会推送3个额外的文件,它们是:
问题出在第一个. sha1文件上。上传此文件时,artiFactory/JFrog会认为您要覆盖之前上传的同名工件,因此出现错误。
您可能会认为仅仅授予DELETE权限就可以解决问题,但事实并非如此。这样做只会将您之前上传的包替换为校验和. sha1文件,并且由于这种文件不是有效的. deb文件(在我的例子中,在您的例子中是. rpm),在解压和生成Debian存储库结构时,它只会擦除您的原始工件,因此您将无法正常下载。
不幸的是,没有解决这个问题,因为没有办法告诉Ivy/Gradle不生成这些额外的文件,我知道(https://github.com/gradle/gradle/blob/master/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/repositories/resolver/ExternalResourceResolver.java#L266)
最后,我使用的解决方案是直接使用curl将其放入Artifactory/JFrog,这实际上会减少代码,但会增加操作系统依赖性(curl)。如果您对此感到担忧,可以使用Gradle HTTP库来做同样的事情:
task uploadArtifactory(type: Exec) {
def artifact = buildDeb.outputs.getFiles().filter {
it.getAbsolutePath().endsWith ".deb"
}.getSingleFile()
commandLine "curl",
"-X",
"PUT",
"https://$artifactoryUser:$artifactoryPassword@$artifactoryAccount.jfrog.io/$artifactoryAccount/$artifactoryRepo/pool/${project.name}_${version}_all.deb;deb.distribution={...};deb.component=main;deb.architecture=all",
"--upload-file",
artifact
}
我用java编写了一个带条件的switch case语句。如果一个人在2到12个月的时间内将一个项目添加到系统中,它将被添加到一个数组中。如果项目持续时间小于2或大于12,系统应要求他们重新输入有效数字。出于某种原因,我的系统会提示他们输入两次数字,并且只存储数组中的第二个条目:终端提示两次的图像 我在想这是因为我有“myMonths[index]=sc.nextInt();”声明了两次,但是我不
目前,正在尝试在Azure Devops中配置发布管道。我已成功创建了一个CI管道,该管道正在工作并成功运行测试。我的发布管道使用来自最新CI构建的工件,应该部署到azure。当我查看日志时,我可以看到以下内容已成功完成: 初始化代理 初始化作业 下载arifact 然后"部署到Azure应用服务"失败,日志显示以下详细信息: 到目前为止,我还没有找到什么可以帮上忙的。我通过从pipline的第1
测试1: 测试2: testng.xml
一、自我介绍 这次面试最大的败笔就是自我介绍脑袋发昏,睡眠不足太累了根本没发挥好。首先自我介绍就扣分。 二、技术面 面试官询问是否了解次世代建模流程,问建模流程大概是什么步骤,我这都没答出来😅。 技术问题,面试官主要问了一些是否足够了解法线。 总结:技术面主要针对岗位需求,岗位需要你做什么,基本就会问相关的问题,比起真的做完一个全流程的项目,现在更重要的是好好补一下建模的基本知识。
当我使用扫描仪或尝试获取用户输入时,我得到消息: 失败:生成失败,出现异常。 > 出错了:任务“:run”的执行失败。 处理“命令”C:\ProgramFiles\Java\jdk-13.0.1\bin\Java。exe“”以非零退出值1结束 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。运行--scan以获得完整的见解。 在
我在努力打字 当我保存一个实体时,有时我的数据会更新,有时不会。完全相同的请求第一次不会起作用,但第二次会起作用。我使用保存()更新和插入。插入时一切都好。 以下是我的代码(使用NestJS键入表单): == == == == 当我在save()之后找到()时,我的用户地址不会更新,而我从Mongo收到了modifiedCount 1。如果我重复这个请求,这一次它是有效的。。。 有什么想法吗?