次の方法で共有


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

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"

ビルド サービスにアクセス許可を付与する

プロジェクト ビルド サービスには、ソース リポジトリに書き込むアクセス許可が必要です。 必要なアクセス許可を次のように設定します。

  1. プロジェクトの [プロジェクト設定] で、[リポジトリ] の下にある [リポジトリ ] を選択 します

  2. [ すべてのリポジトリ ] ページで、[ セキュリティ ] を選択して、プロジェクト内のすべてのリポジトリのアクセス許可を設定します。 または、Git コマンドを実行するリポジトリを選択し、そのリポジトリのページで [セキュリティ ] を選択します。

    リポジトリのセキュリティの選択を示すスレンショット。

  3. [ ユーザーのアクセス許可 ] ページで、 ビルド サービス ID を選択します。 プロジェクト <ではなく、>プロジェクト名< [ユーザー] の下の [ビルド サービス (>organization) を選択してください。 既定では、この ID はリポジトリから読み取ることができますが、変更をプッシュすることはできません。

  4. 一覧をドロップダウンし、実行する Git コマンドに必要な各アクセス許可の横にある [許可 ] を選択します。通常は、 ブランチの作成投稿読み取りおよび作成タグです。

    リポジトリへの ID アクセス許可の付与を示すスクリーンショット。

スクリプトによるシステム トークンへのアクセスを許可する

スクリプトが GitHub OAuth トークンにアクセスできるようにするには:

checkoutpersistCredentials に設定して、true ステップを YAML パイプラインに追加します。

steps:
- checkout: self
  persistCredentials: true

checkoutステップの詳細については、steps.checkout定義を参照してください。

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

ビルド パイプラインでは、ローカル ブランチの削除やローカル git config の変更の元に戻すなど、ローカル リポジトリに対する特定の変更は自動的にクリーンアップされません。 セルフホステッド エージェントを使用して問題が発生した場合は、ビルドを実行する前にリポジトリをクリーンアップできます。

一般に、セルフホステッド エージェントのパフォーマンスを向上させるには、リポジトリをクリーンアップしないでください。 Microsoft がホストするエージェントは、毎回新しいエージェントを使用するため、クリーニングは有効ではありません。 詳細については、「 エージェントのローカル リポジトリをクリーンアップする」を参照してください。

ビルドを実行する前にリポジトリをクリーンアップするには:

cleanステップでtruecheckoutに設定します。 このオプションは、フェッチ 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 します。

  1. 次の内容を使用 して、 リポジトリのルートに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
    
  2. クラシック パイプライン の [トリガー ] タブで、[ 継続的インテグレーションを有効にする] チェック ボックスをオンにします。

  3. [ 分岐フィルター ] と [ パス] フィルターで、[ビルドに 含める ] または [ 除外] の分岐とパスを選択します。

  4. パイプラインの最後のタスクとして Batch スクリプト を追加します。

  5. タスク構成の [ パス ] に、 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 でのみ使用できます。