【Android】AARをAzurePipelinesで作成したい

この記事は「いのべこ(富士通システムズウェブテクノロジー)Advent Calendar 2020」の6日目の記事です。
記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません(お約束)。

ゴール

ひとつのリポジトリという謎制約で、AzurePipelineを使ってAndroidのAPKとかAARを自動で作る

AzureDevOps

Projectを新しくつくって、きれいなAzureDevOpsを用意した。
あ、これprivateリポジトリです。publicにすればよかったとあとで気づいた。

f:id:levia9071:20201205203305p:plain

初回コミット

appというディレクトリとpartsというディレクトリの中に、それぞれのプロジェクトを格納しておく。
今回、appディレクトリではAPKを作成し、partsディレクトリではAARを作成する

f:id:levia9071:20201205203328p:plain ちなみにpartsディレクトリ配下には、partsというAndroidライブラリーモジュールを作成している。
ややこしい名前つけちゃったね

parts用のパイプラインを作る

f:id:levia9071:20201205203342p:plain

■ ゴール

partsモジュールをRelease用にビルドして、aarを作成。
作成したaarはパイプライン上のArtifactとして登録する。

■ ゴールのための手段

  1. root/pipeline-parts.ymlを作成する
  2. root/pipeline-parts.ymlをパイプラインとして登録する
  3. パイプラインを実行してみる

■ 詳細

1. root/pipeline-parts.ymlを作成する
ファイル名は分かりやすければ何でもよい。

# 対象
trigger:
  # ブランチ
  branches:
    include:
      - master
      - develop
  # ディレクトリ
  paths:
    # 対象
    include:
    - parts
    # 対象外
    exclude:
    - app
# このパイプラインで使う定数
variables:
  target_project: parts
  target_module: parts

stages:  
- stage: Release_parts
  # このstageの起動条件。masterブランチであれば、起動する。それ以外ならスキップする
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
  # AARを作るためのJobを組み立てる
  jobs:
  - job: Build_AAR
    pool:
      vmImage: 'vs2017-win2016'
    # このJobで使う定数
    variables:
      job_env: Release
      job_variant: Release

    steps:
    # gradlew :parts:assembleReleaseを実行してAARを作成するタスク
    # assembleReleaseの前にモジュール名を付けることで、特定のモジュールを指定する
    - task: Gradle@2
      displayName: 'gradlew :$(target_module):assemble$(job_variant)'
      inputs:
        gradleWrapperFile: '$(target_project)/gradlew'
        workingDirectory:  '$(target_project)'
        tasks: ':$(target_module):assemble$(job_variant)'
        publishJUnitResults: false
        jdkVersionOption: 1.8

    # 作ったAARを作業場所からArtifactにコピーするタスク
    - task: CopyFiles@2
      displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
      inputs:
        # コピー元
        SourceFolder: '$(system.defaultworkingdirectory)'
        # コピー対象
        Contents: '**/$(target_module)-release.aar'
        # コピー先
        TargetFolder: '$(build.artifactstagingdirectory)'
      condition: succeededOrFailed()

    # Pipeline上のArtifactとして登録するお作法タスク
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact: drop'
      inputs:
        PathtoPublish: '$(build.artifactstagingdirectory)'
      condition: succeededOrFailed()

2. root/pipeline-parts.ymlをパイプラインとして登録する
Pipeline>Create Pipeline>Azure Repos Git>「kotlin」>Existing Azure Pipelines YAML File
作成済みのYAMLを選べとポップアップが出てくるので、
masterブランチにあるpipeline-parts.ymlをパイプラインとして登録する。

3. パイプラインを実行してみる
Runを押すだけ!あら簡単

結果

作成したparts-release.aarはArtifactに登録されてる。成功!

f:id:levia9071:20201205203521p:plain