ระบบเก็บ Secure Files ไว้ใน Project และการนำไปใช้ใน gitlab-ci
พอดีมีโอกาสทำ pipeline บน Gitlab ci ในการที่จะทำ build android ให้ออกมาได้ไฟล์ apk ซึ่งการ build ละแต่ครั้งนั้นเราจำเป็นต้องมีไฟล์ .keystore
ไว้เสมอ ซึ่งมันเป็นไฟล์ที่สำคัญมากห้ามหลุดออกไปไหนเด็ดขาด และไม่ควรเก็บไว้ใน git ด้วย
โดย Gitlab นั้นมีสิ่งที่เรียก Secure Files มาให้ใช้แล้ว เราสามารถจัดเก็บไฟล์อย่างปลอดภัยเพื่อใช้ใน Pipeline CI/CD ได้อย่างปลอดภัย โดยมันจะถูกจัดเก็บไว้อย่างปลอดภัยภายนอกที่เก็บของโปรเจ็กต์ และไม่ได้ควบคุมเวอร์ชัน
ผมจะมาอธิบายวิธีการใช้งาน และวิธีการเขียน Gitlab-ci ให้โหลดไฟล์มันมาใช้ได้
วิธีเก็บ Secure file ใน Gitlab
ให้ไปที่ Project ของเราจากนั้นไปที่เมนู Settings > CICD > Secure files แล้วอัพโหลดไฟล์ที่ต้องการเก็บไว้
จะสามารถอัพโหลดได้สูงสุด 100 ไฟล์ต่อ Project และรองรับขนาดไฟล์สูงสุดแค่ 5MB
วิธีโหลด Secure file ใน gitlab-ci
ผมขอยกตัวอย่างสั้นๆ จากโปรเจ็ค React-native นะ ไฟล์ .gitlab-ci.yml
variables:
PROJECT_ID: "42102345"
PROD_SECURE_FILES: "https://gitlab.com/api/v4/projects/$PROJECT_ID/secure_files/2629/download"
before_script:
- 'curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$PROD_SECURE_FILES" >> android/app/my-release-key.keystore'
script:
- fastlane buildReleaseAPK
หลังจากอัพโหลดไฟล์เก็บไว้แล้ว เราสามารถโหลดลงมาในงานในตอน pipeline เราได้ตามตัวอย่างด้านบน ดังนี้
PROJECT_ID
= เป็นเลขไอดีของ project เรา
PROD_SECURE_FILES
= ที่อยู่ของไฟล์เรา จะสังเกตุว่าจะมีเลข 2629
อยู่ซึ่งมันคือ id ของไฟล์เรา แล้วเราจะหามันมาได้ยังไงละ? ใช้คำสั่งดังนี้ครับ
$ curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "https://gitlab.com/api/v4/projects/$PROJECT_ID/secure_files"
$PRIVATE_TOKEN
เป็น token ของเราเอง$PROJECT_ID
เป็นไอดีของ project เรา
เมื่อเรียกคำสั่งแล้วจะได้ผลลัพธ์ดังนี้
[{"id":2629,"name":"my-release-key.keystore","checksum":"674eb25ba1c50ff9353a94a76745bxxxxxxxxx4dd0c5e52f0fed241d0811f","checksum_algorithm":"sha256","created_at":"2020-01-16T08:03:59.835Z"}]
เราจะเห็นไฟล์เราพร้อมเลข ID ก็เอาเลขนั้นมาใช้
จากนั้นเราก็มาดูวิธีการโหลดไฟล์มาใช้กันโดยใช้คำสั่ง
$ curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$PROD_SECURE_FILES" >> android/app/my-release-key.keystore
ที่อยู่ใน before_script
เพียงเท่านั้นนี้เราก็จะได้ไฟล์ keystore ที่เราอัพโหลดเก็บไว้ใน secure file มาใช้งานแล้ว
นำไปประยุกต์ใช้งานกันได้ตามนะจ๊ะ... :)
อ่านเพิ่มเติม: https://docs.gitlab.com/ee/ci/secure_files/ และ https://docs.gitlab.com/ee/api/secure_files.html
Comments ()