Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
Git コマンドは、 Microsoft がホスト するエージェントと セルフホステッド エージェントのビルド ワークフローで使用できます。 たとえば、機能ブランチで継続的インテグレーション (CI) ビルドが完了した後、ブランチをメインにマージできます。 この記事では、Azure Pipelines ビルド スクリプトで Git コマンドを実行する方法について説明します。
スクリプトを有効にして Git コマンドを実行する
GitHub で Azure DevOps アカウントの既定の ID が使用されていることを確認します。 必要に応じて、チェックアウト後の最初の手順として GitHub ユーザーを設定します。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
ビルド サービスにアクセス許可を付与する
プロジェクト ビルド サービスには、ソース リポジトリに書き込むアクセス許可が必要です。 必要なアクセス許可を次のように設定します。
プロジェクトの [プロジェクト設定] で、[リポジトリ] の下にある [リポジトリ ] を選択 します。
[ すべてのリポジトリ ] ページで、[ セキュリティ ] を選択して、プロジェクト内のすべてのリポジトリのアクセス許可を設定します。 または、Git コマンドを実行するリポジトリを選択し、そのリポジトリのページで [セキュリティ ] を選択します。
[ ユーザーのアクセス許可 ] ページで、 ビルド サービス ID を選択します。 プロジェクト <ではなく、>プロジェクト名< [ユーザー] の下の [ビルド サービス (>organization) を選択してください。 既定では、この ID はリポジトリから読み取ることができますが、変更をプッシュすることはできません。
一覧をドロップダウンし、実行する Git コマンドに必要な各アクセス許可の横にある [許可 ] を選択します。通常は、 ブランチの作成、 投稿、 読み取り、 および作成タグです。
スクリプトによるシステム トークンへのアクセスを許可する
スクリプトが GitHub OAuth トークンにアクセスできるようにするには:
checkoutを persistCredentials に設定して、true ステップを YAML パイプラインに追加します。
steps:
- checkout: self
persistCredentials: true
checkoutステップの詳細については、steps.checkout定義を参照してください。
ローカル リポジトリをクリーンアップする
ビルド パイプラインでは、ローカル ブランチの削除やローカル git config の変更の元に戻すなど、ローカル リポジトリに対する特定の変更は自動的にクリーンアップされません。 セルフホステッド エージェントを使用して問題が発生した場合は、ビルドを実行する前にリポジトリをクリーンアップできます。
一般に、セルフホステッド エージェントのパフォーマンスを向上させるには、リポジトリをクリーンアップしないでください。 Microsoft がホストするエージェントは、毎回新しいエージェントを使用するため、クリーニングは有効ではありません。 詳細については、「 エージェントのローカル リポジトリをクリーンアップする」を参照してください。
ビルドを実行する前にリポジトリをクリーンアップするには:
cleanステップでtrueをcheckoutに設定します。 このオプションは、フェッチ git clean -ffdx 前に git reset --hard HEAD 実行されます。
steps:
- checkout: self
clean: true
パイプライン エディターで [変数] を選択し、 Build.Clean 変数を作成または変更し、その値を source に設定します。
Git コマンドの例
次の例では、 コマンド ライン タスクと Batch スクリプト タスクで Git コマンドを実行します。
リポジトリ内のファイルを一覧表示する
Git リポジトリ内のファイルを一覧表示するには、次のように YAML パイプラインで コマンド ライン タスクを使用します。
- task: CmdLine@2
inputs:
script: 'git ls-files'
フィーチャー ブランチをメインにマージする
次のクラシック パイプラインの例では、ビルドが成功した場合に CI ビルドをマージして main します。
次の内容を使用 して、 リポジトリのルートに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クラシック パイプライン の [トリガー ] タブで、[ 継続的インテグレーションを有効にする] チェック ボックスをオンにします。
[ 分岐フィルター ] と [ パス] フィルターで、[ビルドに 含める ] または [ 除外] の分岐とパスを選択します。
パイプラインの最後のタスクとして Batch スクリプト を追加します。
タスク構成の [ パス ] に、 merge.bat ファイルの場所と名前を入力します。
FAQ
リモート リポジトリが GitHub または Bitbucket Cloud などの別の Git サービスにある場合、Git コマンドを実行できますか?
はい。リモート リポジトリが GitHub または Bitbucket Cloud などの別の Git サービスにある場合は、Git コマンドを実行できます。
Git コマンドの実行に使用できるタスクはどれですか?
次の Azure Pipelines タスクを使用して Git コマンドを実行できます。
スクリプトがプッシュされたときに CI ビルドをトリガーしないようにするにはどうすればよいですか?
スクリプトがプッシュされたときに 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 プッシュ タスクを修正するにはどうすればよいですか?
この問題を解決するには、信頼されたルート証明書を追加します。
NODE_EXTRA_CA_CERTS=file環境変数をビルド エージェントに追加するか、パイプラインに NODE.EXTRA.CA.CERTS=file タスク変数を追加します。
この変数の詳細については、Node.js ドキュメントの NODE_EXTRA_CA_CERTS=file を参照してください。 パイプラインで変数を設定する手順については、「パイプライン で変数を設定する」を参照してください。
オンプレミスの Azure DevOps Server にこれらの機能の一部が表示されないのはなぜですか?
これらの機能の一部は Azure DevOps Services でのみ使用でき、オンプレミスの Azure DevOps Server では使用できません。 一部の機能は、最新バージョンの Azure DevOps Server でのみ使用できます。