Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

์šฐ๋ฆฌ๋Š” Windows ๋ฐ ๊ธฐํƒ€ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์ธ Azure DevOps์— ๋Œ€ํ•œ ๊ฒ€ํ† ๋ฅผ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ธํ•ด ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ๊ทธ ๋ชจ๋“  ๊ฒฝํ—˜์„ ํ•œ ๊ธ€์— ๋‹ด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ๋ฌธ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•œ ๋‹จ๊ณ„์—์„œ ๋‹ค๋ฅธ ๋‹จ๊ณ„๋กœ ๋ณ€์ˆ˜๋ฅผ ์ „์†กํ•˜๋Š” ํ‘œ์ค€ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

YAML์ด ์•„์ง ๋ฆด๋ฆฌ์Šค ํŒŒ์ดํ”„๋ผ์ธ์— ๋„๋‹ฌํ•˜์ง€ ์•Š์•˜๊ณ  ๋งŽ์€ ๋‹จ๊ณ„์™€ ๋งŽ์€ ์•„ํ‹ฐํŒฉํŠธ์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์š” ์˜ˆ์ œ๋Š” ๋ฆด๋ฆฌ์Šค ํŒŒ์ดํ”„๋ผ์ธ์— ์žˆ๋„๋ก ์˜ˆ์•ฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ๊ธฐ๋Šฅ๋ฉด์—์„œ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Pipelines YAML์—์„œ๋Š” ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋œ ํ…์ŠคํŠธ ํ‘œํ˜„์— ์ž‘์€ ๊ทธ๋ž˜ํ”ฝ ๋„๊ตฌ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ๊ฒ€ํ† ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ๊ธฐ์‚ฌ์—์„œ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ ์ง€๊ธˆ์€ ํ˜์‹  ์ž์ฒด์— ๋Œ€ํ•œ ๊ทธ๋ฆผ์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

๋ณด๊ด€ ๋ฐ ์‚ฌ์šฉ

์‹œ์Šคํ…œ์— ๊ธฐ๋ณธ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ถœ์ฒ˜์— ๋”ฐ๋ผ ๋ฆด๋ฆฌ์Šค(Release), ์‹œ์Šคํ…œ(System) ๋“ฑ์˜ ๋‹จ์–ด๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๋ชฉ๋ก(์•Œ๊ณ ๋ณด๋‹ˆ ๊ทธ๋ ‡์ง€ ์•Š์Œ)์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜. ๊ตฌ๋ฌธ์ด ํฌํ•จ๋œ ๋ชจ๋“  ์ •์‹ ๋ถ„์—ด์ฆ์€ ์•„๋ž˜ ๋ฌธ์„œ์˜ ์˜ˆ๋ฅผ ํ†ตํ•ด ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ณ€์ˆ˜๋Š” ํ˜ธ์ถœ ์œ„์น˜์— ๋”ฐ๋ผ ์„ธ ๊ฐ€์ง€ ํ‘œํ˜„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

steps:
 - bash: echo This script could use $SYSTEM_ACCESSTOKEN
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
  - powershell: Write-Host "This is a script that could use $env:SYSTEM_ACCESSTOKEN"
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)

์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ์—์ด์ „ํŠธ์— ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด $(System.AccessToken)์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ์—์ด์ „ํŠธ์˜ powershell ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ $env:SYSTEM_ACCESSTOKEN์ž…๋‹ˆ๋‹ค. ์‹ ์ด์‹œ์—ฌ, ๋Œ€์ƒ ๋จธ์‹  ์ž‘์—…์—์„œ PowerShell์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์—์„œ ์ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด๋ฅผ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฝํŠธ์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋ˆ. Bash๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. $SYSTEM_ACCESSTOKEN ์ธ์ˆ˜์™€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€์— ๊ฐ„๋‹จํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฒ•์น™์ด ์ž์‹ ์˜ ๋ณ€์ˆ˜์— ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ด๋ฏธ ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ๊ฐ ์ž‘์—…์—์„œ ๋กœ์ปฌ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

๋˜๋Š” ์ „์—ญ์ ์œผ๋กœ ๋ณ€์ˆ˜ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ ์ €์žฅ์†Œ์—์„œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ํŽธ์•ˆํ•ฉ๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

๋ณด๋„ˆ์Šค๋กœ ๋ณ€์ˆ˜๊ฐ€ ๋งค์šฐ ๋น„๋ฐ€์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ Azure ํด๋ผ์šฐ๋“œ์˜ Azure Vault๋ผ๋Š” ์ €์žฅ์†Œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Vault๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์—์„œ๋Š” ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฆด๋ฆฌ์Šค์—๋Š” ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ์ดˆ๊ธฐํ™” ๋กœ๊ทธ์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „์†ก ์ค‘์ธ ๋‚ด์šฉ์„ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฏธ ๋ณ€ํ™˜๋œ ํ˜•์‹์œผ๋กœ ์กด์žฌํ•œ๋‹ค๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์„ธ์š”.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

