สร้างเวิร์กโฟลว์ CI/CD – ปรับใช้ธีม WordPress โดยอัตโนมัติด้วย GitHub Actions
เผยแพร่แล้ว: 2022-11-17บทนำ
ในการพัฒนาเว็บสมัยใหม่ มีหลายขั้นตอนที่คุณต้องทำเพื่อสร้างและนำโค้ดไปใช้งานจริง สำหรับธีมหรือปลั๊กอิน WordPress นั่นอาจหมายถึงการติดตั้ง Composer และ/หรือ Node.js การพึ่งพา การคอมไพล์ CSS การทรานสไพล์ JavaScript และการอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ของคุณ
ในบทความนี้ เราจะสำรวจวิธีปรับปรุงกระบวนการปรับใช้ WordPress โดยใช้ GitHub Actions เราจะสร้างเวิร์กโฟลว์ GitHub Actions เพื่อสร้างและปรับใช้ธีม WordPress โดยอัตโนมัติบนไซต์ Pressidium WordPress ของคุณ
หากคุณคลิกเฉพาะเวิร์กโฟลว์ ให้เลื่อนไปที่ด้านล่างของโพสต์นี้และดำดิ่งลงไปทันที อย่างไรก็ตาม เราขอแนะนำให้คุณอ่านบทความทั้งหมด ซึ่งเราจะอธิบายวิธีการทำงานของทุกอย่างอย่างละเอียด!
ข้อกำหนดเบื้องต้น
- ความเข้าใจพื้นฐานของ Git (การสร้างพื้นที่เก็บข้อมูล การคอมมิตและการพุชโค้ด การสร้างสาขา ฯลฯ)
- ความคุ้นเคยกับอินเทอร์เฟซของ GitHub
“การปรับใช้” ในการพัฒนาเว็บคืออะไร?
การปรับใช้ในการพัฒนาเว็บเป็นกระบวนการ ผลักดันการเปลี่ยนแปลง ไปยังสภาพแวดล้อมระยะไกล ทำให้เว็บไซต์หรือแอปพลิเคชันพร้อมใช้งาน
บางครั้งเราใช้คำว่า "การปรับใช้" เพื่ออ้างถึงชุดของกิจกรรม ซึ่งรวมถึงการสร้าง การทดสอบ และการถ่ายโอนไฟล์ ในขณะที่บางครั้งเราใช้คำนี้ในลักษณะเดียวกับการถ่ายโอนไฟล์ ในบทความนี้ เราจะแยกความแตกต่างระหว่างการ สร้าง และการ ปรับใช้ เสมอ
มีหลายวิธีในการส่งไฟล์เว็บไซต์ของคุณไปยังผู้ให้บริการโฮสติ้ง ในกรณีของเรา เราจะใช้ Secure File Transfer Protocol (SFTP) ซึ่งเป็นโปรโตคอลเครือข่ายสำหรับการถ่ายโอนไฟล์ผ่านช่องทางที่ปลอดภัย เช่น SSH ตามชื่อ
การกระทำของ GitHub คืออะไร?
GitHub Actions เป็นแพลตฟอร์มการผสานรวมอย่างต่อเนื่องและการส่งมอบอย่างต่อเนื่อง (CI/CD) ที่ช่วยให้คุณสร้างและปรับใช้ไปป์ไลน์ได้โดยอัตโนมัติ
ในย่อหน้าต่อไปนี้ เราจะสำรวจวิธีสร้างเวิร์กโฟลว์ GitHub Actions เพื่อสร้างและปรับใช้ธีม WordPress โดยใช้ประโยชน์จากผู้ให้บริการโฮสติ้งที่สนับสนุนสภาพแวดล้อมชั่วคราว
การจัดเตรียม เป็นสภาพแวดล้อมก่อนการผลิตสำหรับการทดสอบที่เกือบจะจำลองสภาพแวดล้อมการผลิตจริงทุกประการ มันพยายามที่จะจำลองสภาพแวดล้อมการผลิตจริงให้ใกล้เคียงที่สุดเท่าที่จะทำได้ ดังนั้นจึงสามารถทดสอบการเปลี่ยนแปลงที่นั่นก่อนที่จะนำไปใช้กับสภาพแวดล้อมการผลิต
หากคุณใช้ Pressidium อยู่แล้ว สภาพแวดล้อมการจัดเตรียมจะรวมอยู่ในแผนทั้งหมดฟรี อ่านบทความ KB นี้สำหรับข้อมูลเพิ่มเติม
เวิร์กโฟลว์ GitHub Actions คืออะไร
เวิร์กโฟลว์เป็นกระบวนการอัตโนมัติที่เรียกโดยเหตุการณ์อย่างน้อยหนึ่ง เหตุการณ์ และเรียกใช้งานตั้งแต่หนึ่ง งาน ขึ้นไป แต่ละงานประกอบด้วยหนึ่ง ขั้นตอน ขึ้นไป สุดท้าย แต่ละขั้นตอนสามารถเรียกใช้สคริปต์หรือ GitHub Action ได้ ที่เก็บสามารถมีหลายเวิร์กโฟลว์ โดยดำเนินงานที่แตกต่างกัน
การใช้เวิร์กโฟลว์ GitHub Actions มีประโยชน์มากมาย
- คุณใช้เวลาน้อยลงในการทำงานด้วยตนเอง ใช้แรงงานมาก และทำงานซ้ำๆ เวลาเพิ่มมูลค่า
- ง่ายกว่าที่จะสอดคล้องกันในสภาพแวดล้อมโดยการบังคับใช้กระบวนการปรับใช้เฉพาะ
- มันรวมเข้ากับที่เก็บ GitHub ของคุณ ทำให้คุณสามารถติดตามการเปลี่ยนแปลง เข้าถึงบันทึกการใช้งาน ฯลฯ
- ใช้ซ้ำได้ซึ่งหมายความว่าคุณสามารถใช้เวิร์กโฟลว์เดียวกันในที่เก็บข้อมูลทั้งหมดของคุณ
เริ่มต้นใช้งาน
มาเริ่มต้นเวิร์กโฟลว์แรกของคุณด้วยการสร้างไฟล์ YAML ใหม่ใน .github/workflows/
ในที่เก็บ GitHub ของคุณ เราจะเริ่มด้วยเวิร์กโฟลว์ง่ายๆ เพื่อปรับใช้กับการผลิตโดยอัตโนมัติ ดังนั้นเรามาตั้งชื่อไฟล์นี้ว่า deploy.yml
# .github/workflows/deploy.yml name: deploy on: push: branches: # Pushing to the `main` branch # will trigger our workflow - main
เราใช้คำหลัก on
เพื่อกำหนดว่าเหตุการณ์ใดอาจทริกเกอร์เวิร์กโฟลว์ ในตัวอย่างนี้ เวิร์กโฟลว์จะทำงานเมื่อมีการพุชไปยังสาขา main
เราอาจไม่จำเป็นต้องปรับใช้เลยเมื่อไฟล์บางไฟล์มีการเปลี่ยนแปลง เช่น README.md
เราสามารถใช้ on.push.paths-ignore
เพื่อแยกรูปแบบพาธของไฟล์
name: deploy on: push: branches: - main paths-ignore: - 'bin/**' - 'README.m
สร้างงานแรกของคุณ
เวิร์กโฟลว์ประกอบด้วยงานตั้งแต่หนึ่งงานขึ้นไป ในตัวอย่างนี้ คุณจะใช้งานการ deploy
เพียงครั้งเดียวเพื่ออัปโหลดไฟล์ของคุณไปยังสภาพแวดล้อมการใช้งานจริงของเว็บไซต์ของคุณ
name: deploy on: [...] jobs: deploy: runs-on: ubuntu-latest steps: [...]
แต่ละงานจะทำงานในสภาพแวดล้อมแบบรันเนอร์ ซึ่งระบุโดย runs-on
น ในบล็อก YAML ด้านบน เราใช้ ubuntu-latest
ซึ่งเป็นเครื่องเสมือน (VM) ของ Ubuntu Linux ซึ่งโฮสต์โดย GitHub พร้อมกับแอปพลิเคชันรันเนอร์และเครื่องมืออื่นๆ ที่ติดตั้งไว้ล่วงหน้า
คุณสามารถใช้รันเนอร์ที่โฮสต์โดย GitHub หรือโฮสต์รันเนอร์ของคุณเองและปรับแต่งสภาพแวดล้อมที่ใช้ในการรันงาน อย่างไรก็ตาม สิ่งหลังนี้อยู่นอกเหนือขอบเขตของบทความนี้
ตรวจสอบที่เก็บ Git ของคุณ
ก่อนที่คุณจะสามารถทำสิ่งใดที่มีความหมายกับโค้ดของคุณได้ คุณต้อง ตรวจสอบ ที่เก็บข้อมูลของคุณ เพื่อให้เวิร์กโฟลว์ของคุณสามารถเข้าถึงได้ คุณสามารถใช้การดำเนินการ ชำระเงิน สำหรับสิ่งนั้น
jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout # Checkout our repository under `${GITHUB_WORKSPACE}`, # so our workflow can access it uses: actions/checkout@v3 with: # Fetch the entire Git history fetch-depth: 0
เราระบุ fetch-depth
เป็น 0
ซึ่งจะส่งผลให้มีการดึงข้อมูลประวัติ Git ทั้งหมด เราต้องการสิ่งนี้เพื่ออัปโหลดเฉพาะไฟล์ที่มีการเปลี่ยนแปลงในการเรียกใช้ครั้งต่อๆ ไป
การสร้างผู้ใช้ SFTP
หากต้องการอัปโหลดไฟล์ไปยังผู้ให้บริการโฮสติ้ง คุณต้องมีรายละเอียดการเชื่อมต่อ SFTP (เช่น โฮสต์ พอร์ตเครือข่าย และพาธ) และผู้ใช้ SFTP
ส่วนใหญ่แล้ว คุณสามารถดูรายละเอียดเหล่านี้และสร้างผู้ใช้ SFTP ผ่านแดชบอร์ดของผู้ให้บริการโฮสติ้ง โฮสต์เว็บบางแห่งจะส่งอีเมลรายละเอียดเหล่านี้ให้คุณด้วย
หากคุณใช้ Pressidium อยู่แล้ว ให้ทำตามขั้นตอนเหล่านี้:
- เข้าสู่ระบบแผงควบคุม Pressidium ของคุณ
- เลือกตัวเลือกเมนู เว็บไซต์ จากแถบด้านข้างแดชบอร์ด
- คลิกที่ชื่อเว็บไซต์ของคุณ
- ไปที่แท็บ SFTP โดยคลิกลิงก์บนแถบนำทาง
- จดบันทึกรายละเอียดการ เชื่อมต่อ SFTP ของคุณ
- สร้าง ผู้ใช้ SFTP ใหม่
วิธีสร้างผู้ใช้ SFTP ใหม่:
- คลิก ใหม่
- เลือก สภาพแวดล้อม ( การผลิต หรือ การจัดเตรียม )
- ระบุ ชื่อผู้ใช้ และ รหัสผ่าน (แนะนำให้ใช้รหัสผ่านที่เดายาก ผสมอักขระละตินตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ตัวเลข และอักขระพิเศษ)
- จดบันทึกชื่อผู้ใช้และรหัสผ่านที่คุณป้อน
- คลิก สร้าง เพื่อสร้างผู้ใช้
ในขั้นตอนที่สอง คุณควรเลือกสภาพแวดล้อมที่คุณต้องการปรับใช้ สำหรับตัวอย่างนี้ เราจะสร้างผู้ใช้สำหรับแต่ละสภาพแวดล้อม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึงไซต์ Pressidium WordPress ผ่าน SFTP โปรดดูบทความ KB นี้
การจัดเก็บข้อมูลที่ละเอียดอ่อน
คุณสามารถป้อนรายละเอียดการเชื่อมต่อ SFTP และข้อมูลรับรองผู้ใช้ SFTP ได้โดยตรงในเวิร์กโฟลว์ GitHub Actions ของคุณ อย่างไรก็ตาม การจัดเก็บข้อมูลที่ละเอียดอ่อนในที่เก็บข้อมูลของคุณเป็นความคิดที่ไม่ดี
GitHub นำเสนอ ความลับที่เข้ารหัส เป็นวิธีการจัดเก็บข้อมูลที่ละเอียดอ่อนในองค์กร พื้นที่เก็บข้อมูล หรือสภาพแวดล้อมพื้นที่เก็บข้อมูลของคุณ
วิธีสร้างความลับที่เข้ารหัสสำหรับที่เก็บ:
- ลงชื่อเข้าใช้บัญชี GitHub ของคุณ
- ไปที่หน้าหลักของที่เก็บของคุณ
- ภายใต้ชื่อที่เก็บของคุณ ให้คลิก การตั้งค่า
- เลือก ความลับ แล้วคลิก การ ดำเนิน การ ใต้ส่วนความปลอดภัยของแถบด้านข้าง
- คลิกปุ่ม ความลับที่เก็บใหม่
- พิมพ์ ชื่อ ลับและ ค่า ของมัน
- คลิก เพิ่มความลับ
คุณควรจบลงด้วยรายการความลับที่คล้ายกับรายการนี้:
-
SFTP_HOST
ชื่อโฮสต์ของเซิร์ฟเวอร์ SFTP -
SFTP_PORT
พอร์ตของเซิร์ฟเวอร์ SFTP -
SFTP_USER
ชื่อผู้ใช้ที่จะใช้สำหรับการตรวจสอบสิทธิ์ -
SFTP_PASS
รหัสผ่านที่ใช้สำหรับการตรวจสอบสิทธิ์
การอัปโหลดไฟล์ผ่าน SFTP
ในการอัปโหลดไฟล์ของคุณผ่าน SFTP คุณสามารถใช้——คุณคาดเดา——อีก GitHub Action
มีไคลเอนต์ SFTP และ GitHub Actions ให้เลือกมากมาย เราใช้ lftp-mirror-action ของเราเอง ซึ่งใช้ lftp
ภายใต้ประทุน เครื่องมือถ่ายโอนไฟล์ที่รองรับ SFTP และสามารถถ่ายโอนหลายไฟล์พร้อมกันได้
- name: Deploy via SFTP uses: pressidium/lftp-mirror-action@v1 with: host: ${{ secrets.SFTP_HOST }} port: ${{ secrets.SFTP_PORT }} user: ${{ secrets.SFTP_USER }} pass: ${{ secrets.SFTP_PASS }} remoteDir: '/demo-www/wp-content/themes/my-theme' options: '--verbose'
การกำหนดค่าอินพุตของ lftp-mirror-action ค่อนข้างตรงไปตรงมา:
- รายละเอียดการเชื่อมต่อ SFTP และข้อมูลรับรองผู้ใช้ SFTP ของคุณสามารถเข้าถึงได้ผ่านบริบท
secrets
(เช่น${{ secrets.SFTP_HOST }}
) -
remoteDir
คือพาธไปยังไดเร็กทอรีของธีมของคุณ - ตัวเลือก
'--verbose'
จะเปิดใช้งานเอาต์พุตแบบละเอียด ซึ่งจะบันทึกการถ่ายโอนไฟล์ทั้งหมด (มีประโยชน์สำหรับการแก้ไขปัญหา)
บน Pressidium เส้นทางจะมีรูปแบบดังนี้:
-
YOUR_INSTALLATION_NAME-www/
เป็นเส้นทางรูทของ สภาพ แวดล้อมการใช้งานจริง -
YOUR_INSTALLATION_NAME-dev-www/
เป็นเส้นทางรูทของสภาพแวดล้อม การจัดเตรียม
โดยที่ YOUR_INSTALLATION_NAME
คือชื่อการติดตั้งของคุณ โปรดทราบว่าเจ้าของบัญชีมีบัญชี SFTP ซึ่งแสดงเป็นบัญชี "หลัก" ที่สามารถเข้าถึงเว็บไซต์ ทั้งหมด ดังนั้นเส้นทางของพวกเขาจะแตกต่างจากด้านบน ขอแนะนำให้หลีกเลี่ยงการใช้บัญชีนี้และสร้างบัญชีแยกต่างหากสำหรับแต่ละเว็บไซต์ที่คุณต้องการเข้าถึง
คุณสามารถเลือกสร้างไฟล์ . .lftp_ignore
ในที่เก็บของคุณ รวมถึงรูปแบบไฟล์ใดๆ ที่คุณต้องการยกเว้นจากการปรับใช้
นี่คือตัวอย่างลักษณะที่ปรากฏ:
## Directories to ignore .vscode/** .env.** .git/ .github/ ## Files to ignore .gitignore package.json package-lock.json composer.json composer.lock
วางมันทั้งหมดเข้าด้วยกัน
name: deploy on: push: branches: - main paths-ignore: - 'bin/**' - 'README.md' jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Deploy via SFTP uses: pressidium/lftp-mirror-action@v1 with: host: ${{ secrets.SFTP_HOST }} port: ${{ secrets.SFTP_PORT }} user: ${{ secrets.SFTP_USER }} pass: ${{ secrets.SFTP_PASS }} remoteDir: '/demo-www/wp-content/themes/my-theme' options: '--verbose'
แค่นั้นแหละ! ขั้นตอนการทำงานของคุณสามารถใช้ธีม WordPress ของคุณได้โดยอัตโนมัติ
สร้างและปรับใช้ธีม WordPress ของคุณ
จนถึงตอนนี้ เราได้ทำให้สิ่งต่างๆ เรียบง่ายโดยมุ่งเน้นไปที่การปรับใช้ไฟล์ของคุณโดยไม่สนใจการอ้างอิงใดๆ ที่คุณอาจจำเป็นต้องติดตั้ง สร้างสคริปต์ที่คุณอาจจำเป็นต้องเรียกใช้ และอื่นๆ เป็นต้น
ตามตัวอย่างการตั้งค่า เราจะใช้ที่เก็บ GitHub ที่มีสองสาขา:
- สาขา
main
ที่เสถียรและพร้อมสำหรับการผลิต ซึ่งจะปรับใช้กับสภาพแวดล้อม การผลิต - สาขาการ
preview
ที่ยังไม่ทดสอบซึ่งทำหน้าที่เป็นสาขาการรวมสำหรับคุณสมบัติและจะถูกปรับใช้กับสภาพแวดล้อม การแสดงละคร
ได้เวลาแนะนำงานบิลด์และเปลี่ยนชื่อเวิร์กโฟลว์ของเราเป็น build
build-deploy
เนื่องจากจะต้องรับผิดชอบในการสร้างและปรับใช้โค้ดของเรา
name: build-deploy on: push: branches: - main paths-ignore: - 'bin/**' - 'README.md' jobs: build: runs-on: ubuntu-latest steps: [...] deploy: [...]
ตรวจสอบที่เก็บ Git ของคุณ
งานแต่ละงานทำงานในอินสแตนซ์ใหม่ของอิมเมจนักวิ่ง ดังนั้นคุณต้องตรวจสอบที่เก็บ GitHub ของคุณอีกครั้งในงาน build
build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3
คุณไม่จำเป็นต้องดึงข้อมูลประวัติ Git ทั้งหมดในงานบิลด์ คุณจึงใช้ค่าเริ่มต้นสำหรับอินพุตของการดำเนินการได้
การติดตั้งการพึ่งพา
บางธีมใช้แพ็คเกจและไลบรารีของบุคคลที่สาม หากธีมของคุณต้องการแพ็คเกจ PHP และ/หรือ JavaScript คุณอาจต้องการใช้ตัวจัดการแพ็คเกจ เช่น Composer, npm หรือ yarn
สำหรับตัวอย่างนี้ เราจะถือว่าคุณต้องติดตั้งทั้งการขึ้นต่อกันของ Composer และ Node.js โชคดีสำหรับเราที่มีการกระทำที่พร้อมใช้งานสำหรับสิ่งนั้น
steps: - name: Checkout uses: actions/checkout@v3 - name: Install Composer dependencies uses: php-actions/composer@v6 - name: Install Node.js LTS uses: actions/setup-node@v3 with: node-version: 'lts/*' cache: 'yarn' - name: Install Node.js dependencies run: yarn install
การดำเนินการของ นักแต่งเพลง จะเรียกใช้การ composer install
ตามค่าเริ่มต้น ดังนั้นคุณจึงไม่ต้องกำหนดค่าพารามิเตอร์อินพุตใดๆ
สำหรับการดำเนินการ ติดตั้งโหนด เราตั้งค่าที่กำหนดเองสำหรับอินพุต node-version
และ cache
เพื่อระบุว่าเราต้องการ:
- รับ Node.js เวอร์ชันการสนับสนุนระยะยาว (หรือ LTS)
- แคชการอ้างอิงใด ๆ ที่ดึงผ่านตัวจัดการแพ็คเกจเส้นด้าย
จากนั้น ขั้นตอนต่อไปจะ เรียกใช้การ yarn install
เพื่อติดตั้งการพึ่งพา Node.js โปรดจำไว้ว่าขั้นตอนสามารถเรียกใช้สคริปต์หรือ GitHub Action ได้
โปรดทราบว่าการ แคช สามารถเพิ่มความเร็วเวิร์กโฟลว์ของคุณได้อย่างมาก การดาวน์โหลดการอ้างอิงทุกครั้งที่เวิร์กโฟลว์ของคุณทำงานจะทำให้รันไทม์นานขึ้น คุณสามารถแคชการอ้างอิงสำหรับงานโดยใช้การดำเนินการ แคช (ซึ่งเป็นสิ่งที่การดำเนินการ setup-node
ทำภายใต้ประทุนเช่นกัน) เร่งเวลาที่ใช้ในการสร้างไฟล์ใหม่
เรียกใช้กระบวนการสร้างของคุณ
เราจะถือว่าคุณต้องดำเนินการตามกระบวนการ "สร้าง" อีกครั้ง คุณอาจต้องเรียกใช้ตัวประมวลผลล่วงหน้าเพื่อคอมไพล์สไตล์ชีตของคุณ แปลงไฟล์สคริปต์ ES6+ ของคุณ ฯลฯ ซึ่งโดยทั่วไปหมายความว่าคุณได้กำหนดสคริปต์สำหรับ build
ในของคุณ ไฟล์ package.json
ดังนั้น คุณจะต้องมีขั้นตอนอื่นเพื่อเรียกใช้กระบวนการสร้างนั้น
- name: Build theme run: yarn run build
หากคุณต้องการเรียกใช้สคริปต์อื่นสำหรับสาขา main
และการ preview
(เช่น build
สำหรับสาขา main
และ staging
สำหรับการ preview
) คุณสามารถทำได้ดังนี้:
- name: Build theme run: | if [[ "${{ github.base_ref }}" == "main" || "${{ github.ref }}" == "refs/heads/main" ]]; then yarn run build else yarn run staging fi
สุดท้ายนี้ เนื่องจากแต่ละงานทำงานในอินสแตนซ์ใหม่ของภาพนักวิ่ง งานในเวิร์กโฟลว์ของคุณจึงแยกออกจากกันโดยสิ้นเชิง ซึ่งหมายความว่าคุณต้องการวิธีจัดเก็บไฟล์ชั่วคราวที่คุณเพิ่งสร้าง เพื่อให้งาน deploy
สามารถเข้าถึงไฟล์เหล่านั้นได้ ป้อน สิ่งประดิษฐ์
สิ่งประดิษฐ์
อาร์ติแฟกต์ทำให้คุณสามารถคงข้อมูลไว้ได้หลังจากงานเสร็จสิ้น คุณจึงสามารถแชร์ข้อมูลระหว่างงานในเวิร์กโฟลว์ได้
ขอแนะนำขั้นตอนเพิ่มเติมในงาน build
ของคุณเพื่อคงข้อมูลที่สร้างขึ้นระหว่างขั้นตอนการสร้างด้วยระยะเวลาการเก็บรักษา 1 วัน โดยใช้การดำเนินการ อัปโหลดอาร์ติแฟ กต์ เราจะถือว่า Composer ติดตั้งการขึ้น build
กันในไดเร็กทอรี vendor/
และสคริปต์บิลด์ของเราจะส่งออกไฟล์ไปยังไดเร็กทอรี dist/
- name: Upload artifact uses: actions/upload-artifact@v3 with: name: my-theme-build path: | dist/ vendor/ retention-days: 1
ขึ้นอยู่กับขนาดของพื้นที่เก็บข้อมูลและความถี่ที่คุณพุช คุณอาจต้องการดูขีดจำกัดการใช้งาน การเรียกเก็บเงิน และการดูแลระบบของ GitHub
ในขณะที่เขียน ตามค่าเริ่มต้น GitHub จะจัดเก็บบันทึกการสร้างและสิ่งประดิษฐ์เป็นเวลา 90 วัน และให้พื้นที่เก็บข้อมูล 500 MB ในแผน "GitHub ฟรี"
รันงานตามลำดับ
เวิร์กโฟลว์ประกอบด้วยงานตั้งแต่หนึ่งงานขึ้นไป ซึ่งทำงานพร้อมกันโดยค่าเริ่มต้น ในกรณีของเรา เราต้องสร้างธีมของเราก่อนจึงจะปรับใช้ได้ ในการเรียกใช้งานบิลด์และ deploy
ตามลำดับ คุณต้องกำหนดการอ้างอิงโดยใช้คีย์เวิร์ด jobs.<job_id>.needs
build
deploy: runs-on: ubuntu-latest needs: build
ในตัวอย่างด้านล่าง เราระบุว่างาน build
ด์ต้องเสร็จสมบูรณ์ก่อนจึงจะสามารถเรียกใช้งานการ deploy
ใช้
name: build-deploy on: [...] jobs: build: runs-on: ubuntu-latest steps: [...] deploy: runs-on: ubuntu-latest needs: build steps: [...]
กำลังดาวน์โหลดสิ่งประดิษฐ์
ก่อนที่คุณจะสามารถอัปโหลดข้อมูลใด ๆ ที่สร้างขึ้นในระหว่างขั้นตอนการสร้าง คุณต้องดาวน์โหลดข้อมูลเหล่านั้น มาดูการ deploy
งานอีกครั้งและแนะนำขั้นตอนเพิ่มเติม
- name: Download artifact uses: actions/download-artifact@v3 with: name: my-theme-build path: .
คุณสามารถใช้การดำเนิน การ ดาวน์โหลด -Arti คล้ายกับการ อัปโหลดสิ่งประดิษฐ์ ตรวจสอบให้แน่ใจว่าคุณระบุชื่อเดียวกัน - my-theme-build
ในกรณีนี้ - สำหรับทั้งสองการกระทำ
วางมันทั้งหมดเข้าด้วยกัน
name: build-deploy on: push: branches: - main paths-ignore: - 'bin/**' - 'README.md' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Install Composer dependencies uses: php-actions/composer@v6 - name: Install Node.js LTS uses: actions/setup-node@v3 with: node-version: 'lts/*' cache: 'yarn' - name: Install Node.js dependencies run: yarn install - name: Build theme run: | if [[ "${{ github.base_ref }}" == "main" || "${{ github.ref }}" == "refs/heads/main" ]]; then yarn run build else yarn run staging fi - name: Upload artifact uses: actions/upload-artifact@v3 with: name: my-theme-build path: | dist/ vendor/ retention-days: 1 deploy: runs-on: ubuntu-latest needs: build steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Download artifact uses: actions/download-artifact@v3 with: name: my-theme-build path: . - name: Deploy via SFTP uses: pressidium/lftp-mirror-action@v1 with: host: ${{ secrets.SFTP_HOST }} port: ${{ secrets.SFTP_PORT }} user: ${{ secrets.SFTP_USER }} pass: ${{ secrets.SFTP_PASS }} remoteDir: '/demo-www/wp-content/themes/my-theme' options: '--verbose'
ตอนนี้คุณมีเวิร์กโฟลว์ GitHub Actions ที่สามารถสร้างและปรับใช้โค้ดของคุณในการผลิตโดยอัตโนมัติเมื่อคุณส่งไปยังสาขา main
! อย่างไรก็ตาม ในตอนต้นของบทความนี้ เราได้อธิบายถึงเวิร์กโฟลว์ที่สามารถปรับใช้กับทั้งสภาพแวดล้อมการผลิต และ การจัดเตรียม โดยขึ้นอยู่กับสาขาที่คุณกำลังพุช หากคุณยังคงพร้อมอ่านต่อไป!
ปรับใช้ธีมของคุณกับสภาพแวดล้อมที่หลากหลาย
การปรับใช้กับหลายสภาพแวดล้อมอาจต้องเปลี่ยนเวิร์กโฟลว์ของคุณเล็กน้อย ตัวอย่างเช่น ขอแนะนำให้มีผู้ใช้ SFTP แยกต่างหากสำหรับแต่ละสภาพแวดล้อมและถือเป็นแนวทางปฏิบัติที่ดีที่สุด ใน Pressidium ผู้ใช้ SFTP จะแตกต่างกันสำหรับสภาพแวดล้อมการผลิตและการแสดงละครของเว็บไซต์
ดังนั้นเรามาสร้างความลับที่แตกต่างกันสำหรับชื่อผู้ใช้/รหัสผ่านของผู้ใช้แต่ละคน ซึ่งหมายความว่ารายการลับที่เข้ารหัสที่อัปเดตของเราควรมีลักษณะดังนี้:
-
SFTP_HOST
-
SFTP_PORT
-
SFTP_PROD_USER
-
SFTP_PROD_PASS
-
SFTP_STAG_USER
-
SFTP_STAG_PASS
คุณอาจต้องอัปเดตโฮสต์และพอร์ตเครือข่ายด้วย แม้ว่าในกรณีนี้ ไม่จำเป็นต้องเปลี่ยนสิ่งเหล่านั้น เนื่องจากสิ่งเหล่านั้นเหมือนกันสำหรับทั้งสองสภาพแวดล้อม
การตั้งค่าตัวแปรสภาพแวดล้อม
ตัวแปรสภาพแวดล้อม คือตัวแปรที่ประกอบด้วยคู่ของชื่อ/ค่า และเป็นส่วนหนึ่งของสภาพแวดล้อมที่กระบวนการทำงาน
ในเวิร์กโฟลว์ GitHub Actions คุณสามารถใช้คีย์เวิร์ด env
เพื่อตั้งค่าตัวแปรสภาพแวดล้อมที่กำหนดเองซึ่งมีขอบเขตสำหรับ:
- เวิร์กโฟลว์ทั้งหมด โดยใช้
env
ที่ระดับบนสุดของเวิร์กโฟลว์ - งานภายในเวิร์กโฟลว์ โดยใช้
env
ที่ระดับของงานนั้น - ขั้นตอนเฉพาะภายในงาน โดยใช้
env
ที่ระดับของขั้นตอนนั้น
คุณยังสามารถผนวกตัวแปรสภาพแวดล้อมเข้ากับ $GITHUB_ENV
ซึ่งทำให้ตัวแปรนั้นพร้อมใช้งานสำหรับขั้นตอนต่อๆ ไปในงานเวิร์กโฟลว์
อย่างที่คุณเห็น มีหลายวิธีในการสร้างเวิร์กโฟลว์ของคุณ ดังนั้นอย่าลังเลที่จะใช้สิ่งที่เหมาะสมที่สุดสำหรับคุณ
ในกรณีของเรา เราตั้งค่าตัวแปรสภาพแวดล้อมภายในขั้นตอนของงานเพื่อเก็บค่าไว้ชั่วคราวและเข้าถึงได้จากขั้นตอนอื่นที่ทำงานในภายหลังในเวิร์กโฟลว์ของเรา เราจะผนวกตัวแปรสภาพแวดล้อมเข้ากับ $GITHUB_ENV
ภายในขั้นตอนที่ดำเนินการสำหรับเหตุการณ์ push
ชไปยังสาขาเฉพาะเพื่อแสดงวิธีตั้งค่าตัวแปรแบบกำหนดเองแบบมีเงื่อนไข
- name: Set environment variables (main) if: github.ref == 'refs/heads/main' run: | echo "SFTP_USER=${{ secrets.SFTP_PROD_USER }}" >> $GITHUB_ENV echo "SFTP_PASS=${{ secrets.SFTP_PROD_PASS }}" >> $GITHUB_ENV echo "DEPLOY_PATH=/demo-www/wp-content/themes/my-theme" >> $GITHUB_ENV - name: Set environment variables (preview) if: github.ref == 'refs/heads/preview' run: | echo "SFTP_USER=${{ secrets.SFTP_STAG_USER }}" >> $GITHUB_ENV echo "SFTP_PASS=${{ secrets.SFTP_STAG_PASS }}" >> $GITHUB_ENV echo "DEPLOY_PATH=/demo-dev-www/wp-content/themes/my-theme" >> $GITHUB_ENV
เราใช้คำหลัก if
เพื่อจำกัดแต่ละขั้นตอนไว้เฉพาะสาขา ด้วยวิธีนี้ ตั้งค่าตัวแปรสภาพแวดล้อม (หลัก) จะทำงานก็ต่อเมื่อการเปลี่ยนแปลงถูกพุชไปยังสาขา main
เท่านั้น
$DEPLOY_PATH
อาจแตกต่างกันไปในแต่ละสภาพแวดล้อม
ตัวอย่างเช่น บน Pressidium:
- เส้นทางสำหรับสภาพแวดล้อมการผลิตเป็นไปตามรูปแบบ
/<WEBSITE_NAME>-www/
- เส้นทางสำหรับสภาพแวดล้อมการจัดเตรียมเป็นไปตามรูปแบบ
/<WEBSITE_NAME>-dev-www/
การตั้งค่าเอาต์พุต
เราต้องการใช้ตัวแปรสภาพแวดล้อมที่เราเพิ่งตั้งค่าเป็นอินพุตให้กับ GitHub Action ที่จะถ่ายโอนไฟล์ผ่าน SFTP
น่าเสียดายที่ในขณะนี้ ดูเหมือนจะเป็นไปไม่ได้ที่จะอ้างอิงตัวแปรสภาพแวดล้อมเป็น อินพุต ของ GitHub Action คุณสามารถแก้ไขได้โดยสร้างขั้นตอนเพิ่มเติมที่จะส่งออกค่าที่คุณต้องใช้เป็นอินพุตในภายหลัง
- name: Set outputs # Workaround to reference environment variables as inputs # using step outputs, since we can't pass environment # variables as inputs at the moment. id: sftp_details run: | echo "user=${SFTP_USER}" >> $GITHUB_OUTPUT echo "pass=${SFTP_PASS}" >> $GITHUB_OUTPUT echo "deploy_path=${DEPLOY_PATH}" >> $GITHUB_OUTPUT
ขณะนี้ คุณมีเอาต์พุต user
, pass
และ deploy_path
สำหรับขั้นตอน sftp_details
ซึ่งคุณสามารถใช้อ้างอิงค่าเหล่านี้เป็นอินพุตของขั้นตอนถัดไปได้
การอัปโหลดไฟล์ไปยังสภาพแวดล้อมต่างๆ
การอัปโหลดไฟล์ผ่าน SFTP ค่อนข้างเหมือนเดิม แต่แทนที่จะอ้างอิงบริบท secrets
และฮาร์ดโค้ด remoteDir
คุณจะใช้ผลลัพธ์ของขั้นตอนก่อนหน้า
- name: Deploy via SFTP uses: pressidium/lftp-mirror-action@v1 with: host: ${{ secrets.SFTP_HOST }} port: ${{ secrets.SFTP_PORT }} user: ${{ steps.sftp_details.outputs.user }} pass: ${{ steps.sftp_details.outputs.pass }} remoteDir: ${{ steps.sftp_details.outputs.deploy_path }} options: '--verbose'
ใช้ ${{ steps.<step_id>.outputs.<output_name> }}
เพื่อเข้าถึงผลลัพธ์ของขั้นตอน ตัวอย่างเช่น ${{ steps.sftp_details.outputs.user }}
เพื่อเข้าถึงเอาต์พุต user
ของขั้นตอน sftp_details
ว้า ในที่สุด! เวิร์กโฟลว์ของคุณสามารถสร้าง และ ปรับใช้ธีม WordPress ของคุณกับทั้งสภาพแวดล้อมการผลิต และ การแสดงละครของคุณ
รวมเวิร์กโฟลว์ทั้งหมดเข้าด้วยกัน
name: build-deploy on: push: branches: # Pushing to any of the following # branches will trigger our workflow - main - preview paths-ignore: # When all the path names match patterns in `paths-ignore` # the workflow will not run. We don't want to do anything # if we have changed *only* (some of) these files - 'bin/**' - 'README.md' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout # Checkout our repository under `${GITHUB_WORKSPACE}`, # so our workflow can access it uses: actions/checkout@v3 - name: Install Composer dependencies # This will run `composer install` # since that's its default command uses: php-actions/composer@v6 - name: Install Node.js LTS # We use the LTS version of Node.js # and cache packages installed via yarn uses: actions/setup-node@v3 with: node-version: 'lts/*' cache: 'yarn' - name: Install Node.js dependencies run: yarn install - name: Build theme # Run the `build` script for production, # and the `staging` script for staging run: | if [[ "${{ github.base_ref }}" == "main" || "${{ github.ref }}" == "refs/heads/main" ]]; then yarn run build else yarn run staging fi - name: Upload artifact # Persist data produced during the build steps # with a retention period of 1 day uses: actions/upload-artifact@v3 with: name: my-theme-build path: | dist/ vendor/ retention-days: 1 deploy: runs-on: ubuntu-latest needs: build steps: - name: Checkout uses: actions/checkout@v3 with: # Fetch the entire Git history fetch-depth: 0 - name: Download artifact uses: actions/download-artifact@v3 with: name: my-theme-build path: . - name: Set environment variables (main) if: github.ref == 'refs/heads/main' run: | echo "SFTP_USER=${{ secrets.SFTP_PROD_USER }}" >> $GITHUB_ENV echo "SFTP_PASS=${{ secrets.SFTP_PROD_PASS }}" >> $GITHUB_ENV echo "DEPLOY_PATH=/demo-www/wp-content/themes/my-theme" >> $GITHUB_ENV - name: Set environment variables (preview) if: github.ref == 'refs/heads/preview' run: | echo "SFTP_USER=${{ secrets.SFTP_STAG_USER }}" >> $GITHUB_ENV echo "SFTP_PASS=${{ secrets.SFTP_STAG_PASS }}" >> $GITHUB_ENV echo "DEPLOY_PATH=/demo-dev-www/wp-content/themes/my-theme" >> $GITHUB_ENV - name: Set outputs # Workaround to reference environment variables as inputs # using step outputs, since we can't pass environment # variables as inputs at the moment. id: sftp_details run: | echo "user=${SFTP_USER}" >> $GITHUB_OUTPUT echo "pass=${SFTP_PASS}" >> $GITHUB_OUTPUT echo "deploy_path=${DEPLOY_PATH}" >> $GITHUB_OUTPUT - name: Deploy via SFTP uses: pressidium/lftp-mirror-action@v1 with: host: ${{ secrets.SFTP_HOST }} port: ${{ secrets.SFTP_PORT }} user: ${{ steps.sftp_details.outputs.user }} pass: ${{ steps.sftp_details.outputs.pass }} remoteDir: ${{ steps.sftp_details.outputs.deploy_path }} options: '--verbose'
คุณยังสามารถค้นหาตัวอย่างธีม WordPress และเวิร์กโฟลว์ GitHub Actions ได้ในที่เก็บ GitHub นี้
บทสรุป
คุณมีมัน! GitHub Actions เป็นเครื่องมืออันทรงพลังที่ทำให้การสร้างและการปรับใช้ธีมและปลั๊กอิน WordPress ของคุณเป็นแบบอัตโนมัติเป็นเรื่องง่าย
เราแทบจะไม่มีรอยขีดข่วนของสิ่งที่คุณสามารถทำได้ด้วย GitHub Actions ขั้นตอนต่อไปของคุณอาจเป็นการดำเนินการทดสอบใดๆ ที่คุณอาจมี การเปิดปัญหาหรือการแจ้งเตือนบน Slack โดยอัตโนมัติเมื่อการปรับใช้เสร็จสิ้น และรายการจะดำเนินต่อไป
ดูที่ GitHub Marketplace ซึ่ง ณ เวลาที่เขียน คุณจะพบการกระทำมากกว่า 15,000 รายการที่จะใช้ในเวิร์กโฟลว์ GitHub Actions ของคุณ
ดังนั้นสิ่งที่คุณรอ?
- ดูเวิร์กโฟลว์ของที่เก็บนี้บน GitHub
- สร้างไฟล์ YAML ใหม่ภายใต้
.github/workflows/
ในที่เก็บ Git ของคุณ - เพลิดเพลินกับการสร้างและการปรับใช้อัตโนมัติ
มีความสุขในการปรับใช้!