Gitlab Android 打包 Pipeline 配置

依赖的 Dockerfile

在根目录下创建 Dockerfile 文件和 .gitlab-ci.yaml 文件,并复制以下内容到 Dockerfile

# This Dockerfile creates a static build image for CI

FROM openjdk:11-jdk

# Just matched `app/build.gradle`
ENV ANDROID_COMPILE_SDK "33"
# Just matched `app/build.gradle`
ENV ANDROID_BUILD_TOOLS "33.0.2"
# Just matched `app/build.gradle`
ENV ANDROID_NDK_VERSION "21.1.6352462"
# Version from https://developer.android.com/studio
ENV ANDROID_COMMAND_LINE_TOOLS "commandlinetools-linux-9477386_latest.zip"
# Flutter SDK Version
ENV FLUTTER_SDK_VERSION "3.7.12"
# CMAKE Version
ENV CMAKE_VERSION "3.10.2.4988404"

ENV ANDROID_HOME $PWD/android-sdk-linux/sdk
ENV PATH="${PATH}:${ANDROID_HOME}/platform-tools/:$PWD/flutter/bin/"

# install OS packages
RUN echo "deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse\ndeb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse\ndeb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse\ndeb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse\ndeb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse\ndeb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse\ndeb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse\ndeb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse\n" > /etc/apt/sources.list
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C

RUN apt --quiet update --yes
RUN apt --quiet --fix-broken install
RUN apt --quiet install --yes wget tar unzip
# We use this for xxd hex->binary
RUN apt --quiet install --yes vim-common openjdk-11-jdk


# install Android SDK
RUN wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/${ANDROID_COMMAND_LINE_TOOLS}
RUN unzip -d android-sdk-linux android-sdk.zip && rm android-sdk.zip

RUN mkdir -p ${ANDROID_HOME}

# install sdk content [https://developer.android.com/studio/command-line/sdkmanager]
RUN echo y | ./android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "platforms;android-${ANDROID_COMPILE_SDK}"
RUN echo y | ./android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "build-tools;${ANDROID_BUILD_TOOLS}"
RUN echo y | ./android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "ndk;${ANDROID_NDK_VERSION}"
RUN echo y | ./android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools"
RUN echo y | ./android-sdk-linux/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "cmake;${CMAKE_VERSION}"


# install Flutter SDK (如果依赖 flutter)
RUN wget --quiet --output-document=flutter-sdk.tar.xz https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_SDK_VERSION}-stable.tar.xz
RUN tar -xvf flutter-sdk.tar.xz && rm flutter-sdk.tar.xz

 编写 .gitlab-ci.yaml Pipeline 配置文件 

stages:
  - environment
  - build
  - deploy


####################################################################################################
####################################################################################################
# 变量定义
variables:
  PUBLISH:
    value: "false"
    description: 是否发布, false|true
    options:
      - "true"
      - "false"



####################################################################################################
####################################################################################################
# 更新image

.updateContainerJob:
  image: docker:stable
  stage: environment
  services:
    - name: docker:dind
      alias: thedockerhost
  variables:
    DOCKER_HOST: tcp://thedockerhost:2375/
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""

  script:
    - docker login -u username(你docker帐号名) -p password(你docker帐号的密码)
    - docker pull username(你docker帐号名)/project(仓库名称) || true
    - docker build --cache-from username(你docker帐号名)/project(仓库名称) -t project(仓库名称) .
    - docker tag project(仓库名称) username(你docker帐号名)/project(仓库名称)
    - docker push username(你docker帐号名)/project(仓库名称)
  timeout: 3h 30m
  tags:
    - wx-docker

updateContainer:
  extends: .updateContainerJob
  rules:
    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"
      changes:
        - Dockerfile
      when: always
    - when: never


ensureContainer:
  extends: .updateContainerJob
  allow_failure: true
  before_script:
    - "mkdir -p ~/.docker && echo '{\"experimental\": \"enabled\"}' > ~/.docker/config.json"
    - docker login -u username(你docker帐号名) -p password(你docker帐号的密码)
    - docker manifest inspect username(你docker帐号名)/project(仓库名称) > /dev/null && exit || true
  rules:
    - if: $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "api" || $CI_PIPELINE_SOURCE == "schedules" || $CI_PIPELINE_SOURCE == "trigger"
      when: always
      allow_failure: true
    - if: $CI_PIPELINE_SOURCE != "web" && $CI_PIPELINE_SOURCE != "api" && $CI_PIPELINE_SOURCE != "schedules" && $CI_PIPELINE_SOURCE != "trigger"
      changes:
        - Dockerfile
      when: never
    - if: $CI_COMMIT_BRANCH == "master"
      when: on_success


####################################################################################################
# 编译

.build_job:
  image: username(你docker帐号名)/project(仓库名称)
  variables:
    UPDATE_BRANCH_NAME: updateSubmodule
    GIT_SUBMODULE_STRATEGY: recursive
  timeout: 3h 30m
  tags:
    - docker

# Debug包
buildForPGY:
  extends: .build_job
  stage: build
  script:
    - ./release_kuril.sh -a
  rules:
    - if: $CI_PIPELINE_SOURCE == "web" && $PUBLISH == "true"
      when: never
    - if: $CI_PIPELINE_SOURCE == "web" && $PUBLISH != "true"
      when: on_success
    - if: $CI_PIPELINE_SOURCE == "schedules" || $CI_PIPELINE_SOURCE == "api" || $CI_PIPELINE_SOURCE == "trigger"
      when: on_success
    - if: $CI_COMMIT_BRANCH == "master"
      when: manual
    - when: never


# Release包: 用于发布
deployOnCDN:
  extends: .build_job
  stage: deploy
  script:
    - ./release.sh -r
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedules"
      when: never
    - if: $CI_PIPELINE_SOURCE == "web" && $PUBLISH == "true"
      when: on_success
    - if: $CI_COMMIT_BRANCH == "master" && $PUBLISH == "true"
      changes:
        - gradle.properties
      when: manual
    - when: never


####################################################################################################

1. 测试包

2. Release 包

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值