จริงๆแล้วพี่ได้เขียนบทความการเซ็ต sftp auto deploy ไปครั้งนึงแล้ว อันนี้ การทำ auto deployment จาก bitbucket repo ขึ้นไปยัง digital ocean ด้วย pipeline แต่ในบทความนั้น deploy ขึ้น digital ocean
มางวดนี้จะ deploy ขึ้น kinsta อะ ให้ดูภาพนี้ก่อน
ประเด็นของ kinsta คือหมายเลขพอร์ตมันไม่ใช่ 22 ซึ่งเป็นพอร์ตดีฟอลต์ของ SSH แต่มันเป็นพอร์ตสุ่ม จะออกอะไรมาก็ไม่รู้ อะ นี่คือประเด็นที่ 1 ประเด็นที่ 2 คือ ไม่มีและ
มาดูวิธีเซ็ตกัน คราวนี้ผมมีการเซ็ตแยก branch ด้วยนะครับ สังเกตุดีๆ
1.เข้าไปที่ repo ที่ต้องการ > คลิก Settings > ติ๊ก Enable Pipelines
2.ในข้อ 1 ทำแล้วมันจะวิ่งไปต่อหน้าไหน ช่างหัวมัน ให้คลิกเมนู SSH keys
3.คลิกปุ่ม Generate keys (ให้ gen ขึ้นมาใหม่นะ ผมเลยใช้ Use my own keys แล้วเอาคีย์ที่ใช้อยู่มาใส่ มันไม่ได้ หรืออาจจะเป็นเพราะทำผิด เกียจหาข้อมูลต่อ ทำงี้ได้ก็เอางี้แหละ)
4.ระบบจะสร้าง SSH key ขึ้นมาให้ ยาวเหยียด
5.ป้อน ip:port เข้าไปในช่องหมายเลข 1 แล้วคลิกปุ่ม Fetch อย่างในตัวอย่างผมใส่ 35.187.252.208:17396
6.ปุ่ม Fetch จะเปลี่ยนเป็นปุ่ม Add host คลิกมันเลย
7.คลิกปุ่ม Copy public key
8.ล้อกอินเข้าไปที่ kinsta จ้า คลิกเครื่องหมายลูกศรหลังชื่อตัวเราเอง แล้วคลิก User Settings
9.คลิกปุ่ม Add SSH key
10.วาง SSH key ที่ก้อปปี้มาลงไปในช่อง SSH Key ส่วนในช่อง Label นั้นก็ตั้งชื่อให้มันหน่อย เอาที่เราจะมาดูที่หลังแล้วจำมันได้ ว่ามันเป็นคีย์อะไร
11.เราจะได้อันนี้มา
12.กลับไปที่ bitbucket คลิกเมนู Settings > Deployments แล้วเลื่อน scrollbar ลงมาด้านล่างหาคำว่า Staging คลิกมัน แล้วสร้างตัวแปร
-USER: ค่าของมันใส่ user ที่เราใช้สำหรับล้อกอินเข้า sftp ที่ kinsta ให้มา
-SERVER: ค่าของมันใส่หมายเลข IP
-REMOTE_PATH: ป้อนพาธของโฟลเดอร์ที่เราต้องการให้เอาโค้ดจาก repo นี้ไปเก็บ (โฟลเดอร์ต้องมีอยู่แล้วนะครับ ไม่งั้นมันเออเร่อ มันสร้างโฟลเดอร์ใหม่ขึ้นมาไม่ได้)
-PORT: ค่าของมันใส่หมายเลขพอร์ต
งงค่า ก็กลับไปดูภาพแรกที่พี่แคปเจอร์มาจาก kinsta
13.คลิกปุ่ม Edit YAML configuration
14.พี่เลือกสร้างไฟล์ bitbucket-pipelines.yml ใน branch develop เพราะต้องการ deploy develop
# This is a sample build configuration for PHP.
# Check our guides at https://confluence.atlassian.com/x/e8YWN for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
image: php:7.1.29
pipelines:
branches:
develop:
- step:
name: Deploy to Staging
deployment: Staging
script:
- pipe: atlassian/sftp-deploy:0.4.1
variables:
USER: $USER
SERVER: $SERVER
REMOTE_PATH: $REMOTE_PATH
LOCAL_PATH: '.'
DEBUG: 'true'
EXTRA_ARGS: '-P 17396'
สังเกตในโค้ดให้ดีนะครับ พี่มีคำว่า branches: > develop: อยู่ด้วย อันนี้มันเป็นตัวบอกว่า script นี้ใช้สำหรับ branch develop เท่านั้น
แปลว่า push เข้า master สคริปต์นี้จะไม่สนใจ
แล้วอีกอย่างที่อยากให้สังเกตคือการใช้ตัวแปร $USER, $SERVER, $REMOTE_PATH ตัวแปรนี้ก็คือตัวแปรที่เราสร้างไว้ในข้อก่อนหน้านี้
ถามว่าทำไมใช้ตัวแปร ตอบว่าเพื่อความปลอดภัยจ่ะ เพราะว่าสคริปต์ตัวนี้มันจะถูกเก็บไว้รวมกับโค้ดของเรา ถ้าใส่รหัสผ่านไว้ในไฟล์ แน่นอนล่ะ ใครก็เปิดอ่านได้
หลังเขียนสคริปต์แล้วก็บันทึกแล้ว commit ไปนะครับ ผมรับรองว่าใช้งานได้ เพราะว่าผมใช้อยู่
Leave a Reply