<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bitbucket &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<atom:link href="https://myifew.com/tag/bitbucket/feed/" rel="self" type="application/rss+xml" />
	<link>https://myifew.com</link>
	<description></description>
	<lastBuildDate>Sat, 24 Jun 2017 15:53:41 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.3</generator>

<image>
	<url>https://myifew.com/wp-content/uploads/2018/07/cropped-logo6-ts-32x32.png</url>
	<title>Bitbucket &#8211; Few Steps &#8211; ก้าวสั้นๆ แต่ไปเรื่อยๆ</title>
	<link>https://myifew.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>เริ่มต้นทำ CI/CD – Automation Deployment ด้วย Git และ Jenkins (3 &#8211; จบ)</title>
		<link>https://myifew.com/4072/automation-deploy-git-bitbucket-jenkins/</link>
					<comments>https://myifew.com/4072/automation-deploy-git-bitbucket-jenkins/#respond</comments>
		
		<dc:creator><![CDATA[iFew]]></dc:creator>
		<pubDate>Sun, 18 Jun 2017 06:43:31 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Automation Testing]]></category>
		<category><![CDATA[Automation Tools]]></category>
		<category><![CDATA[Bitbucket]]></category>
		<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Continuous Deployment]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Jenkins]]></category>
		<guid isPermaLink="false">https://myifew.com/?p=4072</guid>

					<description><![CDATA[เมื่อเขียนโค้ดเสร็จและทำการทดสอบเสร็จ จะดีกว่าไหม ถ้าโค้ดเราจะขึ้น Production Server ได้อัตโนมัติทันที]]></description>
										<content:encoded><![CDATA[<p>ความเดิมสองตอนก่อนคือ <a href="https://myifew.com/4027/how-to-setup-jenkins-automation-tools/">วิธีติดตั้ง Jenkin</a> และ <a href="https://myifew.com/4039/automation-testing-by-phpunit-and-jenkins/">วิธีใช้ PHPUnit เพื่อทำ Automation Test</a> ซึ่งเราก็ได้เห็นภาพของ CI (Continuous Integration) กันมาแล้ว มาบล็อกครั้งนี้เป็นตอนสุดท้ายของซีรี่ &#8220;เริ่มต้นทำ CI/CD&#8221; ก็คือ หลังจากเขียนโค้ดและทดสอบผ่านทั้งหมด เราจะให้ Jenkins นำโค้ดที่ทำเข้าสู่ Production Server ให้อัตโนมัติ (Automation Deployment)<span id="more-4072"></span></p>
<h2>จัดการสิทธิเพื่อใช้ Deployment</h2>
<p>ขั้นตอนนี้จะให้นำ SSH Key ของ Jenkins ไปทำความรู้จักกับ Bitbucket<br />
ก่อนอื่น ทำการตรวจสอบก่อนเลยว่า user jenkins ใน server เรา เชื่อมต่อ bitbucke.org ได้ไหม ด้วยคำสั่ง</p>
<p>[wc_code]$ sudo -u jenkins ssh -vT git@bitbucket.com[/wc_code]</p>
<p>ให้ดูบรรทัดท้ายๆ ถ้ามันมี username ที่เราใช้บน Bitbucket แปลว่ามันรู้จักกันแล้ว</p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-4073" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-13_01_26-root@myifew_-_var_www_test_ci_cd.png" alt="" width="589" height="154" /></p>
<p>แต่ถ้าขึ้นว่า Permission Denied  ให้ทำการ copy public key ไปไว้บน bitbucket ครับ โดยวิธีการดู Jenkins public key คือ</p>
<p>[wc_code]$ sudo vi /var/lib/jenkins/.ssh/id_rsa.pub[/wc_code]</p>
<p>เป็นอันเสร็จเรียบร้อย</p>
<h2>สร้างโฟลเดอร์เว็บไซต์ และไฟล์คำสั่ง Deployment</h2>
<p>ไฟล์เว็บไซต์ผมจะเก็บไว้ที่ /var/www/test_ci_cd และเมื่อมีโฟลเดอร์แล้ว ให้ clone project ลงมาทั้งหมด</p>
<p>[wc_code]$ sudo mkdir /var/www/test_ci_cd[/wc_code]</p>
<p>[wc_code]$ sudo git clone git@bitbucket.org:few/test-project.git .[/wc_code]</p>
<p>ทำการสร้างไฟล์เพื่อใช้ Deployment ซึ่งในที่นี้ผมใช้ชื่อ deploy.php</p>
<p>[wc_code]$ sudo vi /var/www/test_ci_cd/deploy.php[/wc_code]</p>
<p>ในไฟล์มีโค้ดประมาณนี้</p>
<p><img decoding="async" class="alignnone size-full wp-image-4111" src="https://myifew.com/wp-content/uploads/2017/06/2017-06-24-22_49_57-root@myifew_-_var_www_test_ci_cd.png" alt="" width="394" height="119" /></p>
<p>ซึ่งเป็นโค้ดที่ Jenkins จะเอาไว้ใช้งาน โดยมีขั้นตอนคือ</p>
<ol>
<li>เข้าโฟลเดอร์ที่เก็บเว็บไซต์ (หรือเก็บไฟล์ deploy.php)</li>
<li>ทำการล้างไฟล์เก่าออกทั้งหมด (optional)</li>
<li>ดึงไฟล์ล่าสุดที่มีการเปลียนแปลงและผ่านการทำสอบแล้ว ลงมาบน server</li>
</ol>
<p>จากนั้นทำการบันทึก ก็เสร็จแล้ว</p>
<h2>เพิ่ม Config Deployment บน Jenkins</h2>
<p>เข้าไปที่ Project ที่เราใช้ทำงาน จากนั้นเพิ่มในส่วนของ Build จุดเดียวกับที่ตั้งให้ทำ PHPUnit ดังนี้</p>
<p><img decoding="async" class="alignnone size-full wp-image-4075" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-13_19_20-Test_CI_CD_Bickbucket-Config-Jenkins.png" alt="" width="862" height="358" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-13_19_20-Test_CI_CD_Bickbucket-Config-Jenkins.png 862w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-13_19_20-Test_CI_CD_Bickbucket-Config-Jenkins-600x249.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-13_19_20-Test_CI_CD_Bickbucket-Config-Jenkins-768x319.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-13_19_20-Test_CI_CD_Bickbucket-Config-Jenkins-700x291.png 700w" sizes="(max-width: 862px) 100vw, 862px" /></p>
<p>ซึ่ง folder path และชื่อไฟล์ ให้เปลี่ยนไปตามที่เราตั้งค่าไว้ด้วยนะ</p>
<h2>ลองทดสอบ Automation Deployment</h2>
<p>ตอนนี้ไฟล์ที่ผมใช้ทดสอบทำงานบวกเลขได้ตามปกติ และไฟล์ test unit ผมก็ยังใช้งานได้ตามปกติ<br />
ผมจะลองเพิ่มข้อความบนไฟล์ calculate.php โดยยังไม่ได้แก้ไขอะไร เพื่อดูว่าระบบไหลไปได้ถูกต้องหรือไม่</p>
<p>[wc_code]echo &#8216;Hi, automate test and deploy (success, all test case)&#8217;;[/wc_code]</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4077" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_46_59-D__www_test_test_ci_cd_src_calculate.php-Notepad.png" alt="" width="463" height="174" /></p>
<p>จากนั้นให้ Push เข้าสู่ระบบ</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4078" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-11_25_25-MINGW64__d_www_test_test_ci_cd.png" alt="" width="509" height="311" /></p>
<p>ลองเปิดดูบน Jenkins จะต้องพบว่ามัน Success</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-4080" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_47_28-Test_CI_CD_Bickbucket-7560-Console-Jenkins-1024x476.png" alt="" width="1024" height="476" srcset="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_47_28-Test_CI_CD_Bickbucket-7560-Console-Jenkins-1024x476.png 1024w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_47_28-Test_CI_CD_Bickbucket-7560-Console-Jenkins-600x279.png 600w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_47_28-Test_CI_CD_Bickbucket-7560-Console-Jenkins-768x357.png 768w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_47_28-Test_CI_CD_Bickbucket-7560-Console-Jenkins-1200x557.png 1200w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_47_28-Test_CI_CD_Bickbucket-7560-Console-Jenkins-700x325.png 700w, https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_47_28-Test_CI_CD_Bickbucket-7560-Console-Jenkins.png 1492w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>จากนั้นลองเปิดบนเว็บไซต์ Production ที่เราได้เตรียมไว้ จะต้องแสดงข้อความที่เพิ่มขึ้นมา</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4081" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_50_17-myifew.com_test_ci_cd_src_calculate.php_.png" alt="" width="399" height="99" /></p>
<p>แปลว่า ระบบ Jenkins ทำการทำการ Automate Test และเมื่อทดสอบ Unit Test ผ่านทั้งหมด ก็ได้ Automate Deploy ให้เราเรียบร้อยแล้ววว</p>
<p>คราวนี้ มาลองทดสอบกรณีที่ Unit Test ทำงานไม่ผ่านบ้าง<br />
โดยผมได้แก้สูตรคิดเลข จาก บวก เป็น หาร ดังนั้น Unit Test ที่ผมทำการทดสอบไว้ทั้งหมดจะผิดทันที เพราะคำตอบมันเป็นผลลัพธ์ของการบวกเท่านั้น<br />
และผมได้ทำการแก้ไขข้อความด้วยว่า จะเกิดการ fail, all test case</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4082" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_48_04-D__www_test_test_ci_cd_src_calculate.php-Notepad-1.png" alt="" width="484" height="177" /></p>
<p>เช่นเดิม แก้ไขเสร็จ ทำการ git push ขึ้นไปบน Bitbucket</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4083" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_49_04-μTorrent-3.5-build-43804-32-bit.png" alt="" width="471" height="250" /></p>
<p>จากนั้นเมื่อไปดูบน Jenkins มันจะแสดงข้อความ FAILURES ขึ้นมา เพราะ Unit Test เราไม่ผ่าน</p>
<p><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-4084" src="https://myifew.com/wp-content/uploads/2017/06/Test_CI_CD_Bickbucket-7561-Console-Jenkins--811x1024.png" alt="" width="811" height="1024" srcset="https://myifew.com/wp-content/uploads/2017/06/Test_CI_CD_Bickbucket-7561-Console-Jenkins--811x1024.png 811w, https://myifew.com/wp-content/uploads/2017/06/Test_CI_CD_Bickbucket-7561-Console-Jenkins--600x757.png 600w, https://myifew.com/wp-content/uploads/2017/06/Test_CI_CD_Bickbucket-7561-Console-Jenkins--768x969.png 768w, https://myifew.com/wp-content/uploads/2017/06/Test_CI_CD_Bickbucket-7561-Console-Jenkins--555x700.png 555w, https://myifew.com/wp-content/uploads/2017/06/Test_CI_CD_Bickbucket-7561-Console-Jenkins-.png 943w" sizes="auto, (max-width: 811px) 100vw, 811px" /></p>
<p>ดังนั้น ไฟล์บน Procution ก็จะไม่มีอะไรเปลี่ยนแปลง เพราะเมื่อ Unit Test ไม่ผ่าน มันจะไม่ไปเรียกไฟล์ deployment ทำต่อ</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4081" src="https://myifew.com/wp-content/uploads/2017/06/2560-06-18-12_50_17-myifew.com_test_ci_cd_src_calculate.php_.png" alt="" width="399" height="99" /></p>
<h2>สรุป</h2>
<p>จากที่ได้ลองผิดลองถูกทำมาจนครบ ทำให้เห็นภาพได้ชัดเจนเลยครับว่า Continuous Integration และ Continuous Deployment มันสะดวกและเร็วขึ้นมาก ช่วยส่งเสริมกับเรื่องการส่งมอบงานเป็นรอบและส่งให้ได้ไว เพื่อให้มีการ feedback เร็ว ดังนั้น การเสียเวลาศึกษาและตั้งระบบขึ้นมาอีกสักหน่อย มันจะช่วยงานเราได้ในระยะยาว</p>
<p>แต่อย่างที่ชื่อเรื่องบอกนะครับ นี่เป็นเพียงการเริ่มต้น ดังนั้นขั้นตอนที่เราจะใช้งานจริงๆ อาจจะมีมากกว่านี้ที่ต้องเพิ่มขึ้น ทั้งการเพิ่ม Security, การเพิ่มเรื่องของ Test, การ git push ไปพักไว้ที่ dev branch ก่อน, การ Deploy ไปยัง Stating Server เพื่อทำ Acceptant Test แล้วค่อย merge git เข้าสู่ master branch และ deploy Production &#8230; ผมก็คงเขียนไม่หมด เอาเป็นว่า ไปเผชิญโลกกว้างกันดูครับ</p>
<p style="text-align: center;"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4089 aligncenter" src="https://myifew.com/wp-content/uploads/2017/06/BestPractices_for_a_MatureContinuousDeliveryPipeline.png" alt="" width="595" height="451" />(รูปจาก http://www.bogotobogo.com/DevOps/DevOps_CI_CD_Pipeline_Sample.php)</p>
<p>ดังนั้น วิธีการของผมก็ไม่ใช่สิ่งที่ดีที่สุด ถ้าหากผิดพลาดประการใด หรือมีคำแนะนำเพิ่มเติม มาแลกเปลี่ยนกันได้ครับ และกราบขอคำชี้แนะด้วยคร้าบบ..</p>
<p>เว็บอ้างอิง</p>
<ul>
<li><a href="http://chrisbeaver.com/2014/10/automatically-deploy-private-git-repo-server/" target="_blank" rel="noopener">Automatically Deploy Private Git Repo to Server</a></li>
<li>รูปปกจาก <a href="http://www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/" target="_blank" rel="noopener">http://www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/</a></li>
</ul>
<p>ซี่รี่ &#8220;เริ่มต้นทำ CI/CD&#8221;</p>
<ul>
<li><a href="https://myifew.com/4027/how-to-setup-jenkins-automation-tools/">เริ่มต้นทำ CI/CD – วิธีติดตั้ง Jenkins บน Ubuntu (1)</a></li>
<li><a href="https://myifew.com/4039/automation-testing-by-phpunit-and-jenkins/">เริ่มต้นทำ CI/CD – Automation Testing ด้วย PHPUnit และ Jenkins (2)</a></li>
<li><a href="https://myifew.com/4072/automation-deploy-git-bitbucket-jenkins/">เริ่มต้นทำ CI/CD – Automation Deploy ด้วย Git (Bitbucket) และ Jenkins (3 &#8211; จบ)</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://myifew.com/4072/automation-deploy-git-bitbucket-jenkins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
