はじめに
CodePipelineもliquibaseも初めてなため、おかしなやり方かもしれませんが、誰かの役に立てばと思います。
背景
liquibaseをCodePipeline上で動かすにあたって、動的にコマンドやchangesetのファイルを指定したいため、CodePipelineからliquibaseのコマンド自体を渡せるようにしました。
(ほかにもっといいやり方があれば教えていただけると助かります)
やり方
まずは出来合いのCodePipeline、CodeBuildを用意してください。
CodePipeline、CodeBuildの作り方は他記事を参照してください。
ざっくり構成を箇条書きすると以下です。
- CodePipeline
- sourceステージ
- githubからliquibaseのマイグレーションファイルを取得
- buildステージ
- liquibaseのinstallからコマンド実行までをCodeBuildで実行
- sourceステージ
CodePipelineにCOMMAND
変数を作成する
以下画像の通り、Pipelineに変数を追加
BuildステージにCOMMAND
変数を渡す
以下図のようにすれば、BuildステージにCOMMAND
変数を環境変数として定義できます。
CodePipelineで定義した変数は#{variables.変数名}
とすれば、Buildステージで参照できます。
CodeBuildから、Buildステージで定義したCOMMAND
変数を参照する
出来合いのCodeBuildのbuildSpec.ymlを編集します。
buildフェーズでliquibaseコマンドにCodePipelineで定義したCOMMAND
変数を渡します。
build:
commands:
- echo "COMMAND=$COMMAND"
- liquibase $COMMAND
CodePipelineを実行
CodePipelineを実行すると、以下のようにCOMMAND
の入力欄が出てきます。
ここで実行したいliquibaseコマンドを指定すれば、そのコマンドがCodeBuildが実行されます。