CIを使ってFlutterのCI/CDをやっているのですが、CI環境において複数のFlutterのバージョンを管理する必要があり、少し悩んだので以下にまとめます。mini上で動かしています。今回、Flutterのバージョンアップの検証が必要になったのですが、すでに配信中のアプリで利用しているFlutterのバージョンに対してはバージョンアップが完了するまでの間に緊急パッチを宛てる可能性があります。そのため、緊急パッチのビルド時につかうFlutterのバージョンと、バージョンアップ検証で使うFlutterのバージョンをそれぞれのビルドで使い分ける必要があります。検討した解決策CI環境上で複数のflutterのバージョンを動作させる方法として、以下の2つ案を考えました。CIの実行時に使うバージョンを動的に切り替えられるようにするメリット・デメリットは以下の通りです。Runnerに対応するブランチの命名規則を決める必要がある.gitlab-ci.ymlの設定が煩雑になる。Runnerで実行させる、という設定ができます。https://docs.gitlab.com/ce/ci/yaml/しかしデメリットで書いた通り、普段の開発においてはfetuareブランチやhotfixブランチを切ったりリリースタグを切ったりとブランチの命名規則を複数考慮してgitlab-ci.ymlを設定するのはなかなか骨が折れます。今回は設定が煩雑になることに加え、バージョンアップ版のリリースまでの移行期間のみ並行運用が走ること、また都度実行で増える実行時間が2-3分程度で待てるレベルであることを踏まえて2を選択することにしました。各ビルドで使うflutterのバージョンはpubspec.yamlに記載できるため、それを使ってflutterのバージョンを切り替えてからCIを実行するように.gitlab-ci.ymlを設定します。1.9.1+hotfix.6...yamlから特定のキーの値を取得するのにはyqが使えます。yq.readthedocs.iopubspec.yamlに記載されたバージョンでflutterのversionを切り替えるシェルは以下のように記載できます。checkoutするときに付与する必要があります。channelで事前に指定し、かつupgradeを実行して最新化しておく必要があります。versionコマンドは失敗してしまいます。1.13.3.なので、今回はflutterコマンドがインストールされている場所~/development/flutterに移動し、master上でpullして都度タグをcheckoutする方式を取るようにしました。precacheすることで依存するライブラリが落ちてきます。Flutter最後に↑のシェルを.gitlab-ci.ymlのbefore_scriptの中で実行するように設定すれば完成です。./set-flutter-version.sh...似たような感じでxcode-selectすればXCodeのバージョンも指定できそうですね。buildなどと同様にビルドさせる環境のツールのバージョンはgitレポジトリに定義含めてしまって、CIの実行の度に動的に変えられるようにしておくと管理が便利になりますね。Buildみたいにキャッシュできたらいいのになー。検索はてなブログをはじめよう!takamii228さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。