[Jenkins] Pipeline เดิม พังหลังจาก Update Jenkins หา Source Code ที่ Get ออกมาไม่เจอ

อันนี้ 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.