 
        Gitlab-CI กล้วยๆ: ทุกเรื่องของตัวแปร (Variables)
มาถึงเรื่องของการจัดการตัวแปร (Variables) ใน GitLab CI กันบ้าง ซึ่งตัวแปรใน GitLab CI จะช่วยให้ส่งผ่านค่าระหว่าง Jobs หรือ Stage ได้ มันจะทำให้เรานำค่าไปใช้ได้ง่ายขึ้น หรือหากต้องการเปลี่ยนแปลงก็สามารถทำได้ง่ายขึ้นเช่นกัน
ผมจะมาบอกเกี่ยวกับการใช้งานตัวแปใน GitLab CI กันว่ามันใช้งานในรูปแบบใดได้บ้าง
Section 1: การกำหนดตัวแปร GitLab CI
หากต้องการกำหนดตัวแปรใน GitLab CI เราสามารถตั้งค่าตัวแปรในไฟล์ .gitlab-ci.yml ได้ดังนี้
variables:
  MY_VARIABLE: "my-value"
ด้านบนจะเป็นการกำหนดตัวแปรทั่วไป โดยมี MY_VARIABLE ที่เก็บค่า "my-value" ไว้ และเรายังสามารถกำหนดตัวแปรในระดับ Job ได้ด้วย เช่น
variables:
  MY_PROJECT_VARIABLE: "my-project-value"
stages:
  - build
build:
  stage: build
  variables:
    MY_JOB_VARIABLE: "my-job-value"
  script:
    - echo "Building my app with project variable $MY_PROJECT_VARIABLE and job variable $MY_JOB_VARIABLE"
ตัว MY_PROJECT_VARIABLE จะเป็นตัวแปรที่เราสามารถเรียกใช้งานในตำแหน่งไหนก็ได้ แต่ MY_JOB_VARIABLE มันจะเรียกใช้ได้แค่ใน Job นั้นๆ
Section 2: การนำไปใช้งานตัวแปร GitLab CI
เมื่อเรากำหนดตัวแปรแล้ว เราสามารถใช้ตัวแปรนั้นในบริบทต่างๆ ได้ เช่น ใน script, ชุดคำสั่งที่เราทำขึ้นมา หรือใน environment เช่น
stages:
  - build
build:
  stage: build
  variables:
    MY_VARIABLE: 20
  script:
    - echo "Building my app with version $MY_VARIABLE"
Job นี้ได้ใช้ MY_VARIABLE เป็นค่ากำหนดเวอร์ชั่นของแอพนี้ในตอน build
หรือเราจะเรียกใช้งานส่วนของ environment ก็ได้
stages:
  - build
build:
  stage: build
  variables:
    MY_VARIABLE: dev
  environment:
    name: my-environment
    url: http://$MY_VARIABLE.example.com
  script:
    - echo "Deploying to environment $CI_ENVIRONMENT_NAME with URL $CI_ENVIRONMENT_URL"
Section 3: การจัดการตัวแปร GitLab CI
นอกจากที่เรากำหนดตัวแปรใน .gitlab-ci.yml แล้วนั้น เรายังสามารถกำหนดตัวแปรในระดับของ Project หรือ Group ได้ โดยความสามารถนี้จะทำได้เฉพาะคนที่เป็น Maintainer ในเว็บ Gitlab ซึ่งผมแนะนำว่าถ้าต้องการความปอดภัยของตัวแปรไม่อยากให้ใครมาอ่านเจอไม่ควรกำหนดในไฟล์ .gitlab-ci.yml แต่ให้ไปกำหนดในเว็บ Gitlab แทน
สำหรับการตั้งค่าตัวแปรใน Project ให้ไปที่ Project > Settings > CICD ด้านขวามือเลือก Variables
ในส่วนของ Group ก็ทำเช่นเดียวกัน Group > Settings > CICD ด้านขวามือเลือก Variables

Section 4: เพิ่มตัวแปรผ่านหน้าเว็บ
การเพิ่มตัวแปรในเว็บ Gitlab นั้น จะมีสิ่งที่เราสามารถกำหนดเพิ่มเติมได้อีก ลองมาดูกันว่ามีอะไรบ้าง

Type: เป็นการเก็บค่าชนิดแบบ Variable หรือจะเป็นแบบ File ส่วนใหญ่ผมใช้แต่แบบ Variable
Environment scope: เป็นการกำหนดว่าสามารถนำตัวแปรไปใช้ใน environment ไหนได้บ้าง
Protect variable: นำตัวแปรไปใช้ได้เฉพาะ Branchs หรือ Tags ที่เราทำการกำหนด Protect ไว้เท่านั้น
Mask variable: โดยปกติเราสามารถสั่ง echo $VARIABLE_NAME เพื่อมาดูค่าในขั้นตอน pipeline ได้ แต่ถ้าเราไม่ได้อยากให้ใคร echo ออกมาดูได้ก็ติ้กช่องนี้ซะ มันจะแสดงเป็น [MASKED] แทน
ข้อกำหนด value ของ mask
- ต้องเป็นบรรทัดเดียว
- มีตัวอักษร 8 ตัวขึ้นไป ประกอบด้วย:
 - ตัวอักษร Base64 (RFC4648)
 - อักษร@และ:
 - อักษร.
 - อักษร~
Expand variable reference: กำหนดให้ $ เป็นตัวเริ่มต้นตัวแปร
Section 5: ตัวแปร Predefined คืออะไร
ใน Gitlab-ci จะมีตัวแปรที่ถูกสร้างมาให้นำไปใช้ได้อยู่แล้วในทุกๆ pipeline เราเรียกกันว่า Predefined variables ซึ่งเราสามารถนำไปใช้งานได้เลย เช่น
job:
  stage: pre
  script:
    - echo "$CI_COMMIT_REF_NAME"
จากตัวอย่างข้างต้น CI_COMMIT_REF_NAME ก็คือ ชื่อของ Branch นั้นเอง 
โดยเราสามารถดูค่า Predefined เพิ่มเติมได้ที่
Section 6: การ Debug ตัวแปร
หากเราพบปัญหาเกี่ยวกับตัวแปร GitLab CI ที่แสดงออกมาต่างๆ ว่ามันคืออะไรบ้าง เราสามารถใช้ CI_DEBUG_TRACE ช่วยให้มันแสดงค่าออกมาทั้งหมดได้ เพื่อตรวจสอบตัวแปรและแก้ไขปัญหาต่างๆ
job_name:
  variables:
    CI_DEBUG_TRACE: "true"
ดูเพิ่มเติม
หรือสามารถใช้คำสั่ง echo  ออกมาตรงๆ เลยก็ได้นะ ผมใช้บ่อย
job_name:
  script:
    - echo $CI_REGISTRY
Section 7: บทสรุป
ตัวแปร GitLab CI เป็นเครื่องมือที่ดีมากสำหรับการส่งค่าต่างๆ ระหว่าง Job หรือ Stage และการนำไปใช้งานก็ง่าย และยังสามารถกำหนดการเข้าถึง หรือการแสดงผลออกมาได้เพื่อความปลอดภัยของตัวระบบด้วย
และส่วนใครต้องการเก็บไฟล์สำคัญ เพื่อให้ pipeline นำไปใช้งานได้ ให้ไปดูในส่วนของ Secure file ตามนี้

ติดตามเนื้อหาอื่นๆ ของ Gitlab ได้ที่

 
                
