ติดตั้ง Database แบบ Automation คลิกเดียวรู้เรื่อง!!
สวัสดีค่ะทุกคน กลับมาพบกันอีกแล้วนะคะ ยังจำหน่องเตยได้อยู่มั้ยน้า… หน่องเตยมาเขียน Blog แบบนี้ แสดงว่ามีอะไรดีๆ มานำเสนอนะจ๊ะ อิอิ :p
หลายๆ คนคงรู้จัก DevOps CI/CD (Continuous Integration และ Continuous Delivery/Deployment) กันใช่มั้ยคะ
DevOps เป็น Culture การทำงานที่มีหัวใจสำคัญ คือ ความสะดวกและรวดเร็วในการ Development, Test และการ Deployment ด้วยวิธีการแบบ Automation ซึ่งจะมีประโยชน์มากในการทำงานที่ต้องมีการทดสอบ แก้ไข และ release product version ใหม่อยู่บ่อยครั้ง
แต่เนื่องจากหน่องเตยเป็นสาย DBA จึงเลยอยากลองนำ หัวใจดวงน้อยๆของ devOps คือ Automation ของ DevOps มาประยุกต์ใช้กับ Database ดูบ้าง
วันนี้เลยจะขอนำเสนอการทำ Automate Create Oracle Database by Jenkins ค่ะ ชื่อตรงตัวเลย ก็คือ Install Oracle Database 18c Softwareพร้อมทั้ง Create Database แบบพร้อมใช้งานโดยใช้ tool คุณลุง Jenkins นั่นเองค่ะ
เพียงสั่งการไปที่ Jenkins คลิกเดียว ก็สามารถเนรมิต Oracle Database มาให้เราใช้บน OS Linux ได้อย่างง่ายดาย ทันใจ ทันใช้ฝุดๆ ไปเริ่มพร้อมกันที่ละ step เลยค่ะ
มาทำ Prerequisite กันทีละขั้นตอนเลยจ้าาา
# dd if=/dev/zero of=/tmp/newswap bs=8MB count=1024
# mkswap /tmp/newswap
# swapon /tmp/newswap
# free -m
# echo “/tmp/newswap swap swap defaults 0 0” >> /etc/fstab
# vi /etc/hosts
# systemctl stop firewalld
# systemctl disable firewalld
# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo
# rpm — import http://pkg.jenkins.io/redhat-stable/jenkins.io.key
# yum install jenkins -y
# systemctl start jenkins
# cat /var/lib/jenkins/secrets/initialAdminPassword
เมื่อ install plugins เสร็จก็ให้ทุกคน Create user สำหรับทำ operation ต่างๆ ผ่าน Jenkins ค่ะ
ส่วนนี้เป็นการกำหนด URL สำหรับการเข้าถึง Jenkins Management ค่ะ
Jenkins is ready! เย้ เย้
นี่ก็คือหน้าตา Dashboard ของ Jenkins ที่จะเป็นฐานบัญชาการสั่งทำงานแบบ Automation ค่ะ อิ้อิ้
และอย่าลืม install GitHub plugins ให้กับ คุณลุง Jenkins แกด้วยนะคะ เพราะเราจะทำการ clone scripts จาก GitHub มาค่ะ โดยไปที่เมนู Manage Jenkins
เลือก Manage Plugins
เลือกที่ Available tab และ search หา GitHub คราวนี้เตยเลือกแค่ plugin หลักๆ คือ GitHub Pull Request Coverage Status และ GitHub Integration เลือก download now and install after restart จ้าาา
เลื่อนลงมาข้างล่างแล้วเลือก เครื่องหมายถูก ให้ restart Jenkins ด้วยนะคะ เมื่อ download เสร็จก็ให้คลิก go back to the top page
ระหว่างนี้ไป prepare step ถัดไปกันค่ะ
pscp.exe C:\Users\Suphisara\Desktop\oracle_database_18c\LINUX.X64_180000_db_home.zip root@172.20.10.3:/home/
git status
git add .
git status
git commit -m “please work”
git push origin master
login GitHub
Scripts ที่ถูก push ขึ้นไปบน GitHub จ้าาาา
เลือกที่ create new jobs
เลือก freestyle project และตั้งชื่อ ครั้งนี้เตยจะสร้าง Project ไว้ 2 Project นะคะ
- Automate_Install_SW18c : สำหรับการติดตั้งครั้งแรก โดยคำสั่งภายในจะเป็นการเรียก script เพื่อ install oracle database software และสร้าง database ตัวที่ 1 ชื่อว่า jelly1
โดยเราจะตั้งค่าลำดับการทำงานของ Jenkins ในการเรียก Scripts แต่ละตัวจากส่วนที่เป็น Build แบบ Execute Shell และใส่คำสั่งในการเรียก scripts ดังนี้
#1
#transfer file oracle18c.zip to /home/
#by using cmd
#pscp.exe C:\Users\Suphisara\Desktop\oracle_database_18c\LINUX.X64_180000_db_home.zip root@172.20.10.3:/home/#put all script into github
#by using git bash
# git status
# git add .
# git status
# git commit -m “please work”
# git push origin master
# login GitHub#2
#prepare clone script from gitecho P@ssw0rd | su root bash -c ‘mkdir /home/git_scripts’
echo P@ssw0rd | su root bash -c ‘yum install git -y’
echo P@ssw0rd | su root bash -c ‘git clone https://github.com/kulico/automate_install_sw_18c /home/git_scripts’#3
#prepare environment for oracleecho P@ssw0rd | su root bash -c ‘sh /home/git_scripts/control_script1.sh’
#4
#Install software 18cecho welcome1 | su oracle bash -c ‘sh /home/git_scripts/runinstaller.sh’
echo P@ssw0rd | su root bash -c ‘sh /home/git_scripts/control_script2.sh’#5
#Create database 18cecho welcome1 | su oracle bash -c ‘sh /home/git_scripts/rundbca.sh’
#6
#listenerecho welcome1 | su oracle bash -c ‘sh /home/oracle/scripts/start_lsnrctl.sh’
echo Database 18c is Ready to use !!
2. Automate_Create_DB : สำหรับการติดตั้งครั้งที่ 2 ขึ้นไป โดยคำสั่งภายในจะเป็นการเรียก script เพื่อสร้าง oracle database โดยจะมีการนับจำนวนครั้งในการสร้างเพื่อนำจำนวนดังกล่าวไปสร้างเป็นชื่อ database เพื่อไม่ให้ชื่อซ้ำกัน โดย database จะมีชื่อว่า jelly[n] ** n แทนตัวเลขจำนวนครั้งที่ counter นับไว้
โดยเราจะตั้งค่าลำดับการทำงานของ Jenkins ในการเรียก Scripts แต่ละตัวจากส่วนที่เป็น Build แบบ Execute Shell และใส่คำสั่งในการเรียก scripts ดังนี้
#Create database 18c
echo welcome1 | su oracle bash -c ‘sh /home/git_scripts/rundbca_generate.sh’
#listener
echo welcome1 | su oracle bash -c ‘sh /home/oracle/scripts/start_lsnrctl.sh’
echo Database 18c is Ready to use !!
NOTE1: Password Oracle คือ welcome1 , Password Root คือ P@ssw0rd
NOTE2: Password SYS , SYSTEM ของ database คือ welcome1
สามารถแก้ไข password หลังจากสร้าง database แล้ว หรือสามารถแก้ไขใน script ก่อน execute Jenkins ค่ะ
เมื่อเราสร้าง Job ไว้ จะเห็น Job อยู่ที่หน้า Dashboard แบบนี้ค่ะ
คลิกเข้าไปใน Job จะเจอปุ่ม Build Now ที่ซ้ายมือ ถ้าต้องการแก้ไขคำสั่ง Execute shell ก็สามารถเข้าไปที่เมนู configure
ตัวอย่างจาก project : Automate_Create_DB
เมื่อสั่ง Build Now แล้วจะเกิด status การทำงานอยู่ที่ช่อง Build History สามารถคลิกเข้าไปดู console ขณะกำลัง Build เพื่อ Monitor การทำงานหากมีความผิดพลาด status จะเป็นสีแดง หากสำเร็จ status จะเป็นสีฟ้า และ status จะเป็นสีเหลือง กรณีที่บางคำสั่งทำงานไม่สมบูรณ์
ภายในหน้า console จะแสดงผลการทำงานเป็น log แบบนี้ค่ะ
เมื่อเสร็จ ก็จะมีคำว่า “Database 18c is Ready to use !!” ตามที่เรากำหนดไว้ใน Execute shell
เมื่อ คุณลุง Jenkins บอกว่าติดตั้งเสร็จแล้ว เราก็ไปลอง Connect Database กันค่ะ
$ ps -ef | grep pmon
$ lsnrctl status
Export ORACLE_SID = jelly[n]
$ sqlplus / as sysdba
sqlplus sys/welcome1@172.20.10.3:1521/jelly[n] as sysdba
เป็นยังไงกันบ้างคะ แค่สั่ง Build Now คลิกเดียว ก็มี Oracle Database พร้อมใช้งานอยู่ในเครื่องเลย
ประโยชน์และลูกเล่นของ Jenkins ยังมีอีกเยอะมากเลยนะคะ สามารถไปลองเล่นกันได้ สำหรับใครที่แวะเข้ามาชม Blog นี้และอยากจะแชร์ความรู้หรือแนะนำวิธีการใช้งาน Jenkins แบบ Advance แสดงความคิดเห็นมาได้เลยนะคะ
DBA ตัวน้อยๆ คนนี้ที่พึ่งหัดใช้ Jenkins เป็น ยินดีรับคำแนะนำเสมอค่ะ แล้วพบกันใหม่ Blog หน้านะคะ สวัสดีค่ะ :3