web-dev-qa-db-ja.com

ビルドパイプラインからローカルのAzure DevOps Gitにプッシュする

ショートバージョン

ローカルのGitリポジトリ(実際にはパイプラインのベースとなっているGitリポジトリ)に変更をプッシュするAzure DevOpsビルドパイプライン内で「コマンドラインスクリプト」タスクを設定する方法を誰かに教えてもらえますか?

何を試しても、印刷後にスクリプトが常にタイムアウトになるPushing commits to git

長いバージョン

既存のJava/MavenプロジェクトをJenkinsビルドサーバーからAzure DevOpsビルド環境に移行しています。Jenkinsの「リリースステージング」機能を模倣するビルドパイプラインをセットアップしようとしています。

私の最初の試みは、チェックアウトされたソースで直接Mavenリリースプラグインを呼び出すことでした。これにはいくつかの障害があり、そのほとんどは何らかの方法で克服できました。

  1. 標準のAzure DevOps git環境には、必要な構成値「user.email」と「user.name」が設定されていません。これは、プッシュする前に別の「コマンドラインスクリプト」タスクでgit configを呼び出すことで解決できます。
  2. Azure DevOpsはソースを「切り離されたHEAD状態」」でチェックアウトします-この問題を解決するために、セットアップスクリプトタスクもgit checkout masterを呼び出します。

これが設定されると、私のMaven呼び出しスクリプトは、リリースプラグインがPush to Gitを試行するところまで実行されます。読み込まれたログファイルの対応する行

[INFO] Executing: cmd.exe /X /C "git Push https://xxx.visualstudio.com/YYY/_git/zzz refs/heads/master:refs/heads/master"
[INFO] Working directory: D:\a\1\s</code>

その後、タイムアウトになるまで何も起こりません(少なくとも、何もログに記録されません)。

##[error]The operation was canceled.
##[section]Finishing: Maven pom.xml

この問題の原因を突き止めるために、いくつかのことを試しました。

  • maven呼び出しを無効にし、git Pushをスクリプトから直接呼び出す。
  • 「ストア」タイプのGitクレデンシャルヘルパーの登録(認証の問題がタイムアウトの原因であると想定)

しかし成功せず。 git Pushの電話をかけるためのアイデアが不足しています。私を手伝ってくれる人がいますか?

PS:ご存知かもしれませんが、私はAzure DevOpsに関しては初心者なので、そのシステムのすべてのトリックや機能を知っているわけではありません。特に、Mavenリリースプラグインと同じ機能を提供するものがあるかどうかはわかりません。私たちはAzure DevOpsパッケージ管理を使用していますが、スナップショットとリリースビルド(Nexusのようなツールが行う方法)のフィードを個別に保持したいので、リリース番号を自動的に進め、チェックアウトして再度チェックインするメカニズムが必要です。パッケージ化されたモジュールをビルドしてリリースフィードに公開する。

誰かがそれを達成する別の方法を提案できる場合は、私も提案を受け入れます。

8
jpvee

Azure DevOpsに変更をプッシュするには、資格情報をGitリポジトリURLに統合する必要があります

  • 最初に、 [〜#〜] pat [〜#〜] がない場合は作成します。
  • 次に、以下のコマンドを使用してプッシュします。

    git Push https://Personal%20Access%20Token:[email protected]/YYY/_git/zzz master
    
4
Marina Liu

this によると、authのPATルートに移動する必要はありません。リポジトリがビルドパイプラインと同じAzure DevOpsプロジェクトの一部である場合、資格情報はそのまま流れます。ビルドエージェントにリポジトリへの書き込みを許可していない可能性はありますか?次の2つが必要です。

  • Azure DevOpsプロジェクトのProject Settings-> Repositoriesで、Project Collection Build Serviceエンティティ適切なリポジトリ(またはすべてのプロジェクトリポジトリ)への寄稿者権限。

  • スクリプトが「エージェントジョブ」設定の下でOAuthトークンにアクセスすることを許可します。

    enter image description here

また、悪い点にも注意してください。DevOpsは資格情報をサブモジュールインスタンスに自動的に流さないため、これはサブモジュール操作では機能せず、唯一の症状はサイレントハングです。資格情報を手動でフローするための回避策は here です。

17
gregsmi

OAuthトークンへのスクリプトのアクセスを許可し、Repo権限を正しく設定した場合でも、オンプレミスDevOpsサーバーで同じ問題(git Pushがタイムアウトになるまでハングする)が発生しました。

私の場合の問題は、Build AgentがPATH環境変数の先頭にパスを追加することでした-私にとっては 'C:\ ins\agent\externals\git\cmd \'でした。ここに古いgitバージョン(gitバージョン2.18.0.windows.1)が存在し、ビルドエージェントのパイプラインのコンテキストで起動されました。これを確認するには、ビルドタスクに「git --version」呼び出しを追加します。

古いgitバージョンが機能しない理由を調査しておらず、パイプラインタスクで最新のgit.exeの完全パス修飾を単に使用しました

"C:\ Program Files\Git\bin\git.exe" Push Origin master

このgitバージョンでは、現在「gitバージョン2.24.0.windows.2」がすべて正常に動作します。もちろん、ビルドエージェントを新しいgit.exeを含むバージョンに更新すると、この問題も解決されます。

0
Michal