プッシュオプション

GitLabはクライアント側のGitプッシュオプションを使って、変更をプッシュすると同時に様々なアクションを実行することをサポートしています。さらに、Push Rulesはサーバー側のコントロールと強制オプションを提供します。

現在、以下のプッシュオプションが利用可能です:

note
Git のプッシュオプションは、Git 2.10 以降でのみ利用可能です。

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_ciAtlassian 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.1015.5で追加されたユーザー名のサポート
merge_request.unassign="<user>"マージリクエストから割り当てられたユーザーを削除します。ユーザー名またはユーザーIDを受け付けます。例えば、2人のユーザーの場合:git push -o merge_request.unassign="user1" -o merge_request.unassign="user2".13.1015.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>