๋™์  ๋ณ€์ˆ˜

์žฌ๋ฏธ๋Š” ํ•œ ๋‹จ๊ณ„์—์„œ ์–ด๋–ค ๊ฐ€์น˜๋ฅผ ๋ฐ›๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต๋ฐ›์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ์†์€ ์ง€๋ฃจํ•˜์ง€ ์•Š์œผ๋ฉฐ Google์˜ ๋„์›€์œผ๋กœ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•˜๊ฒŒ๋„ Azure DevOps์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ํ‘œ์‹œ๋œ ๊ฒƒ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด์—์„œ ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ํ˜ธ์ถœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์†Œ๋Š” ์•ž์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์„ค๋ช…์„œ์— ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๊ฒƒ๊ณผ ๋™์ผํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ƒ์ ์ด ๋ฌธ์„ ๋‹ซ์„ ๊ฒฝ์šฐ ํ•˜๋“œ์ฝ”๋”ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )

์ „์†กํ•˜๋ ค๋Š” ๋ณ€์ˆ˜์˜ ๋นˆ ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ๋ฒ”์œ„ - ๋ฆด๋ฆฌ์Šค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž„์˜์˜ ๊ฐ’ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„ ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ตฌ๋ฌธ์— ์ฃผ์˜ํ•˜์„ธ์š”. ์ด ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ๋ณ€์ˆ˜๋ฅผ ์Šคํฌ๋ฆฝํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์˜ˆ, ์ง์ ‘์ ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

์Šคํฌ์ผ๋Ÿฌ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ

PowerShell์„

#Script requires stageVar variable in release variables set to Release scope

param ( [string] $expVar )
#region variables
$ReleaseVariableName = 'StageVar'
$releaseurl = ('{0}{1}/_apis/release/releases/{2}?api-version=5.0' -f $($env:SYSTEM_TEAMFOUNDATIONSERVERURI), $($env:SYSTEM_TEAMPROJECTID), $($env:RELEASE_RELEASEID)  )
#endregion


#region Get Release Definition
Write-Host "URL: $releaseurl"
$Release = Invoke-RestMethod -Uri $releaseurl -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
#endregion

#region Output current Release Pipeline
Write-Output ('Release Pipeline variables output: {0}' -f $($Release.variables | ConvertTo-Json -Depth 10))
#endregion


#region Update StageVar with new value
$release.variables.($ReleaseVariableName).value = "$expVar"
#endregion

#region update release pipeline
Write-Output ('Updating Release Definition')
$json = @($release) | ConvertTo-Json -Depth 99
Invoke-RestMethod -Uri $releaseurl -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
#endregion

#region Get updated Release Definition
Write-Output ('Get updated Release Definition')
Write-Host "URL: $releaseurl"
$Release = Invoke-RestMethod -Uri $releaseurl -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
#endregion

#region Output Updated Release Pipeline
Write-Output ('Updated Release Pipeline variables output: {0}' -f $($Release.variables | ConvertTo-Json -Depth 10))
#endregion

๋˜๋Š”

๊ฐ•ํƒ€

INPUT_VAR=$1
RELEASE_VAR=$2

echo Test ID: ${INPUT_VAR}

RELEASE_URL="${SYSTEM_TEAMFOUNDATIONSERVERURI}${SYSTEM_TEAMPROJECTID}/_apis/release/releases/${RELEASE_RELEASEID}?api-version=5.0"

echo release url: $RELEASE_URL

RELEASE_JSON=$(curl -H "Authorization: Bearer $SYSTEM_ACCESSTOKEN" $RELEASE_URL)

OUTPUT=`jq ''.variables.${RELEASE_VAR}.value' = '"${INPUT_VAR}"'' <<< $RELEASE_JSON`

curl -H "Authorization: Bearer $SYSTEM_ACCESSTOKEN" -H "Content-Type: application/json" -X PUT -d "$OUTPUT" $RELEASE_URL

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์šฐ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ๋Š” myVar ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ stageVar์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ์‹œ์Šคํ…œ ๋ณ€์ˆ˜ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Azure DevOps ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

์˜ˆ์ œ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์€ ์ด์ „์— ์„ค๋ช…ํ•œ ๊ฒƒ ์™ธ์—๋„ ์šฐ๋ฆฌ์—๊ฒŒ ์ข‹์€ ๊ธฐํšŒ๋ฅผ ์—ด์–ด์ค๋‹ˆ๋‹ค. ์กฐ, ํ…Œ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ๊ทธ๊ฒƒ์„ ํŒŒ๊ดดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ๋Š” ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ๋งค๋ฒˆ ์ œํ’ˆ์˜ ์ž๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 10๋ถ„ ์ •๋„ ์‚ฐ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ํ•œ ํ‘ผ๋„ ์•ˆ ๋“ ๋‹ค.

ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ๊ธฐ์‚ฌ์—์„œ๋Š” YAML ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์—๋Š” ํฅ๋ฏธ๋กœ์šด ํ˜์‹ ์ด ๋งŽ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€