Amarengo

Articles and news

Android用のJenkinsのセットアップ:私が直面した課題にどのように対処したか

この記事では、Jenkinsを使用して完全に機能する継続的な統合システムを実現するための私の旅を文書化します。 この設定は、ビジネスロジックのために同じ4つのモジュールを使用して複数のプロジェクトを持っている私の作業環境に適しています。

まず、公式サイトからJenkinsをダウンロードしました。 次に、ターミナルを開き、次のコマンドを実行しました:

java -jar jenkins.war --httpPort=9091

別のサービスがJenkinsを使用している場合に備えて、通常の8080とは異なるポートを指定して一意にし、エラーを回避しました。

すべての設定手順を完了したら、次のプラグインがインストールされていることを確認することが重要です:

  1. Git Plugin
  2. Gradle Plugin
  3. Android Lint Plugin
  4. Google Play Android Publisher Plugin

これらのプラグインは、JenkinsがAndroidプロジェクトをビルドするのに十分なツールを持っていることを保証します。

次のステップは、Jenkinsで次の設定をセットアップすることです:

  1. Jenkins用のJDKの設定

Jenkinsの管理->グローバルツール構成をクリックした後、JDKセクションを次のように表示することがわかりました:

基本的なJDK構成

次に、ADD JDKをクリックして、次のフォームを入力しました:

JDKインストールビューを追加

選択したバージョンを表す名前を入力し、インストールからバージョンを選択しましたjava.sun.com (注:JENKINSはJDKをインストールするためにあなたのOracleアカウント情報について尋ねます)。同じグローバルツール構成ページで、プロジェクトで使用されているGradleと同じバージョンのGradleインストールを追加したGradleプラグイン設定を見つけました。 さらなる混乱を避けるために、私は次のセクションでより深く議論するGradle wrapperでプロジェクトを実行します。

gradleインストールビュー

混乱を避けるために、名前が選択されたバージョンを表すことも確認しました。

通常、gradleはローカルを検索します。Android SDKの場所を取得するためのプロジェクト内のプロパティファイル。 しかし、Jenkinsを使用しているとき、特にGradleラッパーを使用しているときに、これが常に当てはまるとは限らないことがわかりました。

ビルドエラーを避けるために、Jenkins環境変数にANDROID_HOMEを追加しました。 これは、Manage Jenkins->Configure Systemを使用して達成され、ここの環境変数ボックスをチェックします:

グローバルプロパティセクション

およびANDROID_HOMEという名前の変数を追加し、値にSDKへのパスを入力します。

環境変数を追加する

これらのすべての手順を達成した後、Jenkinsで新しいアイテムを作成し始めました。 私のプロジェクトのほとんどは、GitリポジトリにGitサブモジュールとして含まれている4つの主要なandroidモジュールに依存しています。

サブモジュールがない場合、新しい項目の設定は非常に簡単です:

新しいアイテムページ

名前を入力してFreestyle projectを選択し、OKを押します。

次に、ソースコード管理に進みます。 私は通常Gitを使用し、レポを設定します:

ソース管理セクション

リポジトリURLを挿入し、まだ認証情報を追加していない場合は、認証情報を追加します。 ここでのトリックは、リポジトリにHTTPSリンクを使用している場合は、ユーザー名とパスワードタイプの資格情報を追加する必要があることを確認するこGit repoにサブモジュールがある場合、これに対処する最も簡単な方法は、追加の動作->Add->Advanced sub-modules behavioursを実行し、次のことを行うことです:

  1. チェック再帰的にサブモジュールを更新
  2. サブモジュールの更新中に使用する参照レポのパスに、親レポで使用されるサブモジュールフォルダ名を追
  3. 私の場合、親とサブモジュールの両方が同じ資格情報を使用できるので、親リポジトリのデフォルトリモートから資格情報を使用するを確認しました。

高度なサブモジュールの動作

含まれるサブモジュールの数と同じ数を追加し、親リポジトリurlがHTTPSの場合、サブモジュールが内部にリンクするようにしgitmodulesはHTTPSも使用する必要があります。 同じことがSSHにも当てはまります。

プロジェクトを正常にビルドするには、JenkinsがGradleスクリプトを呼び出す必要があります。 最も効率的な方法は、プロジェクトのGradleラッパーを実行し、タスク(clean、assembleDebugなど)を定義するようにJenkinsに指示することです。..)

ビルドステップメニューの追加

Invoke Gradle Script Section

permission deniedエラーを回避するために、Make Gradlew executableがチェックされ、タスクが指定されます。

Jenkinsには、ビルドが完了したときに実行されるさまざまなアクションが含まれています。

Android playストア公開プラグインを使用してplayストアでプロジェクトを自動的に公開する最も簡単な方法は、ここで見つけることができます。

ストアへの公開に関するいくつかの注意

ストアに新しいAPKを送信するときは、バージョンコードをインクリメントする必要があります。 これを自動化するために、私は参考のためにこのスニペットを作りました。

また、Jenkinsに変更部分を追加する場合は、ストアリストの説明にある言語と同じ言語を選択してください:

最後のセクションでは、ビルドを自動的にトリガーする方法を説明します。 私のプロジェクトでは、私が選択したバージョン管理はbitbucketです。 それを設定するために、私はこのwikiに従った。 ただし、webhookを機能させるには、Webサーバー設定でJenkinsを使用する必要があります。 最初は、私はwebhookが機能しなかったので、私はしませんでした。 私は、特定のプロジェクトが正常に構築された後に他のビルドをトリガーすることでこれを克服しました。 私は主にダミープロジェクトで4つの主要なサブモジュールを開発し、他のすべてのプロジェクトでそれらを引っ張るので、これは私の問題を解決

これは、ビルドのすぐ上のビルドトリガセクションで行うことができます:

Build Triggers Section

私の将来のステップは、jUnitテストとAndroid instrumentationテストの両方を通じて、Jenkinsと自動テストを利用することです。

コメントを残す

メールアドレスが公開されることはありません。