Azure DevOps డిప్లాయ్మెంట్లో డీకోడింగ్ YAML లోపాలు
మీరు మీ DevOps ప్రాసెస్లను క్రమబద్ధీకరించడానికి Azure యాక్సిలరేటర్ని సెటప్ చేస్తున్నారని ఊహించుకోండి, కానీ మృదువైన విస్తరణకు బదులుగా, మీరు ఒక ఎర్రర్ను ఎదుర్కొంటున్నారు: "ప్లెయిన్ స్కేలార్ని స్కాన్ చేస్తున్నప్పుడు, ప్రక్కనే ఉన్న స్కేలార్ల మధ్య వ్యాఖ్య కనుగొనబడింది." ఈ ఊహించని అడ్డంకి నిరుత్సాహాన్ని కలిగిస్తుంది, ప్రత్యేకించి మీ YAML ఫైల్ YAML లింట్ టూల్స్ ప్రకారం ఖచ్చితంగా చెల్లుబాటు అయ్యేదిగా అనిపించినప్పుడు. 😟
YAML ఫైల్లు వాటి సరళతకు ప్రసిద్ధి చెందాయి, అయితే ఫార్మాటింగ్ సూక్ష్మ నైపుణ్యాల విషయానికి వస్తే అవి క్షమించబడవు. అదనపు స్థలం లేదా తప్పుగా ఉంచబడిన వ్యాఖ్య వంటి నిర్మాణంలో చిన్న పొరపాటు కూడా పార్సింగ్ సమస్యలకు దారి తీస్తుంది. ఈ సందర్భంలో, మీరు మీ ఇన్పుట్లను ఒకటికి రెండుసార్లు తనిఖీ చేసారు, వాటిని బాహ్యంగా ధృవీకరించారు, ఇంకా లోపం కొనసాగుతుంది, దీని వలన మీరు మీ తల గోకడం జరుగుతుంది.
వ్యక్తిగత అనుభవం మరియు DevOps పైప్లైన్లలో YAML ఫైల్లతో పని చేయడం ద్వారా, ఇటువంటి లోపాలు తరచుగా తక్షణమే స్పష్టంగా కనిపించని సూక్ష్మ సమస్యల నుండి ఉత్పన్నమవుతాయని నేను తెలుసుకున్నాను. డీబగ్గింగ్ అనేది గడ్డివాములో సూదిని కనుగొనడం వంటి అనుభూతిని కలిగిస్తుంది, ప్రత్యేకించి మీరు ఆధారపడే సాధనాలు YAML దోష రహితమని సూచించినప్పుడు. 🔍
ఈ ఆర్టికల్లో, మేము ఈ పార్సింగ్ ఎర్రర్ వెనుక ఉన్న మిస్టరీని విప్పుతాము మరియు దానిని నిర్ధారించడానికి మరియు పరిష్కరించడానికి చర్య తీసుకోగల దశలను అందిస్తాము. చివరికి, మీరు YAML నిర్వహణ కోసం ఉత్తమ అభ్యాసాల గురించి అంతర్దృష్టులను పొందుతారు మరియు Azure DevOpsలో విజయవంతమైన విస్తరణలకు స్పష్టమైన మార్గాన్ని పొందుతారు. డైవ్ చేద్దాం! 🚀
ఆదేశం | ఉపయోగం యొక్క ఉదాహరణ |
---|---|
Import-Module | అజూర్ ల్యాండింగ్ జోన్ (ALZ) మాడ్యూల్ను లోడ్ చేయడానికి పవర్షెల్లో ఉపయోగించబడుతుంది, YAML పార్సింగ్ మరియు ఎన్విరాన్మెంట్ సెటప్ కోసం దాని అనుకూల cmdlets వినియోగాన్ని అనుమతిస్తుంది. |
ConvertFrom-Yaml | స్క్రిప్ట్లలో తదుపరి ప్రాసెసింగ్ కోసం YAML-ఫార్మాట్ చేసిన స్ట్రింగ్లను ఉపయోగించగల వస్తువుగా మార్చడానికి పవర్షెల్ cmdlet. YAML కాన్ఫిగరేషన్ ఫైల్లను అన్వయించడానికి ఉపయోగపడుతుంది. |
Out-File | డీబగ్గింగ్ కోసం పేర్కొన్న లాగ్ ఫైల్కి ఎర్రర్ వివరాలను సేవ్ చేస్తుంది. ఇది కన్సోల్లో కనిపించకపోయినా, లోపాలను తర్వాత సమీక్షించవచ్చని నిర్ధారిస్తుంది. |
yaml.safe_load | YAML ఫైల్లో అసురక్షిత కోడ్ని అమలు చేయడాన్ని నిరోధించేటప్పుడు YAML డాక్యుమెంట్ను పైథాన్ నిఘంటువులోకి అన్వయించే పైథాన్ ఫంక్షన్. |
logging.error | పైథాన్లో ERROR తీవ్రత స్థాయి ఉన్న ఫైల్కు లోపాలను లాగ్ చేస్తుంది. నిర్మాణాత్మక ఆకృతిలో పార్సింగ్ సమస్యలను ట్రాక్ చేయడం కోసం అవసరం. |
fs.readFileSync | క్లయింట్-వైపు JavaScript వాతావరణంలో YAML కాన్ఫిగరేషన్ ఫైల్ వంటి ఫైల్ యొక్క కంటెంట్లను సమకాలీకరించడానికి Node.js ఫంక్షన్. |
yaml.load | js-yaml లైబ్రరీ ద్వారా అందించబడిన, ఈ ఫంక్షన్ YAML డాక్యుమెంట్లను JavaScript ఆబ్జెక్ట్లుగా అన్వయిస్తుంది. ఇది విస్తృత శ్రేణి YAML సింటాక్స్కు మద్దతు ఇస్తుంది. |
Write-Host | కన్సోల్లో సందేశాలను ప్రదర్శించడానికి పవర్షెల్ కమాండ్ ఉపయోగించబడుతుంది. ఇక్కడ, ఇది వినియోగదారుకు విజయవంతమైన YAML పార్సింగ్ని నిర్ధారిస్తుంది. |
Exit | క్రిటికల్ ఎర్రర్ను ఎదుర్కొన్న వెంటనే పవర్షెల్లోని స్క్రిప్ట్ను రద్దు చేస్తుంది, తదుపరి చర్యలు తీసుకోబడలేదని నిర్ధారిస్తుంది. |
require('js-yaml') | js-yaml లైబ్రరీని దిగుమతి చేయడానికి JavaScript కమాండ్, Node.js ఎన్విరాన్మెంట్లో YAML పార్సింగ్ సామర్థ్యాలను ఎనేబుల్ చేస్తుంది. |
YAML పార్సింగ్ స్క్రిప్ట్ల వెనుక లాజిక్ను అర్థం చేసుకోవడం
Azure DevOpsలో YAML ఫైల్లతో పని చేస్తున్నప్పుడు, "ప్లెయిన్ స్కేలార్ని స్కాన్ చేస్తున్నప్పుడు, ప్రక్కనే ఉన్న స్కేలార్ల మధ్య వ్యాఖ్యను కనుగొనడం" వంటి పార్సింగ్ ఎర్రర్ను ఎదుర్కొంటే రోడ్బ్లాక్గా అనిపించవచ్చు. నేను ఇంతకు ముందు భాగస్వామ్యం చేసిన స్క్రిప్ట్లు సంభావ్య ఫార్మాటింగ్ లోపాలను గుర్తించడం ద్వారా మరియు విస్తరణతో కొనసాగడానికి ముందు YAML ఇన్పుట్ను ధృవీకరించడం ద్వారా ఈ నిర్దిష్ట సమస్యను పరిష్కరించడానికి రూపొందించబడ్డాయి. ఉదాహరణకు, PowerShell స్క్రిప్ట్లో, ది దిగుమతి-మాడ్యూల్ కమాండ్ అవసరమైన అజూర్ ల్యాండింగ్ జోన్ (ALZ) మాడ్యూల్ను లోడ్ చేస్తుంది, అజూర్ యాక్సిలరేటర్ సందర్భంలో YAML డేటాతో పని చేయడానికి అనుకూల ఫంక్షన్లను అందిస్తుంది. ప్రక్రియ కోసం మీకు అవసరమైన సాధనాలు అందుబాటులో ఉన్నాయని మరియు ఉపయోగించడానికి సిద్ధంగా ఉన్నాయని ఇది నిర్ధారిస్తుంది. 🛠️
పవర్షెల్ స్క్రిప్ట్ యొక్క ప్రత్యేకమైన లక్షణాలలో ఒకటి ఉపయోగించడం యమ్ల్ నుండి మార్చండి. ఈ ఆదేశం దాని కంటెంట్ను నిర్మాణాత్మక వస్తువుగా మార్చడం ద్వారా YAML పార్సింగ్ ప్రక్రియను సులభతరం చేస్తుంది. వైఫల్యానికి కారణమయ్యే సూక్ష్మ లోపాలను గుర్తించడంలో ఇది ప్రత్యేకంగా ఉపయోగపడుతుంది. పార్సింగ్ విఫలమైతే, స్క్రిప్ట్ ఉపయోగించి లోపాన్ని లాగ్ చేస్తుంది అవుట్-ఫైల్ కమాండ్, భవిష్యత్తులో డీబగ్గింగ్ కోసం మొత్తం డయాగ్నస్టిక్ సమాచారం నిల్వ చేయబడిందని నిర్ధారిస్తుంది. ఈ పద్ధతి మీరు ఏమి తప్పు జరిగిందో ఊహించకుండా వదిలివేస్తుంది మరియు సమస్యలను త్వరగా వాటి మూలానికి తిరిగి కనుగొనవచ్చు.
పైథాన్ లిపిలో, ది yaml.safe_load YAML కంటెంట్ని సురక్షితంగా అన్వయించడంలో ఫంక్షన్ ప్రధాన పాత్ర పోషిస్తుంది. YAML ఫైల్లో ఏదైనా అసురక్షిత కోడ్ అమలును నివారించడం ద్వారా, పార్సింగ్ ప్రక్రియ సురక్షితంగా ఉందని నిర్ధారిస్తుంది. బహుళ సహకారుల ద్వారా YAML ఫైల్లు సవరించబడే సహకార పరిసరాలలో ఇది ప్రత్యేకంగా ఉపయోగపడుతుంది. అదనంగా, ది లాగింగ్.ఎర్రర్ కమాండ్ వివరణాత్మక దోష సందేశాలను సంగ్రహిస్తుంది మరియు వాటిని ఫైల్లో నిల్వ చేస్తుంది, సమస్యల యొక్క స్పష్టమైన రికార్డును నిర్వహించడానికి మీకు సహాయం చేస్తుంది. ఈ విధానం DevOpsలో ఉత్తమ అభ్యాసాన్ని ప్రతిబింబిస్తుంది: మెరుగైన పారదర్శకత మరియు ట్రబుల్షూటింగ్ కోసం ఎల్లప్పుడూ లాగ్లను నిర్వహించండి. 🔍
ఇంతలో, జావాస్క్రిప్ట్ స్క్రిప్ట్ జనాదరణ పొందిన వాటిని ఉపయోగించి క్లయింట్ వైపు పరిష్కారాన్ని అందిస్తుంది js-yaml లైబ్రరీ. ఈ లైబ్రరీ yaml.load YAML ఫైల్లను జావాస్క్రిప్ట్ ఆబ్జెక్ట్లలోకి అన్వయించడానికి ఫంక్షన్ ఉపయోగించబడుతుంది, ఇది విస్తరణ లాజిక్ కోసం వాటిని సులభంగా మార్చడానికి వీలు కల్పిస్తుంది. సంస్థ యొక్క CI/CD పైప్లైన్ కోసం YAML కాన్ఫిగరేషన్ను ధృవీకరించడం వాస్తవ ప్రపంచ ఉదాహరణ. ఫైల్ సరిగ్గా ఇండెంట్ చేయబడిన పంక్తులు లేదా తప్పుగా ఉంచబడిన వ్యాఖ్యలను కలిగి ఉంటే, స్క్రిప్ట్ లోపాన్ని కలిగిస్తుంది. ఈ పరిష్కారాలను మీ వర్క్ఫ్లోకి చేర్చడం ద్వారా, మీరు YAML పార్సింగ్ సమస్యలను సమర్థవంతంగా నిర్వహించవచ్చు, విలువైన సమయాన్ని ఆదా చేయవచ్చు మరియు నిరాశను తగ్గించవచ్చు. 🚀
Azure DevOps డిప్లాయ్మెంట్లలో YAML పార్సింగ్ లోపాలను నిర్వహించడం
అజూర్ యాక్సిలరేటర్ కోసం YAML ఇన్పుట్లను అన్వయించడానికి మరియు ధృవీకరించడానికి PowerShell-ఆధారిత పరిష్కారం
# Import required module for YAML parsing
Import-Module -Name ALZ
# Define the file paths for YAML configuration
$inputConfigFilePath = "C:\path\to\your\config.yaml"
$outputLogFile = "C:\path\to\logs\error-log.txt"
# Function to load and validate YAML
Function Validate-YAML {
Param (
[string]$FilePath
)
Try {
# Load YAML content
$yamlContent = Get-Content -Path $FilePath | ConvertFrom-Yaml
Write-Host "YAML file parsed successfully."
return $yamlContent
} Catch {
# Log error details for debugging
$_ | Out-File -FilePath $outputLogFile -Append
Write-Error "Error parsing YAML: $($_.Exception.Message)"
Exit 1
}
}
# Invoke the YAML validation function
$yamlData = Validate-YAML -FilePath $inputConfigFilePath
# Continue with Azure deployment logic using $yamlData
పైథాన్తో YAML సమస్యల యొక్క డైనమిక్ డీబగ్గింగ్
బలమైన YAML ధ్రువీకరణ మరియు దోష నిర్వహణ కోసం పైథాన్-ఆధారిత విధానం
import yaml
import os
import logging
# Configure logging
logging.basicConfig(filename='error_log.txt', level=logging.ERROR)
# Path to YAML configuration
yaml_file = "path/to/config.yaml"
# Function to validate YAML
def validate_yaml(file_path):
try:
with open(file_path, 'r') as f:
data = yaml.safe_load(f)
print("YAML file is valid.")
return data
except yaml.YAMLError as e:
logging.error(f"Error parsing YAML: {e}")
print("Error parsing YAML. Check error_log.txt for details.")
raise
# Run validation
if os.path.exists(yaml_file):
config_data = validate_yaml(yaml_file)
# Proceed with deployment logic using config_data
జావాస్క్రిప్ట్ సొల్యూషన్: క్లయింట్-సైడ్ YAML ధ్రువీకరణ
YAML పార్సింగ్ కోసం `js-yaml` లైబ్రరీని ఉపయోగించి JavaScript ఆధారిత విధానం
// Import js-yaml library
const yaml = require('js-yaml');
const fs = require('fs');
// Path to YAML configuration
const yamlFilePath = './config.yaml';
// Function to parse and validate YAML
function validateYAML(filePath) {
try {
const fileContents = fs.readFileSync(filePath, 'utf8');
const data = yaml.load(fileContents);
console.log('YAML file is valid.');
return data;
} catch (error) {
console.error('Error parsing YAML:', error.message);
return null;
}
}
// Execute validation
const config = validateYAML(yamlFilePath);
// Continue with deployment logic using config
ఫార్మాటింగ్ సవాళ్లపై దృష్టి సారించి YAML లోపాలను పరిష్కరించడం
YAML ఫార్మాటింగ్ సమస్యలు తరచుగా ఇండెంటేషన్ మరియు సరళతపై ఆధారపడటం వలన ఉత్పన్నమవుతాయి, ఇది తప్పుగా ఉన్న అక్షరం లేదా అనాలోచిత వైట్స్పేస్తో తప్పుదారి పట్టించడం సులభం చేస్తుంది. Azure DevOpsలో, "ప్లెయిన్ స్కేలార్ను స్కాన్ చేస్తున్నప్పుడు" వంటి అన్వయ దోషాలు తరచుగా సంభవిస్తాయి, ఎందుకంటే YAML పార్సర్ అస్పష్టమైన ఇన్పుట్ను అర్థం చేసుకోవడానికి కష్టపడుతుంది, ఉదాహరణకు ప్రక్కనే ఉన్న స్కేలర్లలో ఊహించని వ్యాఖ్య. ఇది YAML సింటాక్స్ నియమాలకు కట్టుబడి ఉండటం యొక్క ప్రాముఖ్యతను హైలైట్ చేస్తుంది, ఇక్కడ చిన్న లోపం కూడా విస్తరణ వర్క్ఫ్లోలకు అంతరాయం కలిగిస్తుంది. వాస్తవ-ప్రపంచ దృష్టాంతంలో బహుళ-ప్రాంత అజూర్ యాక్సిలరేటర్లను కాన్ఫిగర్ చేయడం ఉండవచ్చు, ఇక్కడ YAML ఫైల్లు క్లిష్టమైన విస్తరణ సెట్టింగ్లను నిర్వహిస్తాయి మరియు ఏదైనా పొరపాటు పైప్లైన్ వైఫల్యాలకు దారితీయవచ్చు. 🛠️
YAML నిర్వహణ యొక్క ఒక విస్మరించబడిన అంశం వివిధ YAML పార్సర్లలో అనుకూలతను నిర్ధారించడం. అన్ని పార్సర్లు అంచు కేసులను ఒకే విధంగా నిర్వహించవు, కాబట్టి వంటి సాధనాలను ఉపయోగిస్తాయి YAML లింట్ ఫైల్ నిర్మాణాన్ని ముందుగా ధృవీకరించడం చాలా కీలకం. అయినప్పటికీ, అటువంటి సాధనాలు ఎల్లప్పుడూ ఊహించని క్రమంలో నిర్వచించబడిన ఫీల్డ్లు లేదా అసంపూర్ణ స్కేలర్ల వంటి లాజికల్ ఎర్రర్లను క్యాచ్ చేయలేవు, ఇవి ఇప్పటికీ విస్తరణ సమయంలో సమస్యలను కలిగిస్తాయి. మాన్యువల్ చెక్లతో పాటు ఆటోమేటెడ్ ధ్రువీకరణ స్క్రిప్ట్లను అమలు చేయడం విలువైన సమయాన్ని ఆదా చేస్తుంది మరియు నిరాశపరిచే లోపాలను నివారించవచ్చు. స్కేల్ చేయాల్సిన డైనమిక్ DevOps పైప్లైన్లతో పని చేస్తున్నప్పుడు ఈ విధానం చాలా కీలకం. 💡
మరొక ప్రభావవంతమైన వ్యూహం ఏమిటంటే, పెద్ద ఫైల్లను చిన్న, మరింత నిర్వహించదగిన విభాగాలుగా విభజించడం ద్వారా YAML కాన్ఫిగరేషన్లను మాడ్యులరైజ్ చేయడం. ఉదాహరణకు, ఎన్విరాన్మెంట్లు, సబ్స్క్రిప్షన్లు మరియు పాలసీల కోసం కాన్ఫిగరేషన్లను విభిన్న YAML ఫైల్లుగా విభజించడం వల్ల మానవ తప్పిదాల సంభావ్యతను తగ్గిస్తుంది మరియు డీబగ్గింగ్ను సులభతరం చేస్తుంది. అదనంగా, వంటి సాధనాలను ఉపయోగించడం js-yaml లేదా పైథాన్ yaml.safe_load కాన్ఫిగరేషన్లు అవసరమైన ప్రమాణాలకు కట్టుబడి ఉన్నాయని నిర్ధారిస్తూ, పార్సింగ్ సమయంలో మెరుగైన ధ్రువీకరణను అందించవచ్చు. ఈ అభ్యాసం ఖచ్చితత్వాన్ని మెరుగుపరచడమే కాకుండా YAML నిర్వహణను మరింత స్కేలబుల్ మరియు సమర్థవంతంగా చేస్తుంది. 🚀
Azure DevOpsలో YAML పార్సింగ్ గురించి సాధారణ ప్రశ్నలు
- "సాదా స్కేలార్ని స్కాన్ చేస్తున్నప్పుడు" ఎర్రర్కు కారణమేమిటి?
- మీ YAML ఫైల్లో అనుకోకుండా వ్యాఖ్య, ఖాళీ స్థలం లేదా తప్పుగా అమర్చబడినప్పుడు ఈ లోపం సాధారణంగా సంభవిస్తుంది. వంటి సాధనాలను ఉపయోగించడం yaml.safe_load సమస్యను గుర్తించడంలో సహాయపడుతుంది.
- విస్తరణకు ముందు నేను నా YAML ఫైల్ని ఎలా ధృవీకరించగలను?
- వంటి ఆన్లైన్ సాధనాలను ఉపయోగించండి YAML lint లేదా పైథాన్స్ వంటి లైబ్రరీలు yaml మీ YAML కాన్ఫిగరేషన్ ఫైల్లను ధృవీకరించడానికి మాడ్యూల్.
- PowerShellలో YAML పార్సింగ్ లోపాలను డీబగ్ చేయడానికి ఉత్తమ మార్గం ఏమిటి?
- వంటి ఆదేశాలను ఉపయోగించే స్క్రిప్ట్లను అమలు చేయండి ConvertFrom-Yaml మరియు ఉపయోగించి లోపాలను లాగ్ చేయండి Out-File వివరణాత్మక రోగనిర్ధారణ కోసం.
- YAML కాన్ఫిగరేషన్లను విభజించడం వలన లోపాలను తగ్గించవచ్చా?
- అవును, పెద్ద YAML ఫైల్లను చిన్న, మాడ్యులర్ విభాగాలుగా విభజించడం వల్ల ధ్రువీకరణ మరియు డీబగ్గింగ్ రెండింటినీ సులభతరం చేస్తుంది, మానవ లోపాన్ని తగ్గిస్తుంది.
- YAML లింట్ సాధనాలు నా ఫైల్ చెల్లుబాటులో ఉందని ఎందుకు చెబుతున్నాయి, కానీ ఇప్పటికీ లోపాలు సంభవిస్తాయి?
- YAML లింట్ సాధనాలు ప్రాథమిక వాక్యనిర్మాణాన్ని ధృవీకరిస్తాయి కానీ తార్కిక అసమానతలు లేదా పార్సర్-నిర్దిష్ట ఫార్మాటింగ్ సమస్యలను కోల్పోవచ్చు. లింటింగ్ని స్క్రిప్ట్-ఆధారిత ధ్రువీకరణతో కలపడం మంచి విధానం.
YAML డీబగ్గింగ్ చిట్కాలను ముగించడం
Azure DevOpsలో YAML పార్సింగ్ లోపాలను పరిష్కరించడానికి జాగ్రత్తగా ధృవీకరణ మరియు బలమైన సాధనాలను ఉపయోగించడం అవసరం. PowerShell, Python లేదా JavaScriptలో స్క్రిప్ట్లను పెంచడం ద్వారా, డెవలపర్లు ఫార్మాటింగ్ సమస్యలను గుర్తించగలరు మరియు విస్తరణ అంతరాయాలను నిరోధించగలరు. 💡
అంతిమంగా, కాన్ఫిగరేషన్లను విభజించడం మరియు ధ్రువీకరణ లైబ్రరీలను ఉపయోగించడం వంటి ఉత్తమ పద్ధతులను అవలంబించడం వల్ల YAML నిర్వహణ సులభతరం మరియు మరింత సమర్థవంతంగా ఉంటుంది. ఈ దశలు సున్నితమైన విస్తరణలను నిర్ధారిస్తాయి, విలువైన సమయాన్ని ఆదా చేస్తాయి మరియు అభివృద్ధి పైప్లైన్లో నిరాశను తగ్గిస్తాయి. 😊
YAML ఎర్రర్లను పరిష్కరించేందుకు సూచనలు మరియు మూలాలు
- అధికారిక YAML డాక్యుమెంటేషన్ నుండి పొందిన YAML పార్సింగ్ మరియు ఉత్తమ అభ్యాసాల గురించిన సమాచారం. సందర్శించండి YAML స్పెసిఫికేషన్ .
- YAML ధ్రువీకరణ కోసం PowerShell ఆదేశాలను ఉపయోగించడం గురించిన వివరాలు Microsoft యొక్క అధికారిక PowerShell డాక్యుమెంటేషన్ ఆధారంగా ఉంటాయి. సూచించండి పవర్షెల్ డాక్యుమెంటేషన్ .
- పైథాన్ యొక్క YAML పార్సింగ్ సొల్యూషన్స్ ద్వారా తెలియజేయబడింది PyYAML లైబ్రరీ డాక్యుమెంటేషన్ .
- జావాస్క్రిప్ట్ కోసం js-yaml లైబ్రరీని ఉపయోగించడం గురించి అంతర్దృష్టులు దీని నుండి తీసుకోబడ్డాయి js-yaml GitHub రిపోజిటరీ .
- Azure DevOps YAML పైప్లైన్ల కోసం సాధారణ మార్గదర్శకాలు దీని నుండి సూచించబడ్డాయి Azure DevOps YAML స్కీమా డాక్యుమెంటేషన్ .