スクリプトで Git コマンドを実行する

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

一部のワークフローでは、ビルド パイプラインで Git コマンドを実行する必要があります。 たとえば、機能ブランチでの CI ビルドが完了した後で、ブランチをメインにマージしたい場合があります。

Git は、Microsoft によってホストされるエージェントオンプレミス エージェントで使用できます。

スクリプトで Git コマンドを実行できるようにする

注意

開始する前に、アカウントの既定の ID が次のコードで設定されていることを確認してください。 これは、コードをチェックアウトした後の最初の手順として行う必要があります。

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

ビルド サービスにバージョン管理アクセス許可を付与する

  1. [組織の設定]>[全般]>[プロジェクト] で、組織のプロジェクト設定ページに移動します。

    組織の設定を選択する。

  2. 編集するプロジェクトを選択します。

    プロジェクトを選択する。

  3. [プロジェクトの設定] で、[リポジトリ] を選択します。 Git コマンドを実行するリポジトリを選択します。

  4. [セキュリティ] を選択して、リポジトリのセキュリティを編集します。

    [セキュリティ] を選択してリポジトリのセキュリティを編集する。

  5. プロジェクト コレクション ビルド サービスを検索します。 ID{{あなたのプロジェクト名}} ビルド サービス ({あなたの組織})(グループではありませんプロジェクト コレクション ビルド サービス アカウント ({あなたの組織})を選択します。 既定では、この ID はリポジトリから読み取ることができますが、変更をプッシュして戻すことはできません。 実行する Git コマンドに必要なアクセス許可を付与します。 通常は、次のように許可します。

    • ブランチの作成: 許可
    • 投稿: 許可
    • 読み取り: 許可
    • タグの作成: 許可

コントロール パネルの [バージョン コントロール] タブに移動します

  • Azure Repos: https://dev.azure.com/{your-organization}/{your-project}/_admin/_versioncontrol

  • オンプレミス: https://{your-server}:8080/tfs/DefaultCollection/{your-project}/_admin/_versioncontrol

プロジェクトの管理

このページが表示されたら、リポジトリを選択してから、リンクを選択します。

コントロール パネルの上部からプロジェクトへ

コントロール パネルのプロジェクトのバージョンコントロール タブ

[バージョン コントロール] タブで、Git コマンドを実行するリポジトリを選択し、[プロジェクト コレクション ビルド サービス] を選択します。 既定では、この ID はリポジトリから読み取ることができますが、変更をプッシュして戻すことはできません。

アクセス許可

実行する Git コマンドに必要なアクセス許可を付与します。 通常は、次のように許可します。

  • ブランチの作成: 許可
  • 投稿: 許可
  • 読み取り: 許可
  • タグの作成: 許可

アクセス許可の付与が完了したら、必ず [変更の保存] を選択してください。

スクリプトがシステム トークンにアクセスできるようにする

persistCredentialstrue に設定されている checkout セクションを追加します。

steps:
- checkout: self
  persistCredentials: true

詳細については、checkout を参照してください。

[オプション] タブで、[スクリプトによる OAuth トークンへのアクセスを許可する] を選択します。

ローカル リポジトリを必ずクリーンアップする

ローカル リポジトリに対する特定の種類の変更は、ビルド パイプラインによって自動的にクリーンアップされません。 そのため、以下のことを確実に行ってください。

  • 作成したローカル ブランチを削除します。
  • Git 構成の変更を元に戻します。

オンプレミス エージェントの使用で問題が発生した場合は、リポジトリがクリーンであることを確認します。

checkoutcleantrue に設定されていることを確認します。

steps:
- checkout: self
  clean: true

リポジトリ内のファイルを一覧表示する

[ビルド] タブで、次のタスクを追加します。

タスク 引数

ユーティリティ: コマンド ライン
Git リポジトリ内のファイルを一覧表示します。
ツール: git

[引数] : ls-files

feature ブランチを main にマージする

ビルドが成功した場合は、CI ビルドを main にマージする必要があります。

[トリガー] タブで、[継続的インテグレーション (CI)] を選択し、ビルドするブランチを含めます。

リポジトリのルートに merge.bat を作成します。

@echo off
ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
IF %BUILD_SOURCEBRANCH% == refs/heads/main (
   ECHO Building main branch so no merge is needed.
   EXIT
)
SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
ECHO GIT CHECKOUT MAIN
git checkout main
ECHO GIT STATUS
git status
ECHO GIT MERGE
git merge %sourceBranch% -m "Merge to main"
ECHO GIT STATUS
git status
ECHO GIT PUSH
git push origin
ECHO GIT STATUS
git status

[ビルド] タブで、これを最後のタスクとして追加します。

タスク 引数

ユーティリティ: バッチ スクリプト
merge.bat を実行します。
パス: merge.bat

よく寄せられる質問

リモート リポジトリが GitHub に、または Bitbucket Cloud などの別の Git サービスにある場合、Git コマンドを実行できますか?

はい

Git コマンドを実行するために、どのタスクを使用できますか?

バッチ スクリプト

コマンド ライン

PowerShell

シェル スクリプト

スクリプトでプッシュしたときに CI ビルドをトリガーしないためには、どうすればよいですか?

コミット メッセージに ***NO_CI*** を追加します。 以下に例を示します。

  • git commit -m "This is a commit message ***NO_CI***"
  • git merge origin/features/hello-world -m "Merge to main ***NO_CI***"

コミット メッセージまたは説明に [skip ci] を追加します。 以下に例を示します。

  • git commit -m "This is a commit message [skip ci]"
  • git merge origin/features/hello-world -m "Merge to main [skip ci]"

これらのバリエーションのいずれかを、Azure Repos Git、Bitbucket Cloud、GitHub、および GitHub Enterprise Server へのコミットに使用することもできます。

  • [skip ci] または [ci skip]
  • skip-checks: true または skip-checks:true
  • [skip azurepipelines] または [azurepipelines skip]
  • [skip azpipelines] または [azpipelines skip]
  • [skip azp] または [azp skip]
  • ***NO_CI***

エージェントは必要ですか?

ビルドまたはリリースを実行するには、エージェントが少なくとも 1 つ必要です。

問題が発生しています。 どのように対処すればよいですか?

ビルドとリリースのトラブルシューティングに関するページを参照してください。

既定のエージェント プールが選択できず、ビルドまたはリリースをキューに入れることができません。 これをどのように修正すればよいですか?

エージェント プール」を参照してください。

NuGet プッシュ タスクが次のエラーで失敗します: "Error: unable to get local issuer certificate" (エラー: ローカル発行者の証明書を取得できません)。 どうしたらいいですか。

これは、信頼されたルート証明書を追加することで修正できます。 ビルド エージェントに NODE_EXTRA_CA_CERTS=file 環境変数を追加するか、パイプラインに NODE.EXTRA.CA.CERTS=file タスク変数を追加することができます。 この変数の詳細については、Node.js のドキュメントを参照してください。 パイプラインで変数を設定する手順については、「パイプラインで変数を設定する」を参照してください。

TFS をオンプレミスで使用していますが、これらの機能の一部が表示されません。 なぜでしょうか。

これらの機能の一部は Azure Pipelines でのみ使用でき、オンプレミスではまだ使用できません。 TFS の最新バージョンにアップグレードした場合は、一部の機能をオンプレミスで使用できます。