มาติดตั้ง Jenkins เพื่อทำ CI/CD สำหรับ Android กันเถอะ (Step 2)

Kittipol Chuarpradit
4 min readApr 6, 2018

--

Thanks to Theerapat Hataitam , Wisanu Choungsuwanish

บทความนี้ผู้เขียนจะนำเสนอเรื่องของการทำ CI (continuous integration) และ CD (continuous delivery) โดยใช้การ Develop บน Android และนำ Source code ขึ้นไปไว้ที่ Gitlab จากนั้น จึง integration ไปที่ Jenkins เพื่อทำ CI และ CD

หลังจากที่เรามี Server ของ Jenkins เรียบร้อย หากใครยังไม่มี สามารถทำตามขั้นของ Step 1 ได้เลยครับ ซึ่งใน Step ที่ 2 นี้ จะเป็นการทำ Integration ระหว่าง Jenkins กับ Gitlab ซึ่งนอกจาก Gitlab แล้ว Jenkins ก็ยังสามารถ Integration กับ ผู้ให้บริการ Git Server อื่นๆ ได้เช่น Github หรือ BitBucket โดยในบทความนี้ผู้เขียนจะขอใช้ Gitlab เป็นตัวอย่างประกอบครับ

โดยผู้เขียนจะแบ่งขั้นตอนออกเป็นส่วนๆ ดังนี้

Step 1 : Install และ Setup Jenkins บน CentOS Server

Step 2 : Integration Jenkins กับ Gitlab

Step 3 : Build และ Run Unit Test ของ Application

Step 2 : Integration Jenkins กับ Gitlab

สำหรับใน Step นี้ สิ่งที่ต้องมีก็คือ Server Jenkins ที่เราทำใน Step แรก และอีกอย่างคือ Source code ที่อยู่บน Gitlab เรียบร้อยแล้ว ซึ่งเราก็จะต้องมี URL Git Repository

Install Plugin Gitlab

เมื่อเราติดตั้ง Server Jenkins ตามขั้นตอน และ Login ด้วย Admin ให้เรียบร้อย เราจะยังไม่มี Plugin ของ Gitlab เราต้องไปติดตั้งเพิ่มโดย

  • คลิกที่เมนูด้านซ้าย Manage Jenkins
  • จะมีเป็นหน้าเมนูย่อยในการ Config ต่างๆ ให้คลิกที่ Manage Plugin
  • คลิกที่ Tab Available
  • ในช่อง Filter ใส่ข้อความ “ gitlab”
  • สิ่งที่เราต้องเลือกจะมี
Gitlab Authentication 
GitLab
Gitlab Merge Request Builder
Gitlab Hook
  • เมื่อเลือกครบแล้วคลิกที่ปุ่ม Download now and install after restart
  • จากนั้นรอ Download สักพักจนขึ้นสถานะสีเหลืองก็คลิกที่ Restart Jenkins when installation is complete and no jobs are running
  • รอสักพัก จนแสดงหน้าให้ Login ก็เป็นอันเสร็จ

สร้าง SSH Credentials Key

ขั้นตอนนี้จะเป็นการทำให้ Jenkins รู้จักกับ Account ของเราใน Gitlab เราก็จะต้องสร้าง SSH Key มาด้วย User Gitlab ของเรา เริ่มต้นด้วยการเปิดหน้า CLI ขึ้นมาและเข้าใช้ user Jenkins ด้วยคำสั่ง

$ sudo su jenkins

จากนั้น นำ User ของ Gitlab ที่เป็น Email ของเรา มาใส่ในคำสั่งนี้

$ ssh-keygen -t rsa -C "your_email@example.com"

ซึ่งที่หน้า CLI จะตอบกลับด้วยการถามว่าจะตั้งชื่อ File ของ Key ว่าอะไรและถัดมา ก็จะถามว่าตั้ง passphrase หรือไม่ ถ้าไม่อยากเปลื่ยนอะไรก็กด Enter รั่วๆ ลงมาได้เลย จะเป็นการใช้ชื่อ File Default ของระบบ และไม่ต้องมี passphrase เลย เราก็จะได้ Key มาเรียบร้อย

เรามาลองดู Key File ของเรากัน โดยพิมพ์คำสั่ง

$ cd .ssh$ ls

ที่หน้า CLI จะแสดงไฟล์ 3 ไฟล์ ซึ่งเรายังไม่ต้องสนใจ ไฟล์ authorized_keys ที่เราสนใจก็คือ

  • id_rsa ไฟล์นี้ คือไฟล์ที่เก็บ private key คือ key สำหรับเข้ารหัสของเรา ซึ่งเราจะใส่ไว้ที่ Jenkins
$ sudo cat id_rsa
  • id_rsa.pub ไฟล์นี้ คือไฟล์ที่เก็บ public key คือ key ที่เอาไว้ถอดรหัสของเรา ซึ่งเราจะเอาไว้ใน Gitlab
$ sudo cat id_rsa.pub

ให้เรา Copy Key ทั้ง 2 มาเก็บไว้ก่อนเลยครับ จะใส่ Notepad หรืออะไรก็ได้ครับ เดียวเราจะนำมาใช้ในขั้นตอนถัดไปครับ

Setting Gitlab ให้รู้จักกับ Jenkins

ให้เราเปิดหน้า Gitlab ขึ้นมาและ Login ให้เรียบร้อย ในส่วนขั้นตอนนี้จะมี 2 อย่างที่เราต้อง setting ให้กับ Gitlab

  1. Set Public Key ที่เราได้มาในขั้นตอนที่แล้วให้กับ Gitlab ซึ่งเข้าเมนูตามรูปภาพนี้ครับ

เมื่อเข้ามาแล้วในช่อง Key ก็ให้ใส่ Public Key ลงไป โดยมาจากไฟล์ id_rsa.pub และในช่อง Title คือการตั้งชื่อให้กับ Key ใส่อะไรไปก็ได้ครับ ในตัวอย่างจะใส่ว่า Jenkins นะครับ และกด Add Key

2. Set Web Hook โดยในขั้นตอนนี้เราจะต้องไปที่หน้า Ui ของ Jenkins ก่อนครับและ Login ให้เรียบร้อย เมื่อเข้ามาแล้วคลิกที่ เมนู New Items เราจะสร้าง Item ที่เอาไว้จัดการ project ของเรา ก็ตั้งชื่อได้เลยครับ project ของเราชื่ออะไรใส่ไปเลยครับ และคลิกเลือก Freestyle Project จากนั้นกด OK

ก็จะมาถึงหน้าสำหรับจัดการ Project ของเรา ตอนนี้อย่าเพิ่งสนใจอะไรมากครับ เราตั้ง Project ลอยๆ ไว้ก่อน ให้ไปคลิกที่ Tab Build Triggers และ Copy GitLab webhook URL มาครับ

หลังจากนั้นไปที่หน้าของ Gitlab และเข้าไปที่ Project ของเราครับ ที่เมนูด้านซ้ายคลิกที่ Setting > Integrations ในช่อง Url ก็ใส่ Link ที่เรา copy มาลงไปได้เลยครับอย่างอื่นก็ตาม Default ของระบบไปเลย จากนั้นกด Add webhook ด้านล่างจะแสดง link ของเรา ลองกดปุ่ม Test ดูครับ ถ้าได้ข้อความแสดงแบบในรูปก็เป็นอันเสร็จครับ

Setting Jenkins ให้ดึง Code มาจาก Gitlab

ขั้นตอนสุดท้ายแล้วครับสำหรับ Step นี้ ให้ไปที่หน้า Gitlab ใน Project ของเราให้ไป Copy Link Git Repository ของเรามา เอาเป็นแบบ SSH นะครับ

จากนั้นเปิดหน้า Ui ของ Jenkins ขึ้นมาครับ Login ให้เรียบร้อย จากนั้นคลิกที่ Project ที่เราสร้างไว้ในขั้นตอนที่แล้ว เมื่อเข้ามาแล้วให้คลิกปุ่ม Configure ที่เมนูด้านซ้ายจะเป็นหน้าจัดการกับ Project ของเรา เมื่อเข้ามาแล้วให้คลิกที่ Tab Source Code Management ให้คลิกเลือกที่ช่อง Git จะมีช่องแสดงขึ้นมาให้เราใส่ข้อมูล ในช่อง Repository URL ให้เรานำ Link Git ที่เรา copy ใส่ลงไปครับ จะต้องมีข้อความสีแดงแสดงขึ้นมา

ไม่ต้องตกอกตกใจไปครับ แค่เราต้องใส่ Private Key ให้ ก็จะไม่แสดงข้อความสีแดงแล้วครับ ก่อนอื่นเรามาใส่ Branches ที่ต้องการจะดึง Code มาก่อนโดยใส่ชื่อ Branch ไปได้เลยครับ พอเสร็จแล้วมาคลิกที่ปุ่ม Add ด้านล่างข้อความสีแดงที่มีรูปกุญแจอยู่นะครับ จะมีปุ่มที่มีคำว่า Jenkins แสดงขึ้นมา ให้กดปุ่มนั้นได้เลยครับ จะแสดงหน้าสำหรับ Add Credentials ขึ้นมาครับ

  • ในช่อง Kind ให้เลือกเป็น SSH Username with private key
  • ช่อง Username ให้ใส่ Email ของ gitlab ที่เราใช้สร้าง Key ลงไป
  • ในช่อง Private Key ให้คลิกเลือกที่ Enter directly และใส่ private key ที่เราเก็บเอาไว้ในขั้นตอนการสร้าง Key ลงไป
  • จากนั้นกด Add ได้เลยครับ

เมื่อกลับมาที่หน้า Project ต้องช่อง Credentials ให้คลิกเลือก Key ที่เราสร้างเมื่อกี้ จะเป็นชื่อ Email ของเรา ถ้าทำตามขั้นตอนอย่างถูกต้อง จะต้องไม่มีข้อความสีแดงแสดงขึ้นมาแล้วนะครับ ถ้าไม่มีข้อความใดๆแสดงขึ้นมากด Save

ตอนนี้เราจะมาอยู่ที่หน้า สั่งงาน Project ของเรา ที่เมนูด้านซ้าย ให้คลิกที่ปุ่ม Build Now แล้ว รอสักพักจนทำงานเสร็จ ในช่อง Build History ลูกบอลแสดงสถานะจะต้องเป็นสีฟ้านะครับ ถ้าเป็นสีฟ้าก็เป็นอันเสร็จขั้นตอนครับ

--

--