Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Android

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

มีงานซ้ำๆ ที่เราต้องทำทุกวัน ซึ่งอาจน่าเบื่อ ยาก และน่าเบื่อหน่าย

แทนที่จะทำงานเหล่านั้นเอง คุณสามารถมอบหมายให้คนอื่นหรือระบบอัตโนมัติทำให้ คุณจะมีเวลาทำสิ่งที่อยากทำและพักผ่อนได้

หากเคยพัฒนาแอป Android คุณจะรู้ว่างานบางอย่างน่าเบื่อมาก:

  • รันการทดสอบ
  • ตรวจสอบว่าแอปคอมไพล์ได้เมื่อ merge โค้ดใหม่
  • สร้างและเผยแพร่แอปพลิเคชัน

ควรมอบหมายให้ใคร? เพื่อนร่วมงาน? พวกเขาก็จะส่งต่อให้คนอื่น และไม่ได้ช่วยให้ใครมีเวลาว่างขึ้น ไม่ควรทำให้เพื่อนร่วมงานผิดหวัง วิธีแก้คือ GitHub Actions 👐

GitHub Actions คืออะไร?

GitHub Actions คือคำสั่งที่เราสามารถทริกเกอร์เมื่อมีเหตุการณ์เกิดขึ้นใน repository โดยปืนฐาน Action คือไฟล์การตั้งค่า YAML (.yml) ที่มีรายการคำสั่งอธิบายว่า:

  • ต้องทำอะไร
  • เมื่อใดควรทำ

ตัวอย่างไฟล์ YAML:

name: My GitHub Action on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1

แยกวิเคราะห์ตัวอย่าง:

  1. ตั้งชื่อ action (My GitHub Action) [Optional]
  2. ระบุเมื่อ action ควรทำงาน (เมื่อ pull request ถูกเปิด)
  3. เริ่มรายการงาน (jobs) ที่ควรเกิดขึ้นเมื่อ action ถูกทริกเกอร์
  4. งานแรกคือ build
  5. runs-on บอก GitHub ว่า runner ไหนจะรัน job นี้ (virtual server เลือก Windows/Mac/Linux)
  6. แต่ละ job มีหลายขั้นตอน จัดกลุ่มด้วย keyword steps
  7. uses บอกสคริปต์ว่าให้ทำ action อะไร

นี่เป็นตัวอย่างสั้น ไม่แสดงฟีเจอร์ทั้งหมด แต่แสดงโครงสร้างไฟล์ตั้งค่า

ต่อไปเราจะสร้าง actions ที่ช่วยให้รอบการพัฒนาประสิทธิภาพและมีประสิทธิผล

โปรดทราบว่าไฟล์ GitHub Actions ทั้งหมดต้องอยู่ในโฟลเดอร์ .github/workflows ของโปรเจกต์:

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

สร้าง GitHub Action สำหรับ Pull Requests

ไม่ว่าคุณจะทำงานคนเดียวหรือทีม การรับรองว่าแอปพลิเคชันเสถียรเป็นสิ่งสำคัญ จึงควรตรวจสอบว่าแอปคอมไพล์ได้และทดสอบผ่านทุกครั้งก่อน merge pull request

เราได้แสดงวิธี checkout โค้ดแล้ว ใน action นี้เราจะเพิ่มขั้นตอน:

  1. ตั้งค่า JDK version
  2. เปลี่ยน permission สำหรับ virtual environment
  3. รันการทดสอบ (ถ้ามี)
  4. สร้างแอปพลิเคชัน
name: Android Build on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set Up JDK // 1 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Change wrapper permissions // 2 run: chmod +x ./gradlew - name: Run Tests // 3 run: ./gradlew test - name: Build Project // 4 run: ./gradlew assemble

แต่ละขั้นตอนมี properties และ attributes เฉพาะตัว ไม่ได้ลงรายละเอียดแต่ละอย่าง เพราะคุณอ่านเอกสารได้เอง สิ่งที่เหมือนกันในส่วนใหญ่คือ keyword run ที่ระบุคำสั่งที่จะรัน

✋ ขั้นตอนที่ 2 จำเป็น เพื่อให้ virtual environment รันคำสั่ง gradle ได้ มิฉะนั้นจะไม่ทำงาน

สร้าง GitHub Action สำหรับเผยแพร่แอปพลิเคชัน

หลังจากเผยแพร่แอปครั้งแรก การเผยแพร่ซ้ำกลายเป็นงานน่าเบื่อ ต้องอัปเกรด version สร้าง APK ส่งผ่าน Google Play Console ฯลฯ

เราสามารถทำให้อัตโนมัติด้วย GitHub action อีกตัวหนึ่ง ซึ่งซับซ้อนกว่าเดิม เพราะต้องใช้ GitHub Secrets

GitHub Secrets คือวิธีเก็บข้อมูลสำคัญเป็น environment variables ของ repository เราต้องใช้เพราะ:

  1. ต้องเซ็นแอปพลิเคชัน
  2. ให้ action มีสิทธิ์ส่งแอปที่สร้างขึ้นไปที่ Google Play Store

มาดูวิธีสร้าง GitHub Secrets:

  • ในหน้าหลัก repository คลิกแท็บ Settings
ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน
  • เมนูซ้ายมีตัวเลือก Secrets
ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน
  • กดปุ่ม New repository secret เพื่อสร้าง secret
ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

ดูสคริปต์สำหรับเผยแพร่แอป:

name: Android Publish on: workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set Up JDK uses: actions/setup-java@v1 with: java-version: 1.8 - name: Change wrapper permissions run: chmod +x ./gradlew - name: Run Tests run: ./gradlew test - name: Build Project run: ./gradlew build - name: Build Release AAB // 1 run: ./gradlew bundleRelease - name: Sign AAB // 2 uses: r0adkll/sign-android-release@v1 with: releaseDirectory: app/build/outputs/bundle/release signingKeyBase64: ${{ secrets.SIGN_KEY }} alias: ${{ secrets.ALIAS }} keyStorePassword: ${{ secrets.STORE_KEY_PASSWORD }} keyPassword: ${{ secrets.KEY_PASSWORD }} - name: Deploy to Play Store // 3 uses: r0adkll/upload-google-play@v1 with: serviceAccountJsonPlainText: ${{secrets.SERVICE_ACCOUNT}} packageName: com.tomerpacific.laundry releaseFiles: app/build/outputs/bundle/release/app-release.aab track: production

สังเกตว่า action นี้รัน on workflow_dispatch หมายถึงสามารถทริกเกอร์ด้วยตนเองจาก GitHub ได้ คุณสามารถตั้งให้รันเมื่อ push ไปที่ main branch ก็ได้

ขั้นตอนที่ 1 สร้าง .aab ของแอป ต่อมาเซ็น .aab เหมือนตอน build ใน Android Studio นี่คือครั้งแรกที่ใช้ GitHub Secrets ต้องสร้าง secrets สำหรับ:

  • Signing Key (secrets.SIGN_KEY)
  • Key Alias (secrets.ALIAS)
  • Store Key Password (secrets.STORE_KEY_PASSWORD)
  • Key Password (secrets.KEY_PASSWORD)

หลังเซ็น .aab แล้ว สามารถ deploy ไป Google Play Store ได้ ขั้นตอนนี้ต้องทำเพิ่มเติม ให้ GitHub Action มีสิทธิ์ deploy แอปให้เราบน Google Play โดยใช้ Service Account

สร้าง Service Account

Service account คือ entity ที่คุณสร้างขึ้น เพื่อบอกบริการหรือแอปพลิเคชันที่มันโต้ตอบว่า มันทำงานแทนคุณ

ในกรณีนี้ GitHub Action จะโต้ตอบกับ Google Play Store เพื่ออัปโหลด version ใหม่ของแอป

ไปที่ Google Cloud Console สร้างบัญชีหากยังไม่มี เมนูซ้ายมี Service Accounts

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

คลิกแล้วจะเห็น service accounts ที่มีอยู่ ด้านขวาบนมีปุ่มสร้างใหม่

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

กรอกชื่อและคำอธิบาย service account

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

ชื่อที่นี่จะเป็น unique identifier ขั้นตอนที่ 2 ให้ role จาก dropdown Select A Role เลือก Basic → Editor

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

ขั้นตอนที่ 3 กรอกอีเมลในทั้งสองช่องภายใต้ "Grant users access to this service account"

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

กด Done แล้วต้องสร้าง key ให้ service account Action จะใช้ key นี้เพื่อระบุตัวตนกับ Google Play

คลิกสามจุดแนวนอนใต้ Actions ในหน้า service account หลัก เลือก Manage keys

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

สร้าง key ใหม่โดยกด New Key เลือก "Create new key"

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

เลือก format JSON (default) แล้ว Create

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

ไฟล์จะดาวน์โหลดมาเก็บไว้ เนื่องจากดาวน์โหลดได้ครั้งเดียว ให้เอาเนื้อหาไฟล์สร้าง GitHub secret (secrets.SERVICE_ACCOUNT)

สุดท้าย ทำให้ Google Play รู้จัก service account โดย login Google Play Console ไปที่ Setup → API Access

เลื่อนลงมาหัวข้อ Service Accounts คลิก Grant Access

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

ในการตั้งค่า ไปที่ App permissions เลือกแอปที่ service account จะโต้ตอบ ใน Account permissions ทุกอย่างภายใต้ releases ควรติ๊กถูก สามารถตรวจสอบการตั้งค่าอื่นๆ ได้ กด Invite user มุมขวาล่าง

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

หลังส่งคำเชิญแล้ว สามารถรัน action เผยแพร่ได้

ตรวจสอบ Actions ใน GitHub

คลิกแท็บ Actions เพื่อดู workflows ที่กำหนดและที่รันแล้ว

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

ซ้ายแสดง actions ที่กำหนด ขวาแสดง actions ที่รันแล้ว คลิกดูรายละเอียดแต่ละ action ได้

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

ถ้า action ตั้งค่า workflow_dispatch จะมีปุ่ม Run workflow (เห็นในภาพ)

ดูการรันเฉพาะ workflow ได้จากหน้า Workflows หลัก โดยคลิกที่การรันนั้น หาก action ล้มเหลว นี่คือที่สำรวจสาเหตุ

Action แรกควรทริกเกอร์เมื่อ pull request เปิด ถ้าทำงานถูกต้องจะเห็น:

ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

สรุป

อ่านมายาว แต่เราได้ผ่านทุกอย่างที่ต้องการสำหรับเริ่มสร้าง CI/CD pipeline สำหรับแอปพลิเคชัน

สนใจดู GitHub Actions ตั้งค่าอย่างไร ดูได้ใน repository ของผม:

Actions · TomerPacific/LaundrySymbolsAn application written in Kotlin showing the different laundry symbols with an explanation :cyclone: - Actions · TomerPacific/LaundrySymbolsทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอนTomerPacificGitHubทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน

อ่านเพิ่มเติมเกี่ยว GitHub Actions:

GitHub Actions Documentation - GitHub DocsAutomate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you’d like, including CI/CD, and combine actions in a completely customized workflow.ทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอนGitHub Docsทำให้การพัฒนาแอป Android อัตโนมัติด้วย GitHub Actions: คู่มือทีละขั้นตอน