[環境:チームサービス、GIT、ホストビルドエージェント]
以下を行うことができるTeam Servicesビルド定義を作成したいと思います。
リポジトリ内の既存のファイルに基づいていくつかの新しいファイルを生成するスクリプトを実行する
生成されたファイルをレポジトリにコミット/プッシュする
私は問題なく#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
考え?
ここで自分の質問に答えて申し訳ありません...
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の助けに本当に感謝しています!
Visual Studio Team Services(VSTS)には、これを行うための機能が組み込まれています。
SYSTEM_ACCESSTOKEN
を参照してgitリポジトリにアクセスできます:git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo
Git Build Tools extensionをインストールしてから、ビルド定義に「Gitリモートアクセスを許可」タスクを追加できます。 [オプション]タブの[スクリプトへのアクセスを許可OAuthトークン]機能が有効になっていることを確認します。
Gitリモートアクセスを有効にする
特定の操作では、ビルド中からリモートリポジトリにアクセスする必要があります。このタスクは、エージェントのGitリポジトリのリモートを更新して、Visual Studio Team Servicesのアップストリームリポジトリへのアクセスを許可します。
必要条件
このビルドタスクを機能させるには、ビルド定義オプションでスクリプトへのアクセスを許可するOAuthトークンオプションが設定されている必要があります。
パラメーター
Gitリモートアクセスを有効にする
リモート名:更新する必要があるリモートの名前。デフォルトはOriginです。
関連タスク
ビルド定義の最後にGitリモートの復元を呼び出して、リモートを元の値に復元する必要があります。
既知の問題点
Git lfs fetchのようなGit-Lfs操作は、これではまだ動作しません。このGit-Lfsの問題を参照してください
拡張機能でpowershellスクリプトを使用するための手順を追加します。
変更のコミットとプッシュに使用するコード:
git add .
git commit -m "changesinbuild"
git Push Origin master 2>&1 | Write-Host
ソースから生成できるファイルは一般にビルドアーティファクトと見なされ、notgitリポジトリに追加/コミット/プッシュされます。
つまり、可能であれば、httpsの代わりにssh urlを使用する必要があります。sshにはsshキーが必要です。また、sshの秘密キーがパスフレーズなしの場合、gitはstdinで何も照会する必要はありません。
別の方法は、 Microsoft GCH(Git Credential Helper) を使用することです。これは Git for Windows ( Git 2.7. 、March 2016)。
例を参照してください this answer これにより、ログイン/パスワードがWindows資格情報ストア内にキャッシュされます。
これは、トニーのブルースの答えのフォローアップです。
申し訳ありませんが、私の評判は10未満であるためリンクを投稿できませんが、すべてがvisualstudio Webサイトに配置されているので、あなたはこれを自分で理解できると確信しています。
スクリプト内でGITコントリビューションを許可するには、以下を行う必要があります
VSTSエージェントの前提条件に記載されているすべてのものが完了していることを確認してください
/ en-us/docs/build/scripts/git-commandsの指示に従っていることを確認してください
この投稿とトニーの投稿の違いは、構成(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
私はこれと同じ問題を抱えていました。解決策は、yamlのスクリプト部分にgit configオプションを配置することでした。例については、このGitHubの問題を参照してください。
https://github.com/Microsoft/Azure-pipelines-agent/issues/1925