Continues Delivery: ทำ Artifact repository ง่ายๆ ด้วย Artifactory ครับผม

สวัสดีครับ

ก็พอมีเวลาว่าง และกำลังทำเรื่องเกี่ยวกับ Continues Delivery (CD) ก็มานั่งเขียนแชร์เครื่องมือ ง่ายๆ ที่เป็นส่วนหนึ่งในการทำ CD นั่นก็คือ artifacts repositories หรือ ที่เก็บ สิ่งที่ทีมพัฒนาขึ้น มีความพร้อมใช้ประโยชน์ได้ หรือพร้อมบริการได้ เช่น ซอฟแวร์, program, application, library, เอกสารคู่มือการใช้ เป็นต้น ที่ว่ามีความพร้อมใช้ประโยชน์ คือ ไม่มีการนำไป ต่อเพิ่มเติมอีกแล้ว คือเป็นสิ้นสุดของชิ้นงาน นำไปใช้ประโยชน์ได้เลย เป็น finished goods

สำหรับตัวอย่างนี้ ผมใช้ server ที่ชื่อว่า Artifactory ใช้เก็บ ตัวชิ้นงาน เป็นโปรดักส์ซอฟแวร์ง่ายๆ คือ Hello Artifactory โดยจะแนะนำ การ download file artifacts ที่เป็น exe Hello.Artifactory.App ง่ายๆนี้

ก่อนจะเริ่มลงมือทำ ก็มารู้ที่มาของการ สร้าง artifact repository กันก่อน เจ้า artifact repository เริ่มต้นมาจาก ปัญหาการ build ซอฟแวร์ แล้วจะไปวางไว้ที่ไหน เพื่อให้การ deploy หา ซอฟแวร์ที่ build เรียบร้อยพร้อมใช้แล้ว ค้นหาได้ง่าย

สมัยแรกๆ เราก็ใช้แชร์ folder กัน เราก็ต้องทำ copy เอง จัดการ harddisk เอง backup เอง ซึ่งวุ่นวาย ยุ่งยาก แถมน่าเบื่อ มันก็เลย เกิด server ชนิดนี้ขึ้นมา เพื่อจัดการ path ของ artifacts, backup/restore, จัดการ version, กระจายการ load และ อื่นๆอีก ซึ่งก็ สะดวกขึ้นมาก เมื่อมี artifacts repository จัดการให้เสร็จ

ก็มาถึงแนวคิด CD ที่จำเป็นต้องอาศัย artifacts repository นี้ deploy artifacts เพื่อจุดประสงค์ต่างๆในขั้นตอน หรือ phase การพัฒนาซอฟแวร์ ตามภาพ ข้างล่าง ซึ่งเขาจะเรียกกันว่า Delivery pipeline (ตัดจากหนังสือ Continuous Delivery)

อธิบายจากภาพ มันประกอบด้วยกล่อง Version control เช่น Git, SVN, TFS, Etc คือที่ใช้เก็บ code หรือ file ต่างๆ ที่ทีมกำลังพัฒนาอยู่ มีการเปลี่ยนแปลง แก้ไขตลอดเวลา แน่นอนไม่มีความพร้อมใช้ประโยชน์ได้

ส่วนกลุ่ม 5 กล่องตรงกลาง ได้แก่ Commit stage, Acceptance stage, UAT, Capacity stage, Production คือสถานะ ของทุกชิ้นงานทั้งหมด ที่ประกอบเป็นโปรดักส์ หรือ โปรเจ็ค ว่าอยู่ในขั้นตอนไหน เช่น Commit stage คือ โปรดักส์ อยู่ในขั้นตอนการ วิเคราะห์, code, review code, refactor, unit test ก็ว่ากันไป ตัวชิ้นงานทั้งหมด  หลังจากผ่าน commit stage แล้ว (code ทั้งหมดที่ build เสร็จจะได้ artifacts ส่วน code จะเก็บไว้ที่ version control) ก็จะถูกเก็บไว้ที่ artifact repository เพื่อไปยัง stage หรือ phase ต่อไป คือ Acceptance stage ถ้าผ่าน artifacts ทั้งหมดก็จะไป ขั้นต่อไป ตามลำดับ จนจบ เรียกส่วนนี้ว่า pipeline

และถ้าไม่ผ่านขั้นตอนไหน artifacts ตัวนั้นก็จะไม่สมบูรณ์ ถือว่าไม่ผ่าน ใช้ประโยชน์ไม่ได้ ก็กลับไปที่ขั้นตอน แรก คือ Commit stage งานต่างๆใน version control ก็จะถูกแก้ไข จนผ่าน Commit stage ก็จะถูกจัดเก็บไว้ใน artifacts repository เป็นเวอร์ชั่นใหม่ ส่งต่อไปยัง stage ต่อๆไป จนสุดที่ deploy production ทั้งหมดนี้คือการทำ Continues Delivery

เอาละ ผมจะแสดงตัวอย่าง pipeline ง่ายๆสำหรับตัวอย่าง Hello.Artifactory.App เลยละกัน ผมจะแสดงการทำให้ภาพข้างล่างนี้ ให้เกิดขึ้นให้ดู

เริ่มต้น ติดตั้ง Artifactory

  1. donwload Artifactory ที่ https://www.jfrog.com/open-source/ เป็นตัว open source version ผมใช้ windows OS download ตัว ZIP (jfrog-artifactory-oss-5.1.4.zip) ครับ
  2. แตก file zip จะแสดงโครงสร้าง folder ดังนี้

  1. เข้าไปที่ folder bin แล้ว click ขวาที่ file installService.bat เลือก Run as administrator ดูรูป

  1. ลงเสร็จแล้ว ต้อง run services เองครับ เข้าไปที่ start search programs and file พิมพ์ services  กดเลือกไปที่ service name Artifactory click ขวา แล้วเลือก start ครับ ดูรูป

ติดตั้ง artifactory เสร็จแล้ว ลองทดสอบครับ เปิด browser แล้วไปที่ http://localhost:8081 มันจะเข้าหน้า จัดการ artifactory แบบรูปนี้

ปิดหน้าจอ Welcome to … สวยๆนี้ไปก่อนครับ

กดเข้าไปที่ menu Login ด้านบนสุดขวามือ จะ popup form ให้เรา Login เข้าระบบ ก็พิมพ์ Username *: admin และ Password *: password กดปุ่ม Login

พอเข้ามาแล้วให้ไปที่ menu ด้านซ้าย เลือกที่ icon ตามรูปครับ

จากรูป จะเห็น repository ตัวอย่าง example-repo-local ครับ ผมจะใช้ repository อันนี้ล่ะทำให้ดู ขั้นต่อไปก็ติดตั้งเครื่องมือ สำหรับ พัฒนาซอฟแวร์ครับ ผมใช้ Visual studio community

ติดตั้ง Visual studio community

Download และติดตั้งได้ที่ https://www.visualstudio.com/downloads/ เลือกติดตั้ง version ไหนก็ได้ครับ ตัวอย่างผม version เก่าหน่อย ผมแค่ไว้แสดงแนวคิดการใช้ artifact repository ครับ จะใช้เครื่องมืออะไรพัฒนา app ก็ได้

มีเครื่องมือสร้างพัฒนาซอฟแวร์แล้ว ก็เริ่มลงมือพัฒนาต่อเลย

พัฒนา Hello.Artifactory.App

1. สร้าง project เป็น Console Application ง่ายๆครับ ตามภาพ

2. เขียน code กำหนดให้เป็น version แรกครับผม ดูรูป

3. build projects แล้วลองเล่น app ดูครับ เข้าไปที่ bin/debug folder ของ projects นี้แล้ว กด double click ที่ Hello.Artifactory.App.exe จะแสดงตามรูปนี้

OK มั่นใจว่าทำงานได้ถูกต้องแล้ว ก็ deploy ไปยัง Artifactory เลยครับ ทำตามขั้นตอน ดังนี้

1. ไปที่ http://localhost:8081 แล้วlogin เข้าไปก่อนครับ (ถ้ายัง login ค้างอยู่ก็ไม่ต้อง login ใหม่แล้ว)

2. กดที่ menu Artifact Repository ด้านข้าง แล้วกด Deploy ครับ ดูรูป

3. เลือก Deploy จะขึ้นหน้าจอ ให้เลือก file deploy ให้ browse file Hello.Artifactory.App.exe ใน projects bin/debug ของเรา แล้ว check เลือก Deploy According To Layout ใส่ข้อมูล Layout Tokens

ดังนี้

orgPath ผมใส่ chavp คือ ชื่อบริษัทผม

module  เป็นชื่อ app หรือ component หรือ service สรุปคือเป็นชื่อ ของชิ้นงานที่พร้อมใช้ประโยชน์ได้แล้ว ผมใส่ hello-artifactory-app

baseRev คือ version ของ app ที่เราจะ release ผมใช้การตั้งแบบ <major>.<minor>.<patch>

โดย <major> คือ รหัสกลุ่มของ feature หลัก , <minor> รหัสกลุ่มของ feature เพิ่มเติมลงมา โดย จะ feature จะ ใช้งานได้กับ <major> ที่มันอยู่ ซึ่งจะสามารถ deploy ย้อนหลังได้เช่น ตอนนี้เป็น 1.5 เราสามารถ ใช้ร่วมกับ version 1.4, 1.3 ได้ แต่ถ้าตอนนี้เป็น 2.1 แล้ว เราจะไม่สามารถย้อนไปใช้ 1.9 ได้ แบบนี้ และ

<patch> คือ รหัสที่เราแก้ bug สำหรับ <minor> และ <major> ที่เรา release ไป เช่นตอนนี้ 1.5.0 ปล่อยไปเรามี bug ก็แก้ไข แล้วตั้งเป็นรหัส 1.5.1, 1.5.2 แบบนี้เป็นต้น

(อ่าน Semantic Versioning เพิ่มเติม)

ใส่ตามภาพ ไปก่อนครับ

ใส่ข้อมูลครบแล้ว กด Deploy เสร็จแล้วจะแสดงโครงสร้าง artifactory ดังภาพข้างล่างนี้ครับ

หลังจาก deploy เสร็จแล้ว stage ต่อไป ก็คือ <<acceptance stage>> ตามภาพ ก่อนอื่นเราต้อง install Hello.Artifactory.App.exe ไปยังเครื่องที่ทำ acceptance test

ผมจะพัฒนา app อีกตัวหนึ่งขึ้นมา เพื่อ download artifact Hello.Artifactory.App.exe มาติดตั้ง ครับ โดยจะเขียน client rest api เรียก ใช้ Web API ของ Artifactory download app  Hello.Artifactory.App.exe มาไว้ที่เครื่อง เพื่อเล่นทดสอบ

พัฒนา app ช่วย install 

1. เปิด visual studio สร้าง project Chavp.Get เป็น console application ตามภาพครับ

 

2. ไปที่ Tools เลือก Nuget package manager console แล้วติดตั้ง

Install-Package Appccelerate.CommandLineParser

3. ติดตั้ง Rest Client เพื่อใช้เรียก WEB Api ครับ ผมใช้ RestSharp ติดตั้งครับ

Install-Package RestSharp

4. เขียน code ตามข้างภาพข้างล่างนี้ ลงไป ที่ main app กับ

อ่าน code จากภาพ

static string ArtsRepoUrl คือ artifactory server หรือที่เก็บ ชิ้นงานที่ใช้ประโยชน์ได้ ของเราครับ

static string ProgramsFolder คือ ที่วาง artifact หรือ program ผมวางไว้ที่ drive C:\Program Files\chavp\hello-artifactory-app

static string HelloAppName คือ ชื่อ app ตอนนี้รับคำสั่ง install ได้แค่ app hello.artifactory.app แค่อันเดียวครับ

ผมจะขอผ่าน การอธิบายส่วนของ package Appccelerate.CommandLineParser ไป ข้ามไป อธิบาย จุดที่มีการ เรียก REST Api เลยละกันครับ ดู code ในภาพต่อไป

ตัวแปร var artPath คือ นำเอา version ที่ต้องการ install มาต่อกับ URI หรือ path ของ app ที่เก็บอยู่บน server artifactory ครับ โดย copy มาจาก link ตามภาพ

กด Copy path to clipboard แล้วนำไปวางหลัง artifactory ได้เลยครับ โดย ดู URI การใช้งาน WEB REST API บนเวป ได้ที่นี่ https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API#ArtifactoryRESTAPI-ArchiveEntryDownload

หลังจาก build เราจะได้ exe ของ app install มา ก็ลองใช้ Chavp.Get เพื่อ install app กันเลยครับ

ไปที่ windows start search  programs and files พิมพ์ cmd แล้ว cd ไปที่ folder app Chavp.Get ครับ ผม build project Chavp.Get แล้วเอา bin\debug ไปวางไว้ที่ C:\Program Files\chavp\chavp-get ตามภาพครับ

โครงสร้าง app Chavp.Get ดูภาพ

พิมพ์ Chavp.Get แล้ว ใส่ option –a hello.artifactory.app และ –v 1.0.0 ครับ แลวกด enter app chavp.get ก็จะ download app Hello Artifactory แล้ว ติดตั้งไว้ที่ folder C:\Program Files\chavp ตาม code ที่เราเขียนไว้ เสร็จครับ ดูภาพ

ทีนี้ acceptance test ก็จะเข้าไปที่ folder app C:\Program Files\chavp\hello-artifactory-app แล้วทดสอบ app ดูได้แล้วครับ

ผลปรากฏว่า โปรแกรมเมอร์ เขียนแสดง message ไม่ถูกต้อง คือ

                Hello, Artifac!

ซึ่ง ที่ต้องการ คือต้องแสดง

                Hello, Artifactory!

ก็ แจ้งให้ โปรแกรมเมอร์ กลับไปแก้ ไข code ครับ กลับไปแก้ไข code แล้ว deploy ใหม่ เปลี่ยนเป็น version 1.0.1 ครับ ดูภาพ หลัง deploy version 1.0.1

หลังจากนั้น ก็ install app โดยผ่าน Chavp.Get อีกที ทีนี้ใส่ version เป็น 1.0.1 นะครับ พอเล่น app อีกทีก็จะแสดงได้ ถูกต้องแบบนี้ครับ

เข้าไปที่ folder app C:\Program Files\chavp\hello-artifactory-app กด double click ที่ file hello.artifactory.app.exe จะแสดงตามรูปภาพนี้

Ok เห็น ข้อความว่า Hello, Artifactory! ตามต้องการแล้ว

นั่นก็หมายความว่า ชิ้นงานนี้ของเราก็พร้อม install ที่ stage production ได้แล้วใช่มั้ยครับ

สำหรับงานด้าน delivery products ยังมีงานให้ทำอีกเยอะเลยละครับ ผมก็ขอใช้เวลาน้อยๆ นำเสนอไว้เพียงแค่นี้

หวังว่าบล็อคนี้ จะเป็นจุดเริ่มต้นของการทำ Continues Delivery ให้ได้สักคนหนึ่งนะครับ

ขอให้ผู้หลงไหลในการสร้างโปรดักส์ทุกท่านจงโชคดี…

SoureCode: hell-artifactory-app

ขอบคุณครับ

#:P

Advertisements