全部产品

构建配置说明

更新时间:2020-02-28 17:16:18

本文档主要介绍Mobile DevOps构建描述文件的使用

一、构建描述文件简介

构建描述文件是指在移动端代码工程中用于描述构建流程的yaml类型文件。

构建描述文件默认在工程根目录,缺省文件名为:

  • emas_build_debug.yaml: 用于构建Debug类型的包
  • emas_build_release.yaml: 用于构建Release类型的包

二、构建描述文件详细说明

2.1 声明文件版本

描述文件使用的版本,当前最新版本为“1.0”

  • version: “1.0”

2.2 声明构建平台

描述使用的构建平台,目前支持AndroidiOS两种平台

  • platform: iOS 或者 android,大小写不敏感

2.3 声明自定义环境变量

Mobile DevOps会在构建开始前导入声明的自定义环境变量,这样后面所有流程均可直接使用环境变量

  • system-env: 自定义环境变量,列表
    • key1: value1
    • key2: value2

注意请勿使用以’EMAS’开头的环境变量,由EMAS系统预留占用

除了自定义的环境变量以外,还可以使用由EMAS系统定义的环境变量,当前可使用的环境变量有:

  • EMAS_WORK_DIR: 构建容器中EMAS的工作目录
  • EMAS_CODE_DIR: 构建容器中移动端代码根目录
  • EMAS_BUILD_ID: 构建任务的ID
  • EMAS_BUILD_VERSION_NAME: 迭代的版本名
  • EMAS_BUILD_VERSION_CODE: 迭代的版本code,android特有
  • EMAS_BUILD_CONFIG_NAME: 使用的构建描述文件名称
  • EMAS_BUILD_CERTIFICATE: 构建证书在构建容器的路径,android为.jks文件,iOS为.p12文件
  • ANDROID_HOME:android sdk路径,android平台特有
  • ANDROID_NDK_HOME:android ndk路径,android平台特有

2.4 构建前置阶段

构建前可以使用run指令进行部分构建任务的初始化,run指令会在shell环境下执行

  • run: 自定义shell指令
    • name:对此指令命名
    • command: 需要执行的指令

2.5 构建阶段

此阶段描述核心构建流程,经过此阶段,相应ipa或者apk包会构建出来

  • run: 自定义shell指令
    • name:对此指令命名
    • command: 需要执行的指令

除了普通的run指令可以使用外,此阶段目前针对iOS平台还可以使用如下指令,以简化iOS构建

  • cocoapods: 使用此指令会表明构建时会初始化pod,如果工程不需要初始化则无须填写
    • deintegrate: True 或者 False - 是否使用指令’pod deintegrate’,非必填,默认为False
    • repo_update: True 或者 False - 是否使用指令’pod repo update’,非必填,默认为False
    • install: True 或者 False - 是否使用指令’pod install’, 非必填,默认为False
    • update: True 或者 False - 是否使用指令’pod update’, 非必填,默认为True
  • build_ios_app: 使用fastlane gym指令构建iOS工程
    • scheme:iOS工程的scheme, 必填
    • project:iOS工程xcodeproj路径,必填
    • workspace:iOS工程的xcworkspace路径,必填
    • configuration:iOS工程的configuration配置,一般为Release或者Debug,也可以填写自定义的configuration
    • clean:Ture 或者 False,是否清理工程
    • codesigning_identity:使用的证书全称
    • export_method:archive何种类型的ipa包,有效类型为app-store, ad-hoc, package, enterprise, development, developer-id

2.6 构建后置阶段

后置阶段主要是构建完成后,针对构建包进行一些收尾工作或进一步加工

  • run: 自定义shell指令
    • name:对此指令命名
    • command: 需要执行的指令

2.7 产物收集上传阶段

配置需要上传的构建产物,通过配置filter指令完成

  • filter: 自定义构建产物路径规则
    • root_folder:准备查找产物的根目录,默认使用EMAS_CODE_DIR变量,即代码工程根目录,非必填
    • location_folder:相对于root_folder的目录,从此目录开始查找构建产物,非必填,缺省则表明和root_folder为同一路径
    • recursive:True 或者 False,表明是否遍历子目录进行查找,默认为True,最多向下遍历7层目录,请合理安排构建产物路径深度
    • case_sensitive:True 或者 False,表明是否大小写敏感,默认为True
    • extensions:列表项,表明需要收集产物的后缀名

三、描述文件示例

3.1 Android构建描述文件示例

  1. version: "1.0"
  2. platform: android
  3. system-env:
  4. MY_CUSTOM_KEY: "Hello, EMAS!"
  5. phases:
  6. pre_build:
  7. commands:
  8. - run:
  9. name: my pre-build command
  10. command: echo 'pre-build ...'
  11. build:
  12. commands:
  13. - run:
  14. name: read my custom environment variable
  15. command: echo $MY_CUSTOM_KEY
  16. - run:
  17. name: gradle build
  18. command: ./gradlew clean assembleRelease
  19. post_build:
  20. commands:
  21. - run:
  22. name: my post-build command
  23. command: echo 'post-build ...'
  24. artifacts:
  25. outputs:
  26. - filter:
  27. root_folder: $EMAS_CODE_DIR
  28. location_folder: build
  29. recursive: True
  30. case_sensitive: True
  31. extensions:
  32. - apk
  33. - js

3.2 iOS构建描述文件示例

  1. version: "1.0"
  2. platform: iOS
  3. system-env:
  4. MY_CUSTOM_KEY: "Hello, EMAS!"
  5. phases:
  6. pre_build:
  7. commands:
  8. - run:
  9. name: my pre-build command
  10. command: echo 'pre-build ...'
  11. build:
  12. commands:
  13. - run:
  14. name: read my system environment variable
  15. command: echo $MY_CUSTOM_KEY
  16. - cocoapods:
  17. update: true
  18. - build_ios_app:
  19. scheme: devops-ios-demo
  20. project: devops-ios-demo.xcodeproj
  21. workspace: devops-ios-demo.xcworkspace
  22. clean: true
  23. configuration: Release
  24. export_method: ad-hoc
  25. post_build:
  26. commands:
  27. - run:
  28. name: my post-build command
  29. command: echo 'post-build ...'
  30. artifacts:
  31. outputs:
  32. - filter:
  33. root_folder: $EMAS_CODE_DIR
  34. location_folder: ./
  35. recursive: true
  36. extensions:
  37. - ipa
  38. - podfile.lock