FluffyFern
Sirisoft
Published in
5 min readNov 10, 2019

--

SQL Server Backup Database Automation by Jenkins

โดยภาพ Architecture ของ demo นี้จะเป็นตามรูปด้านล่างนี้นะคะ

สำหรับใครที่ยังไม่เคยติดตั้ง Jenkins และสร้าง project บน Jenkins สามารถเข้าไปอ่านได้ใน blog ของหน่องเตยตามนี้เลยค่ะ ติดตั้ง Database แบบ Automation คลิกเดียวรู้เรื่อง!!

สำหรับตัว Jenkins เองจะมี plugin เพิ่มเติมที่ชื่อว่า Node and Label parameter ที่ใช้สำหรับการเลือก node เพื่อทำการรัน job

ขั้นตอนการเพิ่ม node ลงบน Jenkins

1. เลือก manage Jenkins จาก Jenkins Menu

2. เลือก configure system เพื่อทำการ configure Jenkins URL ใหม่
Note: สำหรับตอนติดตั้ง Jenkins และยังไม่ได้เปลี่ยน localhost เป็น IP address ของเครื่อง master

3. ในหน้า configuration ให้เลื่อนลงมาที่ Jenkins location tab และทำการเปลี่ยน localhost เป็น IP เครื่องดังรูป และกด save

4. ในหน้า manage Jenkins เลือก manage node เพื่อทำการเพิ่ม slave node

5. เลือก new node ในแทบ menu จากนั้นทำการตั้งชื่อ node และเลือก “permanent agent’’ หลังจากนั้นกด OK เพื่อทำการสร้าง slave node

6. เมื่อทำการเพิ่ม slave node เสร็จแล้ว บนหน้า dashboard จะแสดง status ของ node ที่ยังไม่ online เราสามารถแก้ไข configuration ของ node โดยกดที่รูปฟันเฟือง ดังรูป

7. ทำการตั้งค่า configure เพื่อติดตั้ง Jenkins Agent บน slave node

8. บนหน้า node แต่ละ node นั้นจะแสดงสถานะของ Jenkins Agent เราสามารถทำการ download slave-agent และ agent software และติดตั้งลงบน slave node ทั้ง 2 เครื่องได้เลย

หน้าตา software ของ agent และ slave-agent ของ Jenkins ค่ะ

หน้าตาของ slave node ทั้ง 2 ตัวที่ทำการติดตั้ง slave-agent เรียบร้อยแล้ว

9. เพิ่มเติมนะคะ สำหรับการติดตั้ง Jenkins slave agent เราสามารถเลือกติดตั้งแบบให้มีการฝัง service ลงบนเครื่องได้เลย โดยไม่ต้อง start agent ใหม่ทุกครั้งที่มีการ restart เครื่อง server สามารถทำได้ด้วยวิธีการต่อไปนี้

เมื่อมีการรัน slave-agent และหน้า connection ของ agent ปรากฏขึ้นมาแล้ว ให้กดที่ปุ่ม file และ Install as a service ดังรูป

สามารถทำการตรวจสอบ Jenkins Agent service บนเครื่อง slave ได้ โดย service ของ slave agent จะชื่อว่า Jenkins agent (jenkinsslave-C_Jenkins)
Note: สามารถทำการเปลี่ยน Log on ที่ใช้รัน agent เพราะเมื่อมีการเชื่อมต่อ agent ตัว Jenkins จะใช้ user log on เป็น user ในการเชื่อมต่อ

การเพิ่ม parameter ลงใน project

การเพิ่ม parameter ต่อไปนี้เป็นการทำเพื่อให้ Jenkins Master สามารถเลือก run project ที่ slave node ได้

Parameter ที่เราทำการเพิ่มนี้เกิดจาก plugin ชื่อ node and label ที่เราทำการติดตั้งเพิ่มเติมเพื่อมาช่วยในการรัน job ใน slave node หลายๆตัวพร้อมกันค่ะ

หลังจากการสร้าง Project บน Jenkins เราสามารถเพิ่ม parameter ด้วยวิธีการต่อไปนี้
1. บน project กด configuration เพื่อทำการแก้ไข configuration ของ project

2. ในหน้า configuration บน general tab ให้ทำการเลือก ‘This project is parameterized’ และเลือกประเภท parameter เป็นแบบ node

หลังจากนั้นทำการตั้งค่าต่างๆ ใน node parameter ตามรูปภาพด้านล่าง

3. เริ่มตั้งค่าใน build tab โดยใส่ command ต่อไปนี้

Whoami

Cd C:\User\sql_svc\Desktop

Git clone http://github.com/Rabbitnoi/SQL-Server-Backup.git

Cd C:\User\sql_svc\Desktop\SQL-Server-Backup

Call backup.bat

โดยไฟล์ต่างที่ใช้ในการ backup SQL Server database นั้นประกอบไปด้วย 2 file หลักคือ backup script และ file batch ที่เอาไว้สำหรับการเรียก backup script ให้ทำงานอีกที นำทั้ง 2 ไฟล์ push ขึ้น GitHub

Batch script

sqlcmd -i backup_adventurework_db_script.sql

backup script

DECLARE @BackupName varchar(1000)

SELECT @BackupName = (SELECT ‘C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Backup\’ + convert(varchar(500),GetDate(),112) + ‘_’ + format(getdate(), ‘hhmmss’) + ‘_AdventureWorks_full_backup.bak’)

BACKUP DATABASE [AdventureWorks] TO

DISK = @BackupName

WITH NOFORMAT, NOINIT, NAME = N’AdventureWorks-Full Database Backup’, SKIP, STATS = 10

GO

4. เมื่อทำการใส่ command ในการรัน project SQL Server backup database เสร็จแล้ว ให้กดเลือกประเภทของการรัน command คือ “Execute Window batch command” หลังจากนั้นทำการ save ค่า configure ของ project

5. วิธีการในการ build project หรือสั่งการให้ project เริ่มทำงาน คือ สามารถกดปุ่ม Build with parameter ในแทบเมนูของ project หลังจากกด build with Parameter tab แล้วจะมีหน้า this build require parameter แสดงออกมา หลังจากนั้นเราสามารถทำการเลือก node เพื่อให้ run job แบบ parallel ได้

6. Jenkin จะทำการรัน job บน slave node พร้อมกัน 2 เครื่อง สังเกตได้จาก build history ที่เวลารัน job จะพร้อมกัน

7. ตรวจสอบ database ที่ถูก backup แล้วจาก slave node ทั้ง 2 เครื่อง

รูปไฟล์ backup บนเครื่อง slave node 1
รูปไฟล์ backup บนเครื่อง slave node 2
รูป Jenkin console output จาก slave node 1
รูป Jenkins console output จาก slave node 2

Reference all icon from https://www.freepik.com/free-vector/hand-drawn-robot-character-collection_1602571.htm#page=8&query=robot&position=23

--

--