Jenkins内のDockerでAndroidをコンパイルする(ほぼ!)
この記事はN部作の第2部です。Docker内のJenkinsでAndroidアプリをコンパイルしようとする私の最初のステップについて扱います。QNAP NAS上のDocker内にJenkinsサーバーを設定し、このプロジェクトがもっと大きなものになる可能性に気づいた初期の段階をカバーします...
ステップ1: サーバーの作成とGitHubに接続する
まず最初に、Docker Hubにアクセスして公式のJenkinsイメージを探す必要がありました:https://hub.docker.com/r/jenkins/jenkins
これには、私のQNAP NASのコンテナステーションでパイプラインを設定するために必要な全てが含まれていて、なお良いことに、JDKがすでにインストールされているタグがあります - これはAndroidアプリをビルドするのに完璧かもしれませんね?(ネタバレ、そうではありませんでした!)
それでは、jenkins/jenkins:lts-jdk17イメージをローカルのNASに持っていきましょう...
よし、ここまでは良い感じです。次に、コンテナの再起動の間にデータが失われないように、Jenkinsサーバーの将来のホームディレクトリ用の新しいボリュームを作成しましょう。
そして、基本的な事項が済んだら、サーバーが動作するコンテナを作成する良い部分に進むことができます。まずは、コンテナステーションに先ほどダウンロードしたイメージを使うことを伝えましょう。
次に、コンテナを名前で設定し、ポート8080が公開されるようにしましょう(ただし、このセットアップで私たちのメインサーバーにJenkinsワーカーを接続させたくはないので、ポート50000は公開しないでください)
そして必要ないと思われるものを考えると...メディアサーバーでもあるため、RAMへの完全アクセスはおそらく過剰かもしれませんので、現時点では1GBに制限してロードがどのように対処されるか見てみましょう:
最後のステップで、先ほど作成したボリュームを使ってホームディレクトリを設定しましょう:
そしてビンゴ!
初期セットアップウィザードが済んだら、最初のパイプラインを作成するのは簡単です!SSHキーを追加して私のリポジトリをクローンしましょう...ああ。わかりました、問題は普通に発生し、予期されていたものです。
さて、Google, StackExchangeを見て...あっ、見つけた!
コンテナ内のターミナル経由で少しSSHの魔法をかけると、ボイラ!
git内のJenkinsfileに保存されている当社のスクリプトを再度実行してみましょう...
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
sh './gradlew clean build'
}
}
}
}
エクスプローラーモードを終了する
そしてビジネスが成立しました!
しかし、おや。これは来るべきだった...JenkinsにはJDKが含まれているかもしれませんが、確実にAndroid SDKは含まれていません...そのためビルドは失敗します...
これは、新しいDockerfileを書くほど簡単なことかもしれません...しかし、正直なところ、このチュートリアルは実際に役立つものに近いです。
このプロジェクトを始めた時には目標がありましたが、なぜ私のAndroidアプリだけをビルドできる一発屋を作るべきでしょうか?TypeScriptや.NETを書いたらどうなるのでしょうか?いつもJenkinsサーバーを再開始するか、大きく複雑なDockerfile/イメージを作るでしょうか?
いや、私たちは、それよりも良いことをすることができますし、するべきです:
- コンテナで動作するJenkinsサーバー - すでに済み ✔
- Dockerfiles/イメージで定義されたエフェメラルなJenkinsコンテナエージェントで実行されるビルド - これは私も以前にやったことがあります ✔
- ホストのdockerを管理するdockerがインストールされたコンテナ - これも私が以前にやったことがあります ✔
この結果になるはずです:
- 私のJenkinsサーバーを作成する方法を定義する単一のDockerfileで、それをgitに保存が可能です!
- 必要なツールを全て含むことができる、プロジェクトごとのDockerfile/イメージの参照で、それをgitに保存が可能です!
この小さなプロジェクトの起源を考慮すると、私は納得しています!私のビルドシステムは、ほぼ完全にコードとして定義され、再現可能です。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/dotdashnotdot/compiling-android-in-jenkins-in-docker-nearly-516