Jenkins では parameterized build という機能で、ビルド実行時に Web UI からパラメータを指定することができます。
Drone では基本的に Git のイベントをフックして動くので「ビルドを実行時に手動でパラメータを設定する」ということは出来ません。
自分は基本的にできなくても構わないと思っていますが、 こういった機能がないから Drone を使わないという人も中にはいるので、 Drone でもちょっとした工夫でそれっぽいことは出来るんじゃないかと思い、簡単なサンプルを書いてみました。
一応言っておくと、 Jenkins の parameterized build を完全に代替するようなものではありません。
https://github.com/suzuki-shunsuke/example-drone-build-parameter
以下のファイルが必要です。
- build_params/params.sh.tpl: ビルドパラメータを記述するファイルのテンプレート
- scripts/deploy.sh: デプロイ時に実行するスクリプト
- .drone.yml: Drone の設定ファイル
スクリプトを実行してデプロイします。
$ bash scripts/deploy.sh
するとパラメータを記述するファイルがテンプレートから作成され、エディタで開きます。
パラメータを記述し、エディタを閉じます。
するとそのファイルがコミットされ、新しいタグが作成され、コミットとタグがリモートにプッシュされます。
Drone でタグをプッシュするイベントをフックしてビルドが実行されます。
https://github.com/suzuki-shunsuke/example-drone-build-parameter/blob/master/.drone.yml#L13-L17
ビルドではコミットされたパラメータの設定ファイルを読み込むことでビルドにパラメータを渡せます。
https://github.com/suzuki-shunsuke/example-drone-build-parameter/blob/master/.drone.yml#L10
こうすることでビルドにパラメータを渡すことができます。 パラメータの設定ファイルはコミットされるので Git で管理できるというのも特徴です。
上記のスクリプトではパラメータの設定ファイルとしてシェルスクリプトで環境変数を定義していますが、 シェルスクリプトである必要性はなく、例えば JSON ファイルを記述してビルドで JSON ファイルを読み込んでもよいし、 パラメータを選択させるようなことがしたければ fzf のようなものを使ってもよいし、 いくらでも改善できます。
以上、簡単な tips でした。