gitlab webhook auto deploy

Reference http://www.kernelops.com/gitlab-post-receive-webhook/

  1. นำ php script จากเว็บข้างบน หรือจาก ที่นี่ มาสร้างเป็นไฟล์ชื่อ webhook.php เพื่อจะนำไปใส่เป็น URL ของ webhook โดยหลังจาก push เสร็จ git จะ POST ค่าการ commit ไปที่ URL webhook นั้น โดยค่า POST จะส่งมาด้วยตัวแปร $HTTP_RAW_POST_DATA
  2. แก้ไขตัวแปร $wd เป็น path ที่จะให้ auto-deploy ขึ้นไป ซึ่งใน path นั้นจะต้องเป็น git repo เดียวกันกับ gitlab project repo ที่จะทำ webhook push event
  3. อาจจะต้องแก้ php script ไขบรรทัด 39 กรณีต้องการให้ auto-deploy เป็นบาง branch โดยใช้ตัวแปร $branch ซึ่งจะถอดมาได้เป็นเช่น master,dev เป็นต้น
  4. โดยถ้ามี error บางอย่างจะถูกเขียนลงไฟล์ hook.log

ปัญหาที่พบผมหลายอย่างมีดังนี้

  1. php script ไม่สามารถใช้คำสั่ง git pull โดยได้รับ error ดังนี้
    error: cannot open .git/FETCH_HEAD: Permission denied

    วิธีแก้ให้ APACHE เป็นเจ้าของไฟล์ .git/* ทั้งหมด เนื่องจากถ้าเรา clone repo path auto-deploy มาด้วย user อื่นที่ไม่ใช่ APACHE เช่น root เป็นต้น โดยแก้ใช้คำสั่งนี้

    chown -R your_apache_user:your_apache_user .git/*
  2. จากข้อ 1 APACHE สามารถ pull ได้แล้ว แต่ไฟล์ไม่สามารถเขียน(pull)ลงมาที่ path-auto-deploy ได้ โดยพบ error ประมาณว่า
    can't write file Permission denied

    ปัญหานี้เนื่องจาก โฟลเดอของ path-auto-deploy owner หรือไม่มีสิทธิ์การเขียนไฟล์ ให้ทำดังนี้
    2.1 เปลี่ยน owner ของโฟลเดอ auto-deploy ทั้งหมดให้เป็นของ APACHE

    chown -R your_apache_user:your_apache_user your_directory_auto_deploy/*

    2.2 เปลี่ยนสิทธิ์การกระทำของไฟล์ในโฟลเดอ path-auto-deploy ให้เป็น 755 โดย 7 ตัวแรกจะยอมให้ owner เท่านั้นที่สามารถเขียนไฟล์ได้ซึ่งจะทำให้ pull ดึงไฟล์ลงมาที่ path นี้ได้ แต่เราจะไม่ใช้ 777 เพราะ group กับ public ก็จะเขียนได้ซึ่งมันไม่ปลอดภัย

    chmod your_apache_user:your_apache_user your_directory_auto_deploy

แค่นี้ล่ะครับ น่าจะได้แล้ว Gitlab auto deploy

Related posts:

This entry was posted in git, knowledge. Bookmark the permalink.