Natcha Luang - Aroonchai

Trust me I'm Petdo

Bangkok, Thailand

[Wercker] Auto build & deploy ด้วย Wercker

บทความส่งท้ายปีเก่าต้อนรับปีใหม่กันเลย ในตอนนี้ก็ยังเป็นส่วนหนึ่งของบทความการติดตั้ง Hugo บน Google AppEngine อยู่ ในบทความตอนนี้ผมจะเขียนถึงการใช้งานเครื่องมือ automate task สำหรับช่วยในการ build & deploy แอพพลิเคชันเราขึ้น production ซึ่งสะดวกและลดขั้นตอนการทำงานลงเป็นอย่างมาก จะมีวิธีการอย่างไรลองมาดูกันครับ

อย่างที่ได้เกริ่นไปแล้วว่าบทความนี้ต่อเนื่องจากบทความเก่าสำหรับใครที่ยังไม่ได้อ่าน "รู้จักกับ Hugo เครื่องมือสำหรับสร้าง static website" แนะนำให้เข้าไปอ่านกันก่อน แน่นอนว่าการใช้เครื่องมือจำพวก automate task พวกนี้เราจะต้องใช้งาน source code hosting โดยในที่นี้ผมใช้งาน Bitbucket เป็นหลัก เพราะว่ามี private repository ให้เราใช้งานได้ฟรี ๆ และตัวอย่างในบทความนี้จะเป็นการทำงานกับ Hugo ซึ่งเป็นเครื่องมือที่ผมใช้สร้าง blog นี้ พร้อมแล้วมาลองดูวิธีกันครับ

สารบัญ

สร้างบัญชี

ไปที่ Wercker สมัครสมาชิกให้เรียบร้อย จากนั้นเข้าไปที่ Git connections เพื่อทำการ link บัญชี GitHub หรือ Bitbucket เข้ากับบัญชีของ Wercker แบบนี้

Git connections

สร้างแอพพลิเคชัน

เราจะต้องสร้างแอพพลิเคชันขึ้นมาก่อน วิธีการก็ไม่ยากแต่อย่างใด ซึ่ง Wercker มีระบบช่วยในการสร้างจาก repository ของ GitHub หรือ Bitbucket ที่เรา link บัญชีเอาไว้แล้ว ให้ไปที่หน้า Applications จากนั้นคลิกที่ปุ่ม Create ด้านบนเลือกที่ Application

Create application

ทำตามขั้นตอนที่ Wercker แนะนำให้เรียบร้อย จากนั้นเราก็จะสร้างไฟล์ wercker.yml เพื่อใช้สำหรับบอกให้ Wercker รู้ว่าเราต้องการทำอะไรบ้างกับแอพพลิเคชันตัวนี้

ตัวอย่าง wercker.yml

เราจะสร้างไฟล์ wercker.yml ไว้ที่ root ของ project โดยในตัวอย่างของผมจะเป็น steps สำหรับสั่งให้ Wercker build และ deploy แอพพลิเคชันขึ้นไปที่ Google AppEngine ผมเลือกใช้ Wercker box ที่เป็น golang เพราะว่าทั้ง Hugo และ AppEngine SDK ที่ใช้ก็เป็น Go แถมยังใช้ runtime เป็น Go อีกทุกอย่างคือ Go หมดเลย

เหตุผลที่ใช้ Go runtime ใน Google AppEngine

box: wercker/golang

build:
  steps:
    - arjen/hugo-build

deploy:
  steps:
    - nomkhonwaan/appengine-deploy:
        token: $APP_ENGINE_TOKEN

ส่วนสำคัญอยู่ที่ build ตรงนี้มีผู้สร้าง steps สำหรับ build Hugo เอาไว้ให้อยู่แล้ว ซึ่งใช้งานได้ดีเลยครับดังนั้นตรงนี้ไม่ต้องแก้ไขอะไร

Deploy ขึ้น Google AppEngine

จากนั้นมาถึงขั้นตอนการ deploy ตรงนี้ผมเองทดลองใช้งาน steps ของหลาย ๆ คนที่สร้างไว้แต่ไม่ค่อยดีเท่าไร เลยจัดการสร้างเองเสียเลย (ไว้จะมาเขียนถึงวิธีสร้าง Wercker Steps ใช้งานเองทีหลัง) สังเกตว่าจะมีตัวแปรที่ชื่อว่า $APP_ENGINE_TOKEN ตรงนี้จะเป็นตัวแปรที่เก็บค่า refresh token ของ AppEngine ไว้ใช้ตอนที่เรา deploy แอพพลิเคชัน แทนการใช้ username และ password

วิธีดู refresh token ของเราก่อนอื่นเราต้องเคย deploy ก่อนอย่างน้อยหนึ่งครั้งเพื่อให้ AppEngine SDK สร้างไฟล์ .appcfg_oauth2_tokens ไว้ที่ $HOME ของเรา ถ้าใครที่ยังไม่เคยให้ติดตั้ง AppEngine SDK และใช้คำสั่ง deploy มาก่อนสามารถดู วิธีอัพโหลดแอพพลิเคชัน ได้ครับ

จากนั้นให้เปิดไฟล์ .appcfg_oauth2_tokens ขึ้นมาจะมี refresh token อยู่ล่าง ๆ จัดการ copy ไว้แล้วเราจะเอาไปใส่ที่ตัวแปรใน Wercker กัน

ไปที่แอพพลิเคชันที่เราต้องการ deploy จากนั้นไปที่ Settings > Targets > Add deploy target > custom deploy

  • Deploy target name ตั้งชื่ออะไรก็ได้
  • Auto deploy checked และใส่ชื่อ branch ที่เราจะให้ทำ auto deploy ของผมคือ master

จากนั้นเลื่อนลงมาด้านล่างที่ Deploy pipeline เลือก Add new variable

  • Environment variable ตั้งชื่อว่า APP_ENGINE_TOKEN
  • Text ให้ paste refresh token ที่ copy ไว้ข้างบน
  • Protected checked

จากนั้นกด OK

Deploy targets

และทีนี้เมื่อเรา push code ขึ้นมาที่ GitHub หรือ Bitbucket repository ของแอพพลิเคชันใน branch ที่เรากำหนด trigger เอาไว้ Wercker ก็จะทำการ build & deploy ตามที่เรากำหนดไว้ครับ กรณีถ้าการ build หรือ deploy เกิดข้อผิดพลาดขึ้นจะมีอีเมลแจ้งเตือนเราทันทีอีกด้วยครับ

Comments