मैं विभिन्न मशीनों को कई पॉवरशेल स्क्रिप्ट वितरित कर रहा हूं और यह सुनिश्चित करना चाहता हूं कि यह निष्पादन योग्य है और हमारे वितरण प्रणाली में नया संस्करण अपलोड करने से पहले इसमें कोई त्रुटि नहीं है।

मैं इसे Gitlab .gitlab-ci.yml के साथ कैसे हल कर सकता हूं?

0
Tino Hager 12 फरवरी 2021, 22:43

2 जवाब

सबसे बढ़िया उत्तर

मुझे अपनी समस्या का समाधान मिल गया है। निर्माण प्रक्रिया में यह चरण पॉवर्सशेल स्क्रिप्ट की जाँच करता है और यदि कोई त्रुटि है तो बिल्ड को रोक देता है।

gitlab-ci.yml

stages:
  - validate

validate_script:
  stage: validate
  image:
    name: "mcr.microsoft.com/powershell:ubuntu-20.04"
  script:
    - pwsh -File validate.ps1
  tags:
  - docker

validate.ps1

Write-Host "Install PSScriptAnalyzer"
Install-Module PSScriptAnalyzer -Scope CurrentUser -Confirm:$False -Force

Write-Host "Check mypowershell.ps1"
$result = Invoke-ScriptAnalyzer -Path 'src/mypowershell.ps1'
if ($result.Length -gt 0) {
    Write-Host "Script Error"
    Write-Host ($result | Format-Table | Out-String)
    exit 1;
}
1
Tino Hager 13 फरवरी 2021, 01:41

सुनिश्चित नहीं है कि यह वही है जिसे आप ढूंढ रहे हैं या यदि यह .yml फ़ाइलों पर बिल्कुल लागू होता है क्योंकि मैं उनसे परिचित नहीं हूं, लेकिन पावरहेल स्क्रिप्ट फ़ाइलों के लिए आप [स्क्रिप्टब्लॉक] के निर्माण का उपयोग सिंटैक्स और अन्य संकलन की जांच के लिए कर सकते हैं त्रुटियाँ। आप इस कोड के साथ एक फ़ंक्शन बना सकते हैं और इसमें पावरहेल स्क्रिप्ट फ़ाइलों को पास कर सकते हैं जो कोड ले सकते हैं, इसे संकलित करने का प्रयास कर सकते हैं, और किसी भी अपवाद का सामना कर सकते हैं।

# $code = Get-Content -Raw $file  
$code = @"
 while {
    write-host "no condition set on while "
 }
 do {
    Write-Host "no condition set on unitl "
 } until ()
"@

try {
    [ScriptBlock]::Create($code)
}
catch {
    $_.Exception.innerexception.errors
}

उत्पादन

Extent ErrorId                            Message                                    IncompleteInput
------ -------                            -------                                    ---------------
       MissingOpenParenthesisAfterKeyword Missing opening '(' after keyword 'while'.           False
       MissingExpressionAfterKeyword      Missing expression after 'until' in loop.            False

मैं स्क्रिप्ट के परीक्षण के लिए पेस्टर देखने की भी सलाह देता हूं। यदि आप अपरिचित हैं तो यह पॉवर्सशेल कोड के लिए एक परीक्षण और नकली ढांचा है

1
Daniel 13 फरवरी 2021, 00:13