我正在尝试创建一个构建Android应用程序发布版本的CI构建,并将生成的apk上传到maven sonatype nexus repo。
当我运行assembleRelease时,apk生成,签名,运行proguard,位于build / outputs / apk / app-release.apk
为了上传到nexus,我已经使用了这个gradle插件: https://github.com/chrisbanes/gradle-mvn-push 有一点不同,我使用POM_PACKAGING = apk
我运行:gradle uploadArchives 它工作正常,它确实上传了一个apk到nexus,但它与build / outputs / apk / app-release.apk(不同的创建日期)不同。
意味着它要么做任何assembleRelease,要么只是归档源,但是错过了Android应用程序所需的一些必要操作。
gradle插件定义了这些艺术品:
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
也许我应该添加一个文件工件来构建/ outputs / apk / app-release.apk?
答案 0 :(得分:5)
我尝试了上面提到的解决方案,但我总是有一个" apk文件不存在"当Jenkins试图将apk文件上传到我们的nexus存储库时出现问题。
在gradle插件的文档中,路径以" build"开头。夹。 (https://docs.gradle.org/current/userguide/artifact_management.html)
我试图在路径中注入一些env变量,但jenkins总是在抱怨"找不到文件"。我提出了这个解决方案,它只是起作用。
uploadArchives {
repositories {
mavenDeployer {
repository(url: "https://repo.domain.com/content/repositories/snapshots") {
authentication(userName: nexususername, password: nexuspassword)
}
pom.project {
version "0.0.1-SNAPSHOT"
artifactId "android-artifact"
name "android-name"
groupId "com.domain.foo.bar"
}
}
}
}
// /data/jenkins_work/NAME_OF_THE_BUILD_JOB/artifact/app/build/outputs/apk/app-debug.apk
def apk = file('app/build/outputs/apk/yourapp.apk')
artifacts {
archives apk
}
答案 1 :(得分:3)
我们使用gradle将APK文件发布到我们的本地Nexus存储库。这就是我提出的。此示例演示了如何使用" googlePlay"建立味道。
// make sure the release builds are made before we try to upload them.
uploadArchives.dependsOn(getTasksByName("assembleRelease", true))
// create an archive class that known how to handle apk files.
// apk files are just renamed jars.
class Apk extends Jar {
def String getExtension() {
return 'apk'
}
}
// create a task that uses our apk task class.
task googlePlayApk(type: Apk) {
classifier = 'googlePlay'
from file("${project.buildDir}/outputs/apk/myApp-googlePlay-release.apk")
}
// add the item to the artifacts
artifacts {
archives googlePlay
}