如何通过GitLab CI将Flutter模块生成的AAR文件上传至Google Artifact Registry
实现GitLab CI自动化构建Flutter AAR并上传至Google Artifact Registry
一、前置准备
Google Cloud配置
- 创建一个具备
Artifact Registry Writer权限的服务账号,导出其JSON格式密钥文件 - 提前在Google Artifact Registry中创建Maven类型的仓库,记录仓库所在区域(如
us-central1)、项目ID和仓库名称
- 创建一个具备
GitLab CI/CD变量配置
在GitLab项目的Settings > CI/CD > Variables中添加以下变量:GCP_SERVICE_ACCOUNT_KEY:粘贴服务账号JSON密钥的内容(类型选File或Variable均可,推荐File避免转义问题)GCP_PROJECT_ID:Google Cloud项目IDGCP_REGION:Artifact Registry仓库所在区域ARTIFACT_REGISTRY_REPO:Artifact Registry仓库名称AAR_GROUP_ID:AAR的Maven GroupID(如com.yourcompany)AAR_ARTIFACT_ID:AAR的Maven ArtifactID(如flutter_module)
二、编写GitLab CI配置文件
在项目根目录创建.gitlab-ci.yml,分构建、部署两个阶段:
1. 构建Flutter AAR阶段
build_aar: stage: build image: cirrusci/flutter:stable before_script: # 安装Android SDK必要组件(按需调整版本) - sdkmanager "platforms;android-33" "build-tools;33.0.0" --sdk_root=$ANDROID_SDK_ROOT - flutter pub get script: # 仅构建Release版本AAR,生成的产物在build/host/outputs/repo目录下 - flutter build aar --no-debug --no-profile artifacts: paths: - build/host/outputs/repo/ expire_in: 1 week # 产物保留1周,可按需调整 only: - main # 仅在main分支触发构建,可改为tags或其他分支
2. 上传至Artifact Registry阶段
deploy_to_artifact_registry: stage: deploy image: google/cloud-sdk:latest dependencies: - build_aar # 依赖构建阶段的产物 before_script: # 配置GCP认证 - echo "$GCP_SERVICE_ACCOUNT_KEY" > service-account-key.json - gcloud auth activate-service-account --key-file=service-account-key.json - gcloud config set project $GCP_PROJECT_ID # 配置Maven settings,用于认证Artifact Registry - mkdir -p ~/.m2 - | cat > ~/.m2/settings.xml << EOF <settings> <servers> <server> <id>artifact-registry</id> <username>_json_key</username> <password>`cat service-account-key.json`</password> </server> </servers> </settings> EOF script: # 自动获取构建生成的AAR和POM文件路径(需匹配你的模块结构) - AAR_VERSION=${CI_COMMIT_TAG:-SNAPSHOT-${CI_COMMIT_SHORT_SHA}} - AAR_PATH=build/host/outputs/repo/$AAR_GROUP_ID/$AAR_ARTIFACT_ID/$AAR_VERSION/$AAR_ARTIFACT_ID-$AAR_VERSION.aar - POM_PATH=build/host/outputs/repo/$AAR_GROUP_ID/$AAR_ARTIFACT_ID/$AAR_VERSION/$AAR_ARTIFACT_ID-$AAR_VERSION.pom # 使用Maven命令上传AAR到Artifact Registry - mvn deploy:deploy-file -DgroupId=$AAR_GROUP_ID -DartifactId=$AAR_ARTIFACT_ID -Dversion=$AAR_VERSION -Dpackaging=aar -Dfile=$AAR_PATH -DpomFile=$POM_PATH -Durl=https://$GCP_REGION-maven.pkg.dev/$GCP_PROJECT_ID/$ARTIFACT_REGISTRY_REPO -DrepositoryId=artifact-registry only: - tags # 仅在打Git标签时触发部署,可改为main分支或其他规则
三、关键细节说明
- 版本号处理:示例中优先使用Git标签作为版本号,无标签时用
SNAPSHOT-<短Commit哈希>作为临时版本 - 镜像选择:构建阶段用
cirrusci/flutter:stable已预装Flutter和基础Android SDK;部署阶段用google/cloud-sdk:latest自带gcloud和Maven工具 - 权限验证:确保服务账号已被授予目标Artifact Registry仓库的
Artifact Registry Writer角色,避免上传失败
内容的提问来源于stack exchange,提问作者tofigh rouhani
相关产品推荐
相关产品推荐

