หลังจากทำมี 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\\Wmsl.Incubator.Configuration.UI.exe.config" $REPLACEKEY = "WriteToLocalMachine" $REPLACEVALUE = "true" D:\\06Utility\\01BuildScript\\WMSL-APP\\REPLACE_APPCONFIG.ps1 $APPBUCFILEPATH $REPLACEKEY $REPLACEVALUE ''') } echo '===> Update BUC for AMC/INS ....' } }
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.