如何在 Jenkins 上生成 Gradlew?

Blo*_*oss 0 gradle continuous-deployment jenkins gradlew flutter

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

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

这是我的管道代码 (JenkinsFile)

stage('Build Release APK') {
    sh "ls ./android"
    sh "./android/gradlew clean assembleRelease"
}
Run Code Online (Sandbox Code Playgroud)

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

ls ./android
app
build.gradle
gradle
gradle.properties
key.properties
settings.gradle
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

./android/gradlew clean assembleRelease
/Users/donperera/.jenkins/workspace/demo@tmp/durable-b0592b49/script.sh: line 1: ./android/gradlew: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

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

Bir*_*ani 5

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

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

所以有3个文件在播放:

  • gradlew适用于maclinux
  • gradlew.bat用于窗户
  • gradle/wrapper/gradle-wrapper.jar

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

方法一【推荐】

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

flutter build apk --release
Run Code Online (Sandbox Code Playgroud)

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

方法二【不推荐】

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

chmod +x ./gradlew
Run Code Online (Sandbox Code Playgroud)

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

./gradlew clean assembleRelease
Run Code Online (Sandbox Code Playgroud)

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