如何在 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】:
gradlew
或 gradlew.bat
是 Gradle 的可执行文件,可用于执行 gradle 命令。
gradlew
或gradlew.bat
使用gradle/wrapper/gradle-wrapper.jar
文件执行。
所以有 3 个文件在播放:
gradlew
用于 mac 和 linux
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 工作区中拥有这些文件。如果您在 mac 或 linux 上,则必须授予 gradlew
执行权限,这可以通过以下命令完成。
chmod +x ./gradlew
然后您可以使用以下命令来构建您的应用程序:
./gradlew clean assembleRelease
注意: 不推荐使用方法 2,因为当您运行 Flutter 命令时,它会将一些属性设置为从
pubspec.yaml
文件(如version name
、version 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?的主要内容,如果未能解决你的问题,请参考以下文章
script.sh:第 1 行:./gradlew:Jenkins 上没有这样的文件或目录