อันนี้ Blog ต่อเนื่องจากปัญหา Jenkins กับ Tomcat ครับ คราวนี้มาลอง Build กันครับ ซึ่งเมื่อ Build ไปแล้วเนี่ย เจอว่า MSBUILD : error MSB1009
C:\Users\scm\.jenkins\workspace\INVEST_WEBAPI>dotnet restore C:\Users\scm\.jenkins\workspace\INVEST_WEBAPI\InvestWebAPI.sln -s https://api.nuget.org/v3/index.json;http://dev.local:8081/repository/nuget-hosted/;http://dev-dr.local:8081/repository/nuget-hosted/ --ignore-failed-sources MSBUILD : error MSB1009: Project file does not exist.
แต่พอลองไปดูที่ Path Workspace C:\Users\invest.jenkins\workspace\INVEST_WEBAPI
แล้วลองเลื่อนไปดูที่ Log ตอนที่ Get Code
Checking out git ${BASE_GIT_URL}/invest/webapi.git into C:\Users\scm\.jenkins\workspace\INVEST_WEBAPI@script\4028fa56e8ddb89266f945c01efadfcea37e3e785480b11f0d63bb80ac25d471 to read ds.Invest.WebApi\JenkinsfileWin The recommended git tool is: NONE using credential git-jenkins > git.exe rev-parse --resolve-git-dir C:\Users\scm\.jenkins\workspace\INVEST_WEBAPI@script\4028fa56e8ddb89266f945c01efadfcea37e3e785480b11f0d63bb80ac25d471\.git # timeout=10 Fetching changes from the remote Git repository > git.exe config remote.origin.url http://dev.local/invest/webapi.git # timeout=10 Fetching upstream changes from http://dev.local/invest/webapi.git > git.exe --version # timeout=10 > git --version # 'git version 2.37.2.windows.2' using GIT_ASKPASS to set credentials git-jenkins > git.exe fetch --tags --force --progress -- http://dev.local/invest/webapi.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > git.exe rev-parse "origin/release8.7.32_jebnkinfilewin11^{commit}" # timeout=10 Checking out Revision 0820e69bc91735a1a756a2f2165684ca94b0595d (origin/release8.7.32_jebnkinfilewin11) > git.exe config core.sparsecheckout # timeout=10 > git.exe checkout -f 0820e69bc91735a1a756a2f2165684ca94b0595d # timeout=10 Commit message: "reproduce case" > git.exe rev-list --no-walk 4875019c6c8c6322983d97a07ec0f4c52ed682fc # timeout=10
นั้นแหละครับ Jenkins มันเปลี่ยน Path ตอน Get Code ลงมาครับ C:\Users\scm\.jenkins\workspace\INVEST_WEBAPI@script\4028fa56e8ddb89266f945c01efadfcea37e3e785480b11f0d63bb80ac25d471 เหมือนจะเพิ่ม @Script + Hash ต่อท้ายลงมา ทำให้ pipeline เดิมที่เชื่อ Get ที่กำหนดไว้ใน Job ใช้งานไม่ได้ครับ
Root Cause
- หลังจากลองหาดูว่าทำไมถึงมีการปรับเปลี่ยน พบว่าเป็นการแก้ Jenkins Security Advisory 2022-02-15
- ถ้าเป็นการแก้เรือง Security เราคงต้องมาปรับ JenkinsFile แทนครับ ^__^
Modified JenkinsFile Pipeline
- แก้ไขตัว Pipeline โดยการเพิ่ม Step Checkout ออกมาจากที่ Workspace ที่ Jenkins มันทำงาน
- ส่วน Job ก็กำหนดเป็นแบบ Lightweight checkout แทน เพื่อที่มันจะได้ดึง JenkinFile มาใส่ ตรง Workspace@Script + Hash พอ จะได้ประหยัดพื้นที่
NOTE: วิธีการนี้ใช้ได้ ถ้า Job กำหนด Path เป็น String แต่ถ้าเอาตัวแปรไปต่อกันจะใช้งานไม่ได้ครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.