ショートバージョン
ローカルのGitリポジトリ(実際にはパイプラインのベースとなっているGitリポジトリ)に変更をプッシュするAzure DevOpsビルドパイプライン内で「コマンドラインスクリプト」タスクを設定する方法を誰かに教えてもらえますか?
何を試しても、印刷後にスクリプトが常にタイムアウトになるPushing commits to git
。
長いバージョン
既存のJava/MavenプロジェクトをJenkinsビルドサーバーからAzure DevOpsビルド環境に移行しています。Jenkinsの「リリースステージング」機能を模倣するビルドパイプラインをセットアップしようとしています。
私の最初の試みは、チェックアウトされたソースで直接Mavenリリースプラグインを呼び出すことでした。これにはいくつかの障害があり、そのほとんどは何らかの方法で克服できました。
git config
を呼び出すことで解決できます。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
この問題の原因を突き止めるために、いくつかのことを試しました。
git Push
をスクリプトから直接呼び出す。しかし成功せず。 git Push
の電話をかけるためのアイデアが不足しています。私を手伝ってくれる人がいますか?
PS:ご存知かもしれませんが、私はAzure DevOpsに関しては初心者なので、そのシステムのすべてのトリックや機能を知っているわけではありません。特に、Mavenリリースプラグインと同じ機能を提供するものがあるかどうかはわかりません。私たちはAzure DevOpsパッケージ管理を使用していますが、スナップショットとリリースビルド(Nexusのようなツールが行う方法)のフィードを個別に保持したいので、リリース番号を自動的に進め、チェックアウトして再度チェックインするメカニズムが必要です。パッケージ化されたモジュールをビルドしてリリースフィードに公開する。
誰かがそれを達成する別の方法を提案できる場合は、私も提案を受け入れます。
Azure DevOpsに変更をプッシュするには、資格情報をGitリポジトリURLに統合する必要があります:
次に、以下のコマンドを使用してプッシュします。
git Push https://Personal%20Access%20Token:[email protected]/YYY/_git/zzz master
this によると、authのPATルートに移動する必要はありません。リポジトリがビルドパイプラインと同じAzure DevOpsプロジェクトの一部である場合、資格情報はそのまま流れます。ビルドエージェントにリポジトリへの書き込みを許可していない可能性はありますか?次の2つが必要です。
Azure DevOpsプロジェクトのProject Settings-> Repositoriesで、Project Collection Build Serviceエンティティ適切なリポジトリ(またはすべてのプロジェクトリポジトリ)への寄稿者権限。
スクリプトが「エージェントジョブ」設定の下でOAuthトークンにアクセスすることを許可します。
また、悪い点にも注意してください。DevOpsは資格情報をサブモジュールインスタンスに自動的に流さないため、これはサブモジュール操作では機能せず、唯一の症状はサイレントハングです。資格情報を手動でフローするための回避策は here です。
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を含むバージョンに更新すると、この問題も解決されます。