記錄一下,免得忘了
實作根據tag自動打包并上傳至release
官方檔案
workflow
name: Android CI
# 觸發器
on:
push:
tags:
- v*
pull_request:
tags:
- v*
jobs:
build:
runs-on: ubuntu-latest
# 設定jdk環境為1.8
steps:
- uses: actions/checkout@v2
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
# 獲取打包秘鑰
- name: Checkout Android Keystore
uses: actions/checkout@v2
with:
repository: 存盤android打包用的key的倉庫(格式:用戶名/倉庫名)
token: ${{ secrets.TOKEN }} # 連接倉庫的token,需要單獨配置
path: keystore # 倉庫的根目錄名
# 打包release
- name: Build with Gradle
run: bash ./gradlew assembleRelease
# 創建release
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#GitHub 會自動創建 GITHUB_TOKEN 密碼以在作業流程中使用,
#您可以使用 GITHUB_TOKEN 在作業流程運行中進行身份驗證,
#當您啟用 GitHub Actions 時,GitHub 在您的倉庫中安裝 GitHub 應用程式,
#GITHUB_TOKEN 密碼是一種 GitHub 應用程式 安裝訪問令牌,
#您可以使用安裝訪問令牌代表倉庫中安裝的 GitHub 應用程式 進行身份驗證,
#令牌的權限僅限于包含您的作業流程的倉庫, 更多資訊請參閱“GITHUB_TOKEN 的權限”,
#在每個作業開始之前, GitHub 將為作業提取安裝訪問令牌, 令牌在作業完成后過期,
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
# 獲取apk版本號
- name: Get Version Name
uses: actions/github-script@v3
id: get-version
with:
script: |
const str=process.env.GITHUB_REF;
return str.substring(str.indexOf("v"));
result-encoding: string
# 上傳至release的資源
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # 上傳網址,無需改動
asset_path: app/build/outputs/apk/release/app-release.apk # 上傳路徑
asset_name: LightTimetable-${{steps.get-version.outputs.result}}.apk # 資源名
asset_content_type: application/vnd.android.package-archiv #資源型別
# 存檔打包的檔案
- name: Archive production artifacts
uses: actions/upload-artifact@v2
with:
name: build
path: app/build/outputs #將打包之后的檔案全部上傳(里面會有混淆的map檔案)
創建保存打包秘鑰的私有倉庫
倉庫里保存以下兩個檔案

key.jks是秘鑰檔案
keystore.properties
storePassword=創建秘鑰時的key store密碼
keyPassword=創建秘鑰時的key密碼
keyAlias=秘鑰別名
storeFile=../keystore/key.jks
將兩個檔案上傳至新倉庫

配置release打包簽名
在Android專案中獲取秘鑰
git submodule add 秘鑰倉庫地址 keystore
在專案根目錄下新建version.properties檔案,用于保存版本號
version.properties
versionName=1.0.0
versionCode=28
配置gradle
// 讀取前面配置的keystore.properties
def keyProps = new Properties()
def keyPropsFile = rootProject.file('keystore/keystore.properties')
if (keyPropsFile.exists()) {
keyProps.load(new FileInputStream(keyPropsFile))
}
// 讀取version.properties
def versionProps = new Properties()
def versionPropsFile = rootProject.file('version.properties')
if (versionPropsFile.exists()) {
versionProps.load(new FileInputStream(versionPropsFile))
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
versionCode versionProps['versionCode'].toInteger()
versionName versionProps['versionName']
}
// 簽名
signingConfigs {
release {
keyAlias keyProps['keyAlias']
keyPassword keyProps['keyPassword']
storeFile keyProps['storeFile'] ? file(keyProps['storeFile']) : null
storePassword keyProps['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release //配置簽名檔案
}
}
}
配置好之后可以用打包命令測驗是否配置正確
./gradlew assembleRelease
配置連接私有秘鑰倉庫的token



將生成的秘鑰保存在倉庫的Secrets中,名稱為TOKEN

gradle task自動升級版本號
會自動升級版本號,打tag,然后推送至github然后,github會開始自動構建
task upgradeVersion {
group 'help'
description '構建新版本'
doLast {
println("---自動升級版本號---\n")
def versionProps = new Properties()
def versionPropsFile = rootProject.file('version.properties')
if (versionPropsFile.exists()) {
versionProps.load(new FileInputStream(versionPropsFile))
}
String oldVersionCode = versionProps['versionCode']
String oldVersionName = versionProps['versionName']
if (oldVersionCode == null || oldVersionName == null ||
oldVersionCode.isEmpty() || oldVersionName.isEmpty()) {
println("error:版本號不能為空")
return;
}
versionProps['versionCode'] = String.valueOf(versionProps['versionCode'].toInteger() + 1)
String str = versionProps['versionName'].toString()
versionProps['versionName'] = str.substring(0, str.lastIndexOf('.') + 1) +
(str.substring(str.lastIndexOf('.') + 1).toInteger() + 1)
String tip =
"版本號從$oldVersionName($oldVersionCode)升級到${versionProps['versionName']}(${versionProps['versionCode']})"
println(tip)
def writer = new FileWriter(versionPropsFile)
versionProps.store(writer, null)
writer.flush()
writer.close()
def tag = "v${versionProps['versionName']}"
cmdExecute("git pull")
cmdExecute("git add version.properties")
cmdExecute("git commit -m \"版本號升級為:$tag\"")
cmdExecute("git push origin")
cmdExecute("git tag $tag")
cmdExecute("git push origin $tag")
}
}
運行task

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/277696.html
標籤:其他
