จากช่วงปลายที่ 2020 ที่ผ่านมาทุกคนคงจะกลับบ้าน หรืออยู่บ้านปลอดเชื้อกันนะครับ ส่วนผมแก้ Code ข้ามปีครับ สำหรับการย้าย Code จาก SVN ไป GIT ใน Project .NET ครับ โดยมีข้อที่ต้องสังเกตุ ดังนี้
- Requirement ของการย้าย Code ตอนนี้ยังเป็น Parallel อยู่ครับ
- Build ของปี 2021 เป็นต้นไป อันนี้ใช้ Code จาก GIT เลยครับ
- แต่ถ้าเป็นงาน MA ที่ลูกค้ายังใช้งานเวอร์ชันเก่าๆ อย่างปี 2018 อันนี้ยังคงใช้งาน SVN เพื่อดึง Code มาตรวจสอบเคส และทำ Hot Fixed ครับ ถ้าจำเป็น
- ทำความสะอาด Repo บน SVN ใช้เรียบร้อยก่อน
- Project/Code เก่าๆ ตำนานที่เป็นอดีต และไม่ถูกเรียกใช้งาน เอามันออกไปซะ จะได้ไม่ลำบากกับคนรุ่นหลังครับ แถมตอน Build จะได้ไปเปลืองเนื้อที่ด้วยครับ
- ไฟล์ .exe .dll เอาออกเถอะครับ ย้ายมันไประบบ Dependency managers จัดการเถอะครับ จุดประสงค์ของ Git/SVN เก็บอะไรที่มัน Diff ได้ พอเอาไฟล์พวกนี้เข้าไปตัว Log มันจะโตเกินไปครับ สำหรับ Dependency managers
- .NET เป็นตัว NuGet ครับ และโปรแกรม NuGet Package Explorer ที่ช่วยจัดการ Pack ไฟล์ .exe / .dll เพื่อขึ้น Server คร้บ ซึ่งตัว Server ที่ผมใช้จัดเก็บ NuGet คือ Nexus ครับ
- เนื่องจากงานผมยังไม่มีส่วนของ Front-End เพราะ แยก Repo ไว้บน Git ตั้งแต่แรกเลยไม่มีคำแนะนำนะครับ
- ไฟล์เอกสาร Word / Excel / Crystal Report ที่เป็น Template ต่างๆ อันนี้ผมปล่อยไว้ใน SVN อยู่ครับ แต่มองตัว Document Management อย่าง Alfresco เข้ามาช่วยจัดการต่อไปครับ
- รูปแบบการย้าย Code เอา Log หรือ ป่าว
- ไม่เอา Log อันนี้ง่ายเลยครับ Get Code จาก SVN มาในคอมเรา แล้ว Clean ให้สะอาด จากนั้นก็ Commit และ Push ขึ้นไปครับ
- เอา Log อันนี้ต้องเตรียม Script เพื่อย้ายครับ เดวถ้าลองไปหลายๆ Project จนนิ่งแล้ว ผมจะเอามาแชร์อีกทีครับ
- สำหรับผมเอา Log และย้ายมาเฉพาะใน Trunk ของ SVN เท่านั้นครับ
- หลังจากย้ายเสร็จแล้ว ผลกระทบที่ตามเป็นพวก Script ที่ทำ Automate Build / Test ไว้ครับ อันนี้ต้องลงทุนปรับแก้ตามด้วยครับ เพราะ
- ตอนนี้ Project เราเป็นลูกครึ่งครับ ส่วนใหญ่อยู่บน Git และบางส่วนยังคงอยู่บน SVN
- แก้ไข Path ต่างๆในเครื่อง Build ครับ เนื่องจาก Path เดิมใช้สำหรับ SVN ครับ
- หลังจากนั้นปรับ Script Build ครับ และทดสอบครับ
ปัญหา และการปรับแก้ไข
- บน SVN เดิมตัว Build มีการนำเลข Revision มาแปะประกอบกับเลขเวอร์ชันด้วย แต่ใน GIT ไม่มี Revision แล้ว จะใช้งานอะไรแทน ?
- Plug-in Git ไม่รู้จักตัวแปรที่ส่งมาจาก Task อื่น
Started by user admin hudson.plugins.git.GitException: Command "git.exe fetch --tags --force --progress --prune -- origin +refs/heads/${BRANCH_ON_GIT}:refs/remotes/origin/${BRANCH_ON_GIT}" returned status code 128: stdout: stderr: fatal: Couldn't find remote ref refs/heads/${BRANCH_ON_GIT} at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2450) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:2051) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$500(CliGitAPIImpl.java:84) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:573) at jenkins.plugins.git.GitSCMFileSystem$BuilderImpl.build(GitSCMFileSystem.java:365) at jenkins.scm.api.SCMFileSystem.of(SCMFileSystem.java:197) at jenkins.scm.api.SCMFileSystem.of(SCMFileSystem.java:173) at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:115) at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:69) at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:309) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429) Finished: FAILURE
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.