web-dev-qa-db-ja.com

Visual Studio Team Servicesのビルドジョブ内でのgitコマンドの実行(以前はVSO)

[環境:チームサービス、GIT、ホストビルドエージェント]

以下を行うことができるTeam Servicesビルド定義を作成したいと思います。

  1. リポジトリ内の既存のファイルに基づいていくつかの新しいファイルを生成するスクリプトを実行する

  2. 生成されたファイルをレポジトリにコミット/プッシュする

私は問題なく#1を行うことができます。しかし、どうすれば#2を実行できるかわかりません。

ビルドジョブ内から実際にgit.exeを実行できることを発見しました。しかし、どうすれば資格情報をgitに渡すことができるかわかりません。ビルドログに基づいて、stdinからユーザー名を取得しようとしているため、失敗しています。

「git config --global user.name xxxx」のようなものを使用してビルド定義にステップを追加しようとしましたが、まだ役に立ちませんでした。

これはサポートされているシナリオですか?助言がありますか?

ありがとう!


編集

ビルドスクリプトで次のアプローチを試しました。

git -c http.extraheader="AUTHORIZATION: bearer %SYSTEM_ACCESSTOKEN%" pull ...

プルなどのコマンドで機能するように見えました。しかし、変更をプッシュしようとしたときに、次のエラーが表示されました。

fatal: unable to access 'https://example.visualstudio.com/SampleTeam/_git/SampleRepo/': SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054

考え?

22
Yutao Huang

ここで自分の質問に答えて申し訳ありません...

TFSの専門家からヒントを得たところ、この記事を参照してくれました https://www.visualstudio.com/en-us/docs/build/scripts/git-commands 私の問題を解決しました。

私と同じ状況に陥る可能性のある人を助けるために、私はそれを共有すべきだと思います。

ここで重要な手順を引用しています(少し再フォーマット):

ビルドサービスにバージョン管理権限を付与する

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

  • チームサービス:https:// {your-account} .visualstudio.com/DefaultCollection/{your-team-project}/_admin/_versioncontrol

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

バージョン管理タブで、Gitコマンドを実行するリポジトリを選択してから、プロジェクトコレクションを選択しますビルドサービス(アカウント名)。実行するGitコマンドに必要なアクセス許可を付与します。通常、付与するのは次のとおりです。

  • ブランチ作成:許可
  • Contribute:許可
  • 読み取り:継承された許可
  • タグの作成:継承された許可

権限の付与が完了したら、変更の保存をクリックしてください。

ビルド定義を有効にしてGit.exeを実行します

  • 変数タブでこの変数を設定します:system.prefergit = true
  • オプションタブで、スクリプトへのアクセスを許可OAuth token

これらの設定により、Git Build Tools拡張機能をインストールしたり、Credential Managerを微調整したりする必要はありません。また、OAuthトークンに追加のヘッダーを明示的に設定する必要はありません。実際に非常にきれいなソリューションだと思います。:)

しかし、エディとVonCの助けに本当に感謝しています!

38
Yutao Huang

Visual Studio Team Services(VSTS)には、これを行うための機能が組み込まれています。

  1. アカウントProject Collection Build Service(account_name)にVSTSの適切なリポジトリへのアクセスを許可します。
  2. エージェントフェーズで、スクリプトへのアクセスを許可するチェックボックスをオンにしますOAuth token)。
  3. これで、タスク内で変数SYSTEM_ACCESSTOKENを参照してgitリポジトリにアクセスできます:git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo

参照: https://github.com/Microsoft/vsts-tasks/issues/962

5
PotatoFarmer

Git Build Tools extensionをインストールしてから、ビルド定義に「Gitリモートアクセスを許可」タスクを追加できます。 [オプション]タブの[スクリプトへのアクセスを許可OAuthトークン]機能が有効になっていることを確認します。

Gitリモートアクセスを有効にする

特定の操作では、ビルド中からリモートリポジトリにアクセスする必要があります。このタスクは、エージェントのGitリポジトリのリモートを更新して、Visual Studio Team Servicesのアップストリームリポジトリへのアクセスを許可します。

必要条件

このビルドタスクを機能させるには、ビルド定義オプションでスクリプトへのアクセスを許可するOAuthトークンオプションが設定されている必要があります。

パラメーター

Gitリモートアクセスを有効にする

リモート名:更新する必要があるリモートの名前。デフォルトはOriginです。

関連タスク

ビルド定義の最後にGitリモートの復元を呼び出して、リモートを元の値に復元する必要があります。

既知の問題点

Git lfs fetchのようなGit-Lfs操作は、これではまだ動作しません。このGit-Lfsの問題を参照してください

拡張機能でpowershellスクリプトを使用するための手順を追加します。

  1. 「EnableGitRemoteAccess.ps1」スクリプトのコードを使用してpower-Shellスクリプトを作成し、そのスクリプトをソース管理に追加します。
  2. ビルド定義で「スクリプトへのアクセスを許可OAuthトークン」オプションを有効にします。
  3. PowerShellタスクをビルド定義に追加し、スクリプトのスクリプトパスを設定してgitリモートアクセスを有効にします。 enter image description here
  4. ビルド定義に別のPowerShellタスクを追加して、コミットして変更をプッシュします。

変更のコミットとプッシュに使用するコード:

git add .
git commit -m "changesinbuild"
git Push Origin master 2>&1 | Write-Host
3

ソースから生成できるファイルは一般にビルドアーティファクトと見なされ、notgitリポジトリに追加/コミット/プッシュされます。

つまり、可能であれば、httpsの代わりにssh urlを使用する必要があります。sshにはsshキーが必要です。また、sshの秘密キーがパスフレーズなしの場合、gitはstdinで何も照会する必要はありません。

別の方法は、 Microsoft GCH(Git Credential Helper) を使用することです。これは Git for WindowsGit 2.7. 、March 2016)。
例を参照してください this answer これにより、ログイン/パスワードがWindows資格情報ストア内にキャッシュされます。

1
VonC

これは、トニーのブルースの答えのフォローアップです。

申し訳ありませんが、私の評判は10未満であるためリンクを投稿できませんが、すべてがvisualstudio Webサイトに配置されているので、あなたはこれを自分で理解できると確信しています。

スクリプト内でGITコントリビューションを許可するには、以下を行う必要があります

  1. VSTSエージェントの前提条件に記載されているすべてのものが完了していることを確認してください

  2. / en-us/docs/build/scripts/git-commandsの指示に従っていることを確認してください

    • 特に、リポジトリのProject Build Serviceアカウントに必要な権限を追加します-少なくともContribute(必要に応じて他の権限を自由に検討してください)-これは「SSL読み取りエラー」の本当の原因です

この投稿とトニーの投稿の違いは、構成(TFS 2015、Mac OS SierraにインストールされたVSTSエージェント)で、アカウント "Project Build Serviceにアクセス許可" Contribute "を追加する必要があることです。 "-そのため、名前に「コレクション」という単語が記載されているアカウントではありません。また、注意してくださいProject Collection Build Service Accountsという名前のグループと混同しないでください-特定の条件下で使用される可能性がありますが、そうではありませんデフォルトで動作します。これは私が誤ってやったことであるため、指摘しています。

次の画像を確認してください プロジェクトの下にあります->コントロールパネル->バージョン管理-> GITリポジトリ

また、私の場合(MacOS Sierraの場合)、2つの特定のディレクトリのシンボリックリンクを持つパーツが重要になったため、システム要件にも注意してください。 OSXの特定のシステム要件は[github] /Microsoft/vsts-agent/blob/master/docs/start/envosx.mdおよびstateにあります

opensslをインストール

$ brew update
$ brew install openssl

openssl libsへのシンボリックリンクを作成します-これはMacOS(Sierra)で必要です

$ mkdir -p /usr/local/lib/
$ ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
$ ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/

GITのバージョンを見つける

$ git --version

2.9.0未満の場合はGITを更新します

$ brew update
$ brew install git
0
T. Tiscalli

私はこれと同じ問題を抱えていました。解決策は、yamlのスクリプト部分にgit configオプションを配置することでした。例については、このGitHubの問題を参照してください。

https://github.com/Microsoft/Azure-pipelines-agent/issues/1925

0
mwilson