บน Gitlab นั้นแต่ละ Project จะมี Snippet มาให้ใช้งานเลย ซึ่งเราสามารถเก็บ code หรือ secret key บ้างอย่างที่มันสำคัญไว้ในนี้ได้
ในการสร้าง snippet นั้นเราสามารถกำหนดได้ว่าให้เป็นแบบ Private, Internal หรือ Public โดยที่ผมใช้ประจำก็คือเอาไว้เก็บพวกไฟล์ .env
หรือ json token
ต่างๆ ที่เราจะเอามาใช้ก็ต่อเมื่อจะ build app ขึ้นมา ซึ่งพวกนี้ผมจะสร้างเป็น private snippet ไว้ใช้กับเฉพาะโปรเจ็คนั้นๆ
ซึ่งในการเขียน .gitlab-ci.yml
นั้นบ้าง state ผมต้องการให้มันโหลดไฟล์ snippet มาด้วยถ้าเราใช้คำสั่ง curl
โหลดมาตรงๆ ก็จะไม่สามารถทำได้ ให้เราทำดังนี้
เราต้องสร้าง access tokens ใน account เรามาก่อนโดยไปที่ โปรไฟล์มุมขวาบนแล้วเลือก Setting
มาเมนูซ้ายมือเลือก Access tokens
ด้านขวามือให้เรากำหนดชื่อ แล้วกำหนดสิทธิ์การเข้าถึงในที่นี้ผมจะให้มันอ่านได้แค่ api ของ gitlab ก็ติ้กเฉพาะ api โดยเราสามารถกำหนดวันหมดอายุได้ หากไม่กำหนดก็แสดงว่าต้องการให้ไม่มีวันหมดอายุ
เมื่อเรากดปุ่ม Create personal access token แล้วด้านบนจะมี Access token แสดงมาให้เราทำการก็อปปี้ไว้ สำคัญมากเพราะมันจะแสดงออกมาครั้งเดียวเท่านั้น
จากนั้นให้เรากลับไปที่ Project ของเรา แล้วไปที่เมนู Settings > CI / CD แล้วไปกำหนด Variables ไว้
เมื่อเราได้ access token มาแล้วคราวนี้เราก็สามารถที่จะใช้คำสั่ง curl
โหลดไฟล์ที่เป็น private snippet ได้แล้ว ซึ่งเขียนใน .gitlab-ci.yml
ดังนี้
variables:
PROJECT_ID: "9630807"
ENV_URL: "https://gitlab.com/api/v4/projects/$PROJECT_ID/snippets/4611776/raw"
job-name:
stage: release
image: docker:latest
services:
- docker:dind
script:
- '[ -f .env ] && rm .env'
- 'curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$ENV_URL" >> .env'
มาดูค่าแรกก่อน $PROJECT_ID
เราสามารถดูได้จากหน้าแรกของ Project เรา
$ENV_URL
ค่านี้ผมไว้เก็บ url ของไฟล์ snippet ที่เราจะโหลดมา โดย url ดังกล่าวเราต้องอ้างอิงตาม Gitlab api ในส่วนของ Snippets API โดย url จะเป็นแบบนี้
https://gitlab.com/api/v4/projects/<PROJECT_ID>/snippets/<SNIPPET_ID>/raw
PROJECT_ID
ผมได้บอกไปแล้ว ในส่วนของ SNIPPET_ID
ดูได้จาก
ต่อมาดูในส่วนของ script:
ซึ่งเป็นส่วนที่เราจะบอกว่าใน state นี้ให้ใช้คำสั่งอะไร เราก็จะใช้ curl
ในการโหลดไฟล์ snippet ของเรา
curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$ENV" >> src/.env
เพียงเท่านี้เราก็สามารถโหลด Private snippet มาใช้ใน .gitlab-ci.yml
ได้แล้ว
ขอให้สนุกกับการเขียน gitlab-ci นะครับ