- General
- GitHub Advanced Security for Azure DevOps
- Azure Pipelines
- Test Plans
- Feedback
- How to provide feedback
この更新では、Azure DevOps全体でセキュリティと認証を改善しています。Azure DevOps OAuthのオーバーラッピングシークレットにより、シークレットのローテーションがシームレスになり、GitHub Advanced Securityはセキュリティ概要ページに優れたフィルタリングを提供しながら、依存関係とコードスキャンのアラートを正しくルーティングするマルチリポジトリパブリッシングを実現します。
Azure Pipelinesのホストイメージが更新され、Ubuntu-24.04、Windows 2025、およびmacOS-15 Sequoiaが含まれ、より安全で信頼性の高いエクスペリエンスを確保します。
詳細についてはリリースノートをご確認ください。
- セキュリティ概要リスクページに新しい列とフィルタリングオプションを追加
- GitHub Advanced Security for Azure DevOpsのマルチリポジトリパブリッシングシナリオをサポート
- GitHub Advanced Security for Azure DevOpsアラートのサービスフックを提供します(プレビュー)
- GitHub Advanced Security for Azure DevOpsの依存関係スキャンにpnpm v9サポートを追加しました
- ホストイメージを更新します
- ワークロード ID フェデレーションがEntra発行者を使用します
- 新しいGradle@4タスク
- stringListパラメータタイプの定義
- ステージの実行を要求したユーザーのIDを取得できるようになりました
Azure DevOps OAuthの新機能であるオーバーラッピングシークレット機能の導入を発表できることを嬉しく思います。この機能は、セキュリティを強化し、シークレットのローテーションを合理化するように設計されています。この機能により、以前のシークレットがアクティブなままの状態で、OAuthクライアントに新しいシークレットを追加でき、アプリケーションの継続的な運用を確保します。これらのシークレットは、APIを介してプログラムで、またはVisual Studio AppページのUIを通じて管理できます。
継続的なセキュリティ改善の一環として、Azure DevOps OAuthは2026年に廃止が予定されています。改善されたセキュリティ機能と長期的な投資のために、Microsoft Entra ID OAuthへの移行をお勧めします。それまでの間、新しいオーバーラッピングシークレット機能を使用して、定期的にシークレットをローテーションすることをお勧めします。
今後数週間で、プロジェクトサマリーページから言語統計タグを廃止する予定です。これらのタグを削除することでパフォーマンスが最適化され、読み込み時間が短縮され、より応答性の高いインターフェースが実現します。
更新は自動的に行われ、ユーザー側での操作は必要ありません。
リスクタブの下に、組織全体において、新規、修正済み、却下されたセキュリティアラートを表示する新しい列が追加されました。プロジェクト、ツール(シークレット、依存関係、コードスキャン結果)によるフィルタリングオプションと、検索範囲を定義する時間ベースのフィルターを追加しました。
さらに、フィルターを適用すると URLクエリパラメータが追加され、フィルター済みのビューを組織内の他のメンバーと共有できるようになります。
今まで、パイプライン定義があるリポジトリと、GitHub Advanced Security によってスキャン対象とされるソースコードが格納されているリポジトリが分かれている場合、結果が誤ったリポジトリに送信され、処理されていました。つまり、ソースコードが存在するリポジトリにアラートを公開する代わりに、パイプライン定義があるリポジトリに表示されていました。
今回の更新で、マルチリポジトリシナリオにおいて、依存関係スキャンとコードスキャンの両方が、スキャンされたソースコードを含むリポジトリに正しくアラートをルーティングするようになります。
この機能を有効にするには、作業ディレクトリ内のリポジトリからパブリッシュ先のリポジトリを推測するために、パイプライン環境変数 advancedsecurity.publish.repository.infer: true
を設定します。
あるいは、リポジトリを明示的にチェックアウトしない場合や、リポジトリのチェックアウトにエイリアスを使用する場合は、代わりに変数 advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['YourRepositoryAlias']) ]
を使用します。
YAMLコードスニペットは以下の通りです。
trigger:
- main
resources:
repositories:
- repository: BicepGoat
type: git
name: BicepGoat
ref: refs/heads/main
trigger:
- main
jobs:
# 明示的 - `advancedsecurity.publish.repository` は明示的にSARIFを送信するリポジトリを定義します
- job: "AdvancedSecurityCodeScanningExplicit"
displayName: "🛡 Infrastructure-as-Code Scanning (Explicit)"
variables:
advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['BicepGoat']) ]
steps:
- checkout: BicepGoat
- task: TemplateAnalyzerSarif@1
displayName: Scan with Template Analyzer
- task: AdvancedSecurity-Publish@1
displayName: Publish to IaC Scanning Results to Advanced Security
# 推測 - `advancedsecurity.publish.repository.infer` は、`AdvancedSecurity-Publish` がビルドエージェント上の
# 作業ディレクトリからSARIFを送信するリポジトリを推測する必要があることを指定します
- job: "AdvancedSecurityCodeScanningInfer"
displayName: "🛡 Infrastructure-as-Code Scanning (Infer)"
variables:
advancedsecurity.publish.repository.infer: true
steps:
- checkout: BicepGoat
- task: TemplateAnalyzerSarif@1
displayName: Scan with Template Analyzer
- task: AdvancedSecurity-Publish@1
displayName: Publish to IaC Scanning Results to Advanced Security
GitHub Advanced Securityアラートイベント用のサービスフックを設定できるようになりました。含まれるイベントは以下の通りです。
- 新規アラートの作成
- アラートデータの変更
- アラート状態の変更
他のリポジトリイベントと同様に、リポジトリとブランチでフィルタリングできます。アラートについては特に、アラートタイプ(依存関係、コードスキャン、またはシークレット)とアラートの重要度でフィルタリングできます。
プレビューに参加するには、プレビュー申込フォームに記入するか、メールをお送りください!
4月末にpnpm v8のサポートが終了することに伴い、次回の依存関係スキャンの更新でpnpm v9のサポートが含まれます。この更新は、Developer Communityでのpnpm v9サポートのリクエストに応えるものです。
Azure Pipelinesのホストエージェントを安全かつ最新の状態に保つための更新をロールアウトしています。これらの更新には、Ubuntu-24.04、Windows 2025イメージ、macOS-15 Sequoiaのサポート追加と、Ubuntu-20.04やWindows Server 2019などの古いイメージの廃止が含まれます。
詳細については、ブログをご覧ください。
macOS-15
イメージは4月1日からAzure Pipelinesホストエージェントで利用可能になります。このイメージを使用するには、YAMLファイルを更新して vmImage:'macos-15'
を含めてください。
- job: macOS15
pool:
vmImage: 'macos-15'
steps:
- bash: |
echo Hello from macOS Sequoia
sw_vers
macOS-15のインストール済みソフトウェアについては、イメージ構成をご覧ください。
macOS-latest
を指定した場合、引き続き macOS-14
イメージが使用されます。4月に macOS-latest
が macOS-15
を使用するように更新する予定です。
windows-2025
イメージがAzure Pipelinesホストエージェントでプレビューとして利用可能になりました。このイメージを使用するには、YAMLファイルを更新して vmImage:'windows-2025'
を含めてください:
- job: win2025
pool:
vmImage: 'windows-2025'
steps:
- pwsh: |
Write-Host "(Get-ComputerInfo).WindowsProductName"
Get-ComputerInfo | Select-Object WindowsProductName
Write-Host "`$PSVersionTable.OS"
$PSVersionTable.OS
Windows Server 2025のインストール済みソフトウェアについては、イメージ構成をご覧ください。
今後数週間で、ubuntu-latest
を指定するパイプラインジョブは、ubuntu-22.04
の代わりに ubuntu-24.04
を使用するようになります。
ubuntu-24.04イメージで利用できなくなったツールを使用するタスクのガイダンスについては、ブログをご覧ください。Ubuntu 22.04を引き続き使用するには、ubuntu-22.04
イメージラベルを使用してください。
- job: ubuntu2404
pool:
vmImage: 'ubuntu-24.04'
steps:
- bash: |
echo Hello from Ubuntu 24.04
lsb_release -d
- pwsh: |
Write-Host "`$PSVersionTable.OS"
$PSVersionTable.OS
Ubuntu 20.04イメージは間もなくサポートが終了するため、Azure Pipelinesでのサポートを廃止します。ブラウンアウトスケジュールを含む廃止計画については、ブログをご覧ください。
1年ほど前に、Workload identity federationを一般提供開始しました。Workload identity federationを使用すると、シークレットなしでサービス接続を構成できます。サービス接続を構成する基礎となるID(アプリ登録、マネージドID)は、IDのフェデレーション資格情報で構成された意図された目的(サービス接続)にのみ使用できます。
現在、新しいAzureおよびDockerサービス接続のフェデレーション資格情報の形式を変更しています。既存のサービス接続は以前と同様に機能します。
Azure DevOps issuer | Entra issuer(新しいサービス接続) | |
---|---|---|
Issuer | https://vstoken.dev.azure.com/<organization id> |
https://login.microsoftonline.com/<Entra tenant id>/v2.0 |
Subject | sc://<organization name>/<project name>/<service connection name> |
<entra prefix>/sc/<organization id>/<service connection id> |
構成に変更はなく、トークンの取得方法も同じままです。パイプラインタスクを更新する必要はなく、以前と同様に機能します。
サービス接続を作成する手順は変更されず、ほとんどの場合、新しい発行者は表示されません。Azureサービス接続を手動で構成する場合、新しいフェデレーション資格情報が表示されます。
アプリ登録またはWorkload identity federation資格情報を作成する際、これまでと同様にこれらの値をコピーしてください。
REST APIを使用して自動でサービス接続を作成する場合、APIから返されるフェデレーション資格情報を使用します。
authorization.parameters.workloadIdentityFederationIssuer
authorization.parameters.workloadIdentityFederationSubject
同様に、Terraformのazuredevopsプロバイダーでサービス接続を作成する場合、azuredevops_serviceendpoint_azurerm リソースは workload_identity_federation_issuer
と workload_identity_federation_subject
属性を返します。
- Connect to Azure with an Azure Resource Manager service connection
- Troubleshoot an Azure Resource Manager workload identity service connection
Gradle 8.0をサポートする新しい Gradle@4
タスクが作成されました。ビルトインのコードカバレッジオプションは、Gradle@4
以降の Gradle
タスクから削除されています。パイプラインでGradleとコードカバレッジを使用するには:
- build.gradleファイルでコードカバレッジプラグインを指定します。詳細については、Gradleコード分析オプションをご覧ください。
Gradle@4
タスクの後にパイプラインで PublishCodeCoverageResults@2 タスクを使用します。
SonarQube分析の設定は、SonarQubeまたはSonarCloud拡張機能のタスクPrepare Analysis Configuration
に移動されました。
YAMLパイプラインの最も要望の多かった機能のひとつは、アイテムのリストを含むパラメータを定義することでした。
今回のスプリントで、この機能を提供する stringList
という新しいパラメータタイプを追加しました。
例えば、パイプラインの実行をキューに入れる人が、ペイロードをデプロイしたいリージョンを選択できるようにしたい場合、以下の例のように設定できます。
parameters:
- name: regions
type: stringList
displayName: Regions
values:
- WUS
- CUS
- EUS
stages:
- ${{ each stage in parameters.regions}}:
- stage: ${{stage}}
displayName: Deploy to ${{stage}}
jobs:
- job:
steps:
- script: ./deploy ${{stage}}
このパイプラインをキューに入れる際、以下のスクリーンショットに示されているように、デプロイするリージョンを複数選択できるオプションが追加されました。
YAMLパイプラインのセキュリティを向上させるため、ステージの実行を要求したユーザーを知りたい場合があります。この要望に対応するため、Build.StageRequestedBy
と Build.StageRequestedById
という2つの新しい定義済み変数を追加しています。これらの変数は、実行ではなくステージに関するものである点を除いて、Build.RequestedFor
および Build.RequestedForId
変数と似ています。
手動でトリガーされたステージやステージの再実行など、ユーザーが明示的にトリガーした場合、その2つの変数にユーザーのIDが使用されます。
今回のリリースでは、v2タスクにいくつかの改善が含まれています。
- .coverage、.covx、.covb、.cjson、.xml、.lcov、pycov1を含む様々なコードカバレッジフォーマットのサポートを拡大しました
- ファイル名、カバーされた/カバーされていない行など、詳細なコードカバレッジ情報を含む包括的なcjsonファイル(およびコードカバレッジレポート)の生成
- 差分カバレッジ(PRカバレッジ)のサポート:v2は同じパイプライン内の複数の言語の差分カバレッジPRコメントを生成できます
- v2タスクは、v1タスクではサポートされていなかったビルド品質チェックタスクをサポートするようになりました
カスタム列を含むテストケースをXLSXでエクスポートできるようになりました。ユーザーのフィードバックに基づき、Test Plansはカスタム列を含むテストケースのエクスポートをサポートし、共有および分析するデータをより柔軟にコントロールできるようになりました。この改善により、エクスポートする情報を必要に応じてカスタマイズし、実用的なものにできます。
注意事項
ここで議論されている機能は今後二~三週にわたって順次展開されます。
Azure DevOpsサービスを体験してみてください。
これらの機能についてどう思っているかお聞きしたいと思います。 フィードバックメニューを使用して問題を報告するか、提案を提出してください。
アドバイスや回答を必要とする質問がある場合、Stack Overflowコミュニティで聞いてください。 ありがとうございました。
Silviu Andrica