はじめ
本メモは、業務でiOSアプリをテスト実行などができるように、CI構築について書いたものです。
実際に会社のMac miniで構築したが、コロナウイルスにより在宅ワークをすることになったので頓挫しました。
せっかく調べた物なので、メモだけでもアウトプットします。
各種ツール
Jenkinsとは
Jenkinsは、CIツールの一つで設定したジョブを実行することでShellを動かすことができます。
例えば、以下のことができます。
- Gitでpushしたタイミングでジョブを実行することができる
- 指定したGitリポジトリをクローン、特定のブランチをチェックアウトしてshellを実行することができる
rebenvとは
Rubyのバージョンを切り替えることができるツールです。
ここでは、Bundlerと呼ばれるコマンドを実行させるために、Rubyのバージョンを柔軟に指定します。
bundlerとは
Bundlerとは、gem専用のパッケージ管理ツールです。
Gemfileに記載されたパッケージをインストールする時に使用しています。
fastlaneとは
fastlaneでは、iOSアプリの自動リリース、自動テスト、スクリプトの実行など色々できます。
セットアップ
Jenkinsのセットアップ
Jenkinsをインストールします。
brew install jenkins
Jenkinsを常時起動して欲しので設定します。
ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
jenkinsの初期設定はhttp://localhost:8080/
なのでブラウザで開いて下さい。
もし、httpアドレスを変更したい際は、homebrew.mxcl.jenkins.plist
の中身を編集すればいいです。
Admin権限のユーザを生成します。
特別な操作はなくて、以下の文献通りすればできると思います。
Jenkinsを使ってiOSの自動ビルドおよびテストをする(Jenkins準備編)
jenkinsが各種コマンドを実行できるように、環境変数を設定します。
次にJenkins上でRubyのバージョンが変更できるようにrebenvのプラグインを入れます。
Jenkins > Jenkinsの管理 > プラグインの管理
でプラグインの画面が開けます。
以下のプラグインをインストールしてください。
- rbenv plugin
ジョブの作成
新規ジョブ作成
を選択してジョブを作成しましょう。
適当名前を付けてフリースタイル・プロジェクトのビルド
を選択して下さい。
ジョブの管理画面が表示されると思うので、動作確認を行なってみます。
私の場合は以下のように設定して保存しました。
- ソースコード管理
Gitを選択
リポジトリURL:https://hoge.com/hoge/hoge-test.git
ブランチ指定子:*/develop
※説明の便宜上、架空のGitリポジトリを指定しています。 - ビルド環境
rbenv build wrapperにチェック
※rebenvのプラグインがインストールされていたら、追加されるはずです。
The Ruby version:2.7.0
Preinstall gem list:bundler - ビルド
シェルの実行を選択
※bundlerの設定とfastlaneの設定を後にやります。今はビルド確認したいだけなので空でも問題ありません。
ビルド実行
ジョブの設定が完了したらビルド実行しましょう
ビルドが成功すると青のマーカーが着きます。
ビルド内容を詳しく知る方法としてコンソールがあるので確認することができます。
もし、ビルドに失敗したら設定を見直して下さい。
rbenvのセットアップ
jenkinsとは別に手元の環境でrbenvを動かしたいので準備します。
# Jnekinsと同様rbenvをinstalします。
brew install rbenv ruby-build
# rubyのバージョンもJnekinsに合わせます。
rbenv install 2.7.0
rbenv global 2.7.0
rubyのバージョンが切り替わっているか確認します。
$ rbenv versions
system
* 2.7.0
$ ruby -v
ruby 2.7.0
rbenv上ではバージョンが切り替わったが、rubyではバージョンが変更されない場合があるかもしれません。
Rubyコマンドの参照先を変更する必要があるかもしれないので、以下の記事を参考にして下さい。
Rubyのバージョンが切り替わらない時の対処法!
bundlerのセットアップ
bundlerをインストールします。
$ gem install bundler
Gitリポジトリにbundlerで実行するGemfileを生成して設定を書きます。
# Gemfileの雛形ファイルを生成する
$ rbenv exec bundle init
source "https://rubygems.org"
gem 'fastlane', '2.143.0'
gem 'fastlane-plugin-xcodegen', '0.1.0'
gem 'cocoapods', '1.9.0'
Gemfileから一括でインストールします。
$ rbenv exec bundle install --path=vendor/bundle
fastlaneのセットアップ
fastlneを導入しましょう
$ rbenv exec bundle exec fastlane init
Fastfileが生成されるので、設定を書きましょう。
なお、このファイルはRubyの構文が書けます。
default_platform(:ios)
platform :ios do
# fastlaneの処理が開始される前に一度だけ実行する
before_all do
# ファイルパスや各種設定のパラメータを定義するときに書きます。
end
desc "動作確認用"
lane :operation_test do
# cartahge、xcodegen、cocoapods、test実行、ipaファイルの生成など書いていきます
end
Fastffileのoperation_test
を指定して動作確認してみましょう。
rbenv exec bundle exec fastlane operation_test
動作がうまくことが確認できたら、これらのことをJenkinsで行いたいので、Gitリポジトリに反映させましょう。
Gemfileとfastlaneディレクトリ内のだけでいいです。
Jenkinsでfastlaneを動作させる
前回作成したジョブを使ってfastlaneを動かしてみましょう。
ビルド> シェル実行
に以下のようなスプリプトを記述して保存して下さい。
# fastlaneは内部でrubyを使っているので、文字コードがUTF-8に設定
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
rbenv exec bundle install --path=vendor/bundle
rbenv exec bundle exec fastlane operation_test
次にjenkinsでビルド実行を行なって、動作確認を行なって下さい。
多分、ビルド成功になると思います。
まとめ
多分今年の後半あたりにGitHub Enterprise ServerにGitHub Actionsが追加されると思います。
https://github.blog/jp/2019-08-21-github-actions-now-supports-ci-cd/
そのタイミングに構築できたらなと思っています。