แก้ปัญหา GitLab อาการผีหลอกก เช่น push branch หาย!! / Branch protection rule ไม่ทำงาน

คุณเคยเจอปัญหากันไหม แบบว่า GitLab อยู่ๆ มันเกิดอาการแปลกๆขึ้นมา เช่น

  • push code ขึ้นไปแล้ว ชื่อ branch ขึ้น แต่พอเข้าหน้าเว็บของ GitLab เอง มันขึ้น 404 แล้วถ้าไปให้ CI อย่างพวก Jenkins ทำต่อมันจะฟ้อง branch หาย
  • push code ขึ้นไปแล้ว branch ไม่ขึ้น เมื่อเราไปดูจากหน้าเว็บ แต่ถ้ารอไปสัก 2-3 ชั่วโมง branch โผล่มาครับ
  • เปิด Merge Request ที่ไว้ แล้วปรากฏว่า เวลามี discussion แก้ไข แล้ว push ไปแล้ว code ส่วนนั้นไม่มา หรือ ถ้าฝืน Merge เข้าไป จะพบว่า Code ใหม่ที่เพิ่มเข้าไปหายจริง
  • แต่ละ Branch เราตั้ง protection rule เอาไว้ แบบไม่ให้ maintainer / develop push ตรงเข้า branch develop หรือ main แต่ซ้ำร้าย มันทำได้ซะงั้น

ทำไมหละ

  • GitLab ข้อมูลเดิมๆเลยนะ แค่เอามาตั้งใหม่ แล้วปรากฏว่า มันทำงานไม่เหมือนเดิม มันผิดที่อะไร docker compose ชุดเดิมๆ นี่น่าาาาาาาา
  • อาการมันเหมือน Cache มันไม่รู้จักของใหม่ แล้วพารวน - รวนแบบว่า
    ⚠️ Push Branch ใหม่ขึ้นมา แล้วกว่าระบบจะรับรู้ว่ามี Branch ใหม่รอไปครึ่งวัน หรือ
    ⚠️ Branch Protection Rule พังหมด ไม่ทำงาน แบบ Commit Push ได้ไม่สนใจ กฏเลย

ตั้งใหม่ แต่ Config เดิมไม่น่าจะใช่แล้ว

ต้องมีการสืบสวนน

  • ถามน้องที่ตั้ง VM CentOS พบว่ามีการ Hardening และหลังจากหาข้อมูลเพิ่มมาเจอ Issue ที่น่าสนใจอันนึงครับ ถ้ามี noexec flag ที่ Folder Git Data มันจะทำให้ Git มันไม่รับรู้ข้อมูลใหม่ที่ใส่เข้าไป
    Ref: https://docs.gitlab.com/ee/user/project/merge_requests/merge_request_troubleshooting.html#error-source-branch-branch_name-does-not-exist-when-the-branch-exists
  • ลองทำตาม KB ของ GitLab เลยครับ ใช้ Command ที่เค้าแนะนำเลย ที่ไม่เคยเข้า GitLab Console ได้เข้าสักที 5555 แล้วปรากฏว่ามันอาการหายเป็นปลิดทิ้ง

เลยลองไปถามน้องที่ทำ VM ดู ปรากฏว่า Path ที่ mount git data ไว้ มีการกำหนด noexec ไว้ด้วยครับ ก็เลยประชุม ตกลงกัน

  • เอา noexec ออกจากทั้ง docker compose (ถ้ามี)
  • เอา noexec ออกจาก path ของ host 🎯เคสนี้เจอที่ Host กำหนดไว้
  • ลอง restart vm
  • ลองทดสอบเคสที่เป็นปัญหาข้างต้น เห้ย มันทำงานได้ปกติแล้วครัล

จากปัญหานี้ เรียกว่าได้เข้าไป Discover อะไรข้างใน Gitlab มันเยอะมาก มันซ่อนของไว้เยอะ ทั้ง nginx PostgreSQL Sidekiq พอมันมัดรวมเป็นก้อนก็สะดวกดีครับ แต่เวลามีปัญหา ถ้าเข้าใจสถาปัตยกรรมข้างในของมันจะช่วยให้ Debug ได้ ง่ายกว่านะ

Ref: https://k21academy.com/devops-job-bootcamp/gitlab-a-complete-overview/

ถ้าสนใจการ Debug ปัญหา มีคนทำ GitLab Page ไว้แล้ว https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/administration/pages/troubleshooting.md

เท่าที่อ่านปัญหา noexec นอกจาก gitlab data path แล้ว ตัว path tmp ก็ด้วยครับ

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.