プッシュオプション
GitLabはクライアント側のGitプッシュオプションを使って、変更をプッシュすると同時に様々なアクションを実行することをサポートしています。さらに、Push Rulesはサーバー側のコントロールと強制オプションを提供します。
現在、以下のプッシュオプションが利用可能です:
Git バージョン 2.10 から 2.17 までの場合は--push-option
を使います:
git push --push-option=<push_option>
バージョン 2.18 以降では、上記の書式を使うか、より短い-o
を使います:
git push -o <push_option>
GitLab CI/CD のプッシュオプション
プッシュオプションを使ってCI/CDパイプラインをスキップしたり、CI/CD変数を渡すことができます。
プッシュオプション | 説明 | バージョン |
---|---|---|
ci.skip | 最新のプッシュに対して CI パイプラインを作成しません。ブランチパイプラインのみをスキップし、マージリクエストパイプラインはスキップしません。Jenkins などの CI インテグレーションのパイプラインはスキップしません。 | 11.7 |
ci.variable="<name>=<value>" | CI/CD 変数を提供し、プッシュによって CI パイプラインが作成された場合に使用します。ブランチパイプラインにのみ変数を渡し、マージリクエストパイプラインには渡しません。 | 12.6 |
integrations.skip_ci | Atlassian Bamboo、Buildkite、Drone、Jenkins、JetBrains TeamCity などの CI インテグレーションのプッシュイベントをスキップします。 | 16.2 |
ci.skip
の使用例:
git push -o ci.skip
パイプラインにCI/CD変数を渡す例:
git push -o ci.variable="MAX_RETRIES=10" -o ci.variable="MAX_TIME=600"
integrations.skip_ci
の使用例:
git push -o integrations.skip_ci
マージリクエストのプッシュオプション
Git のプッシュオプションを使うと、変更をプッシュすると同時にマージリクエストに対して特定のアクションを実行することができます:
プッシュオプション | 説明 | バージョン |
---|---|---|
merge_request.create | プッシュされたブランチに対して新しいマージリクエストを作成します。 | 11.10 |
merge_request.target=<branch_name> | マージリクエストのターゲットを特定のブランチやアップストリームプロジェクトに設定します:git push -o merge_request.target=project_path/branch
| 11.10 |
merge_request.merge_when_pipeline_succeeds | パイプラインが成功したときにマージするようにマージリクエストを設定します。 | 11.10 |
merge_request.remove_source_branch | マージされたときにソースブランチを削除するようにマージリクエストを設定します。 | 12.2 |
merge_request.title="<title>" | マージリクエストのタイトルを設定します。例:git push -o merge_request.title="The title I want" . | 12.2 |
merge_request.description="<description>" | マージリクエストの説明を設定します。例:git push -o merge_request.description="The description I want" . | 12.2 |
merge_request.draft | マージリクエストを下書きとしてマークします。例:git push -o merge_request.draft . | 15.0 |
merge_request.milestone="<milestone>" | マージリクエストのマイルストーンを設定します。例:git push -o merge_request.milestone="3.0" . | 14.1 |
merge_request.label="<label>" | マージリクエストにラベルを追加します。ラベルが存在しない場合は、作成されます。たとえば、2 つのラベルの場合git push -o merge_request.label="label1" -o merge_request.label="label2" . | 12.3 |
merge_request.unlabel="<label>" | マージリクエストからラベルを削除します。たとえば、2 つのラベルの場合:git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2" . | 12.3 |
merge_request.assign="<user>" | マージリクエストにユーザーを割り当てます。ユーザー名またはユーザー ID を指定します。例えば、2人のユーザーの場合:git push -o merge_request.assign="user1" -o merge_request.assign="user2" . | 13.10、15.5で追加されたユーザー名のサポート |
merge_request.unassign="<user>" | マージリクエストから割り当てられたユーザーを削除します。ユーザー名またはユーザーIDを受け付けます。例えば、2人のユーザーの場合:git push -o merge_request.unassign="user1" -o merge_request.unassign="user2" . | 13.10、15.5で追加されたユーザー名のサポート |
空白を含むテキストを必要とするプッシュオプションを使用する場合、引用符 ("
) で囲む必要があります。スペースがない場合は引用符を省略できます。いくつかの例を示します:
git push -o merge_request.label="Label with spaces"
git push -o merge_request.label=Label-with-no-spaces
-o
(あるいは--push-option
)フラグを複数使うことで、プッシュオプションを組み合わせて複数のタスクを一度に実行することができます。たとえば、新しいマージリクエストを作成し、my-target-branch
という名前のブランチを対象とする場合です:
git push -o merge_request.create -o merge_request.target=my-target-branch
さらに、パイプラインが成功した時点でマージリクエストをマージしたい場合は、次のようにします:
git push -o merge_request.create -o merge_request.target=my-target-branch -o merge_request.merge_when_pipeline_succeeds
Git の便利なエイリアス
上で示したように、Git のプッシュオプションを使うと Git コマンドが非常に長くなってしまうことがあります。同じプッシュオプションを頻繁に使う場合は、Git のエイリアスを作成すると便利です。Git エイリアスは Git のコマンドラインショートカットで、長い Git コマンドの使用を大幅に単純化することができます。
パイプラインが成功したらマージするエイリアス
merge when pipeline succeeds Git push オプションの Git エイリアスを設定します:
git config --global alias.mwps "push -o merge_request.create -o merge_request.target=master -o merge_request.merge_when_pipeline_succeeds"
そして、デフォルトブランチをターゲットとするローカルブランチを素早くプッシュし、パイプラインが成功したときにマージします:
git mwps origin <local-branch-name>