本記事は、モバイルDevOpsカレンダーの13日目です。
やりたいこと
- Jenkinsでjobを実行する際に利用するXcodeのバージョン切り替えたい。
Xcodeのメジャーアップデートが近づくと自身の環境なども含め、βのXcodeをダウンロードして動作確認をすることが多々あるかと思います。
よくやる切り替え方
複数のXcodeをインストールした場合の、切り替え方としては以下があります。
-
- xcode-selectを使う
-
- DEVELOPER_DIR環境変数を使う
Jenkinsのような環境の場合、2)でおこなうのが一般的です。
ただし、1)にしろ、2)にしろXcodeのインストール先を指定する必要があります。
今回やったこと
インストール先を指定するのは面倒なので、インストールされているXcodeを動的にチェックし、DEVELOPER_DIR環境変数の値として指定できるようにする。
やりかた
プラグインのインストール
- Jenkinsの管理のプラグインの管理から「Dynamic Parameter Plug-in」をインストール
このプラグインを使うと、Groovyスクリプトの実行結果をパラメータとして使うことが出来ます。
他にもActive Choices Plugin
などがあります。
Jenkinsの設定
インストールした後の設定方法は以下のとおりです。
ビルドのパラメータ化から「Dynamic Choice Parameter」を選択。
選択したら、以下のとおりに値を設定します。
Name
- DEVELOPER_DIR
ここで指定した値が環境変数になります。
Choices Script
スクリプトを記述します。
Xcodeは全てApplications配下にあるものとします。
def targetPath = "/Applications/"
def xcodeList = []
"ls $targetPath".execute().text.eachLine({ list ->
def result = list =~ /(Xcode.*)/
if (result) {
xcodeList << "$targetPath" + result[0][1]
}
})
xcodeList
Remote Script
- チェック
これをチェックするとmasterではなくslave上で実行されます。
ただしslave環境が複数あった場合は、結果をまとめてくれるわけではないので注意が必要です。
Note: if the "Remote Script" check-box is checked, then the script will be executed on the slave where the build is started.
https://wiki.jenkins-ci.org/display/JENKINS/Dynamic+Parameter+Plug-in
上記、全ての設定が終わると以下の様な感じになります。
Jenkinsの実行画面
設定が終わり、パラメータ付きビルドを選択すると以下のように表示されます。
これでビルドをすれば、指定したXcodeで実行されます。
蛇足
このプラグインの他の利用方法とし、自動テストで実機の端末を指定したい場合にも利用することが出来ます。
例えば、Android端末であればadb devices
を利用しserialNumberを取得して、パラメータとして表示させることも出来ます。
ただ、このプラグインを単に使うだけでは、以下の様な問題があります。
- 指定した端末でテストが実行していてもパラメータとして指定出来てしまう。
- 複数slaveが存在し、それぞれにAndroid端末が接続されている場合、全てのserialNumberが表示されるわけではない。
- serialNumberだけではどの端末か分からない。
上記のような問題は運用でカバーになってしまいます。
※この問題に対する対応方法については、別途書きたいと思います。
最後に
本プラグインを今回の用途や蛇足の用途で利用する場合において問題点が何点かあります。
運用で多少カバーは出来ますが、あまりそこにコストをかけたくないです。
しかし、Jenkinsのプラグインは自身で開発することもできます。
従って、自身の環境に応じてプラグインを作るというのも1つの手だと思います。
※年末年始に作ってみようかなと思ってはいます(思ってはいる)。
参考