หลังจากทำมี Tools ที่ กำหนดค่าที่เดียว แต่สามารถใช้งานไปได้ทุก Application แล้ว (Universal Configuration) แต่ทำไมคนอื่นถึงไม่ค่อยใช้งานกัน เราก็ถึงบ้างอ้อทันที อ๋อขี้เกียจไปแก้ app.config หรือ web.config นั้นเอง ด้วยความที่ระบบมันมี Base 3 สำหรับลูกค้า 3 กลุ่ม แต่ใช้ Code ชุดเดียวกันนะครับ มันจึงต้องมีการเตรียมค่าตั้งต้นกันก่อนนั้นเองครับ อาทิ เช่น
- Base AMC / INS ตัว Application อ่านค่าจาก HKEY_LOCALMACHINE
- Base TSY ตัว Application อ่านค่าจาก HKEY_LOCALUSER
เนื่องจากทีม Implement ขี้เกียจแก้ แต่ก็ไม่ได้บอกนะ 5555 ผมเลยทำให้มันเสร็จไปจากเครื่องบิ้ว Jenkins เลยดีกว่าครับ แต่มันจะมี 2 ประเด็น
- แก้ไขไฟล์ app.config หรือ web.config อย่างไร
- เอาไปใช้งานใน Jenkins Pipeline ได้อย่างไร
กลับมาประเด็นแรกก่อน "แก้ไขไฟล์ app.config หรือ web.config อย่างไร" อันนี้ผมมีทางออกแล้วครับใช้พลังหอย หมีบๆ PowerShell ของ Microsoft ครับ เพราะ เขียนง่าย อ่านสะดวก แถมใช้เรียกใช้ Library ของ .NET Framework ได้ด้วยครับ ลองมาดู Code ที่เขียนกันเลยครับ (ไฟล์ REPLACE_APPCONFIG.ps1)
Set-ExecutionPolicy Unrestricted
$FILEPATH = $args[0]
$REPLACEKEY = $args[1]
$REPLACEVALUE = $args[2]
Function ReplaceAppConfig($pFilePath, $pKey, $pValue)
{
# Read XML
$doc = [Xml](Get-Content $pFilePath)
#$obj = $doc.configuration.appSettings.add | where {$_.Key -eq $pKey }
#$obj.value = $pValue
$doc.configuration.appSettings.add | foreach { if ($_.key -eq $pKey) { $_.value = $pValue } }
$doc.Save($pFilePath)
}
ReplaceAppConfig $FILEPATH $REPLACEKEY $REPLACEVALUE
สำหรับการเรียกใช้งานก็ง่ายครับ เพราะ ไฟล์ REPLACE_APPCONFIG.ps1 มี 3 Parameter ได้แก่
- Path ของ app.config หรือ web.config
- Key ที่ต้องใช้หา เช่น WriteToLocalMachine
- Value ค่าที่ต้องการเปลี่ยน เช่น true
ประเด็นถัดมา "เอาไปใช้งานใน Jenkins Pipeline ได้อย่างไร" ใช้งานได้ง่ายครับ เพราะ Plugin Powershell ของ Jenkins นั้น Support Pipeline แล้วครับ เพียงแค่ประกาศส่วนของ Powershell และเรียกใช้งานครับ ตามตัวอย่างเลย
...
stage('Build#1-32 Bits'){
steps {
...
}
}
stage('Build#2-64 Bits'){
steps {
...
}
}
stage('Finallize For Each Base'){
//ตรวจสอบถ่้า DIRECTIVE เป็น AMC หรือ INS ค่อยทำ Step ถัดไป
when {
expression { params.DIRECTIVE == 'AMC' || params.DIRECTIVE == 'INS' }
}
steps {
echo '===> Update BUC for AMC/INS ....'
//ส่งค่าตัวแปร จาก Pipeline ($params.BASEOUTPUT) ไปยัง PowerShell (APPCONFIGPATH)
withEnv(["APPCONFIGPATH=$params.BASEOUTPUT"]) {
//ประกาศตัวแปร และเรียกใช้งาน
powershell(script: '''
$APPBUCFILEPATH = "$env:APPCONFIGPATH\\Buc\\invs.Incubator.Configuration.UI.exe.config"
$REPLACEKEY = "WriteToLocalMachine"
$REPLACEVALUE = "true"
D:\\06Utility\\01BuildScript\\INVS-APP\\REPLACE_APPCONFIG.ps1 $APPBUCFILEPATH $REPLACEKEY $REPLACEVALUE
''')
}
echo '===> Update BUC for AMC/INS ....'
}
}
เผื่อใครอยากศึกษาเพิ่มเติม
- เรื่อง PowerShell ดูได้จาก Tag PowerShell ครับ
- เรื่อง Jenkins ตามที่ Tag Jenkins ครับ
- เรื่อง Registry https://learn.microsoft.com/en-us/troubleshoot/windows-server/performance/windows-registry-advanced-users
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.



