[Fc] 阿里雲函數計算自定義運行時Gradle自動打包插件

這個 Gradle 插件可用於自動壓縮您的 bootJar 和 bootstrap 文件爲一個滿足阿里雲 函數計算 自定義運行時 的 zip 包.

使用這個插件後, 它將自動搜索 ${PROJECT_DIR}${PROJECT_DIR}/bootstrap 文件夾下的 bootstrap 文件, 並生成對應的 Gradle 任務.

項目地址: https://github.com/XieEDeHeiShou/fc-custom-runtime-packer, 歡迎 Star, Fork, Issue, PR.

Gradle 插件開發 QQ 羣: 959860873

如何安裝

buildscript {
    repositories {
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath "dev.dengchao:fc-custom-runtime-packer:x.y.z" // 請將 x.y.z 替換成這個插件實際的版本號
    }
}

version 'your-project-version'

// 這個插件*必須*添加在 version 字段下方纔能正確生效
apply plugin: "dev.dengchao.fc-custom-runtime-packer"

如何使用

項目結構

我們假設您有一個類似下方結構的 Spring 項目:

project dir
+--- bootstrap
|       +--- bootstrap-pro  (1)
|       \--- dev                        (2)
+--- build
+--- src
+--- bootstrap.sh             (3)
+--- build.gradle              (plugin applyed)

運行 gradle :zipBootstrap 任務後, 您將得到一個常規的 bootJar 文件, 三個配置好的啓動壓縮包(bootstrap zip):

project dir
+...
+--- build
|       \--- libs
|               +--- demo-1.0.0.jar                     (bootJar)
|               +--- demo-1.0.0-default.zip
|               |       +--- bootstrap                       (generated from 3) 
|               |       \--- demo-1.0.0.jar
|               +--- demo-1.0.0-dev.zip
|               |       +--- bootstrap                       (generated from 2) 
|               |       \--- demo-1.0.0.jar
|               \--- demo-1.0.0-pro.zip
|                       +--- bootstrap                       (generated from 1) 
|                       \--- demo-1.0.0.jar
+...

更進一步的, 您也可以通過運行 gradle :zipBootstrapDefault 任務對默認配置 (profile) 進行打包, 其他配置也是如此.

Bootstrap 文件規範

  • 它的內容可以包含一個或多個佔位符 archiveboot.jar, 這些佔位符將被實際的 bootJar 文件名替代. 例如: java -jar archive 將會生成 java -jar demo-1.0.0.jar.
  • 如果它像 (3) 一樣位於項目文件下, 那麼它的名字必須滿足正則表達式 bootstrap(-[a-zA-Z0-9\-]+)?(\.sh)?.
    • 如果存在配置 (profile) (-[a-zA-Z0-9\-]+) , 它將生成一個 ${PROJECT_NAME}-${PROJECT_VERSION}-${PROFILE}.zip 壓縮包.
    • 如果配置不存在, 它將生成一個 ${PROJECT_NAME}-${PROJECT_VERSION}-default.zip 壓縮包.
  • 如果它像 (1) 和 (2) 一樣位於 bootstrap 文件夾下, 那麼它的名字必須滿足正則表達式 ([a-zA-Z0-9\-]+)(\.sh)?.
    • 如果存在 ‘bootstrap-’ 前綴, 那麼這個前綴將從配置名中被移除.
  • 它的內容可以聲明自己的 shebang command.目前可接收的值是 #!/bin/bash#!/usr/bin/env sh.
    • 如果它缺少或含有無效的 shebang command, #!/bin/bash 將被前置到生成的 bootstrap 文件中.
  • 它可以被授予可執行權限.
    • 因爲壓縮包內的 bootstrap 文件是一個生成的文件, 並不是原來的那個, 因此源文件持有的可執行權限將被忽略, 並且生成的 bootstrap 的文件模式將被設爲 775.
  • 如果存在多個有相同配置 (profile) 的 bootstrap 文件, 那麼運行的過程中將拋出 DuplicateBootstrapProfileException 異常.

參考文獻

Spring boot gradle plugin @github.com

How to get project version in custom gradle plugin @stackoverflow.com

Shebang @wikipedia.org

Unix file mode @tutorialspoint.com

阿里雲函數計算自定義運行時原理 @aliyun.com

我的其他作品

IDEA 插件 MVPHelper

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章