如何在 Jenkins 上生成 Gradlew?

Posted

技术标签:

【中文标题】如何在 Jenkins 上生成 Gradlew?【英文标题】:How to Generate Gradlew on to Jenkins? 【发布时间】:2020-05-26 14:18:56 【问题描述】:

如何为 Jenkins android 项目生成 gradlew 文件?我的项目不是 Android Native。我的项目是 Flutter。

我尝试使用 Jenkins 创建 CD,但出现了一些错误。

这是我的管道代码 (JenkinsFile)

stage('Build Release APK') 
    sh "ls ./android"
    sh "./android/gradlew clean assembleRelease"

ls输出是,(没有gradlew文件)

ls ./android
app
build.gradle
gradle
gradle.properties
key.properties
settings.gradle

这是我遇到的错误

./android/gradlew clean assembleRelease
/Users/donperera/.jenkins/workspace/demo@tmp/durable-b0592b49/script.sh: line 1: ./android/gradlew: No such file or directory

有没有办法用 Jenkins 构建 apk/aap?

这个插件可以用吗?但我已经添加了这个。但不在我的剧本中。 https://guides.gradle.org/executing-gradle-builds-on-jenkins/

【问题讨论】:

【参考方案1】:

您不应该“在 Jenkins 上”这样做。你应该在你的代码库中这样做。执行 wrapper 命令(gradle wrapper),将 wrapper 文件添加到 Git,提交并推送。

【讨论】:

我安装了 gradle 并运行 gradle wrapper 然后我构建了 Jenkins。同样的错误来了【参考方案2】:

gradlewgradlew.bat 是 Gradle 的可执行文件,可用于执行 gradle 命令。

gradlewgradlew.bat 使用gradle/wrapper/gradle-wrapper.jar 文件执行。

所以有 3 个文件在播放:

gradlew 用于 ma​​clinux gradlew.bat 用于 Windows gradle/wrapper/gradle-wrapper.jar

这里的问题是,当您创建 flutter 项目时,这些文件已经存在。但这些文件默认被项目的.gitignore忽略。所以这些文件在您的 CI/CD 服务器中不可用。

方法 1 [推荐]

当它是一个颤振项目时,你不需要它们来构建你的项目。您需要安装 Flutter SDK。您可以使用 Flutter SDK 来构建您的项目。使用以下命令进行发布构建[您可能需要为 Jenkins 服务器设置 Flutter SDK]:

flutter build apk --release

它将在内部运行 assembleRelease 并生成您的 APK 文件。

方法 2 [不推荐]

如果您想按照自己的方式进行操作,则可以通过从 .gitignore 文件中删除它们的引用并将其推送到您的存储库,将这 3 个文件添加到版本控制中。然后,您将在 Jenkins 工作区中拥有这些文件。如果您在 ma​​clinux 上,则必须授予 gradlew 执行权限,这可以通过以下命令完成。

chmod +x ./gradlew

然后您可以使用以下命令来构建您的应用程序:

./gradlew clean assembleRelease

注意: 不推荐使用方法 2,因为当您运行 Flutter 命令时,它会将一些属性设置为从 pubspec.yaml 文件(如 version nameversion code)进行 gradle。因此,如果您对pubspec.yaml 文件进行了更改并且之后没有运行flutter 命令,那么直接运行gradlew 将不会包含这些更改。在这种情况下,您的 apk 可能使用旧版本构建,或者甚至可能没有构建,因为它从 local.properties 文件中读取版本信息,该文件由颤动命令自动修改,并且默认情况下从版本控制中排除。因此,您还必须通过从.gitignore 文件中删除其引用来添加local.properties 文件,这非常脏,因为它具有android SDK 的位置引用,并且您的服务器可能在该位置没有android SDK。你需要再次解决这个问题。所以不要使用这种方法。

【讨论】:

方法一:我已经试过了。 sh "/Users/donperera/Documents/flutter/bin/flutter build apk --split-per-abi" 错误是 bash: /Users/docperera/Documents/flutter/bin/flutter: Operation not permitted 方法2:我现在试了。错误是chmod +x ./android/gradlew clean assembleRelease chmod: ./android/gradlew: No such file or directory chmod: clean: No such file or directory chmod: assembleRelease: No such file or directory @BloodLoss 是的,可以修复方法 1 中的错误 @BloodLoss 你必须运行chmod +x ./android/gradlew。不是chmod +x ./android/gradlew clean assembleRelease 你知道怎么解决吗?

以上是关于如何在 Jenkins 上生成 Gradlew?的主要内容,如果未能解决你的问题,请参考以下文章

jenkins报错401k8s

script.sh:第 1 行:./gradlew:Jenkins 上没有这样的文件或目录

在 AWS 上生成有关数据量的高效快速报告

Sbt-native-packager 在两台不同的机器上生成两个不同的包

如何在 Android 上生成复杂的声音?

如何在 Swift 3 中的 mapview 上生成不同的图钉?