ตัวแปรใน Gitlab สามารถตั้งค่าได้หลายตำแหน่ง:
- ในการตั้งค่ากลุ่ม
- ในการตั้งค่าโครงการ
- ภายใน .gitlab-ci.yml
ในกรณีนี้ ตัวแปรในการตั้งค่ากลุ่มและโปรเจ็กต์สามารถตั้งค่าเป็น "ไฟล์" หรือ "ตัวแปรปกติ" และทำเครื่องหมายที่ช่องทำเครื่องหมาย "ป้องกัน" และ "มาสก์"
มาเริ่มกันที่มรดกง่ายๆ แล้วมันจะค่อยๆ ซับซ้อนมากขึ้น
รายการระดับความสำคัญขั้นสุดท้ายมีอยู่ที่ส่วนท้ายของเอกสาร
สืบทอดร่วมกับกลุ่ม [แหล่งที่มา]
ตัวแปรจากกลุ่มจะได้รับการสืบทอดมา โดยกฎที่ว่ายิ่งกลุ่มตั้งอยู่ใกล้กับโปรเจ็กต์มากเท่าใด มูลค่าก็จะยิ่งมีความสำคัญมากขึ้นเท่านั้น
กลุ่มที่มีตัวแปร
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
ผลลัพธ์ไปป์ไลน์
$ echo $MSG
B
หากไม่ได้ระบุตัวแปรในกลุ่ม B เราก็จะเห็นค่า A
การสืบทอดตัวแปรภายใน .gitlab-ci.yml [แหล่งที่มา]
ทุกอย่างค่อนข้างง่ายที่นี่: คุณสามารถตั้งค่าตัวแปรแบบโกลบอลหรือเขียนทับตัวแปรภายในงานก็ได้
กลุ่มที่มีตัวแปร
.gitlab-ci.yml
ตอนนี้เรามาสร้างงาน 2 งานกัน โดยหนึ่งในนั้นเราจะระบุ $MSG อย่างชัดเจน
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
ผลลัพธ์ไปป์ไลน์
- เสียงสะท้อน:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- สะท้อนด้วย vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
การสืบทอดกับกลุ่มและภายใน .gitlab-ci.yml [แหล่งที่มา]
ลองรวม 2 ตัวอย่างก่อนหน้าเข้าด้วยกัน ตัวแปรกลุ่มมีความสำคัญเหนือกว่าตัวแปรภายใน .gitlab-ci.yml
กลุ่มที่มีตัวแปร
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
ผลลัพธ์ไปป์ไลน์
- เสียงสะท้อน:
$ echo $MSG Y Job succeeded
- สะท้อนด้วย vars:
$ echo $MSG Y Job succeeded
การสืบทอดพร้อมการระบุตัวแปรในการตั้งค่าโปรเจ็กต์ [แหล่งที่มา]
ตัวแปรในการตั้งค่าโปรเจ็กต์จะมีลำดับความสำคัญสูงสุดเสมอ! และตัวแปรที่ระบุภายใน .gitlab-ci.yml จะไม่มีบทบาทใดๆ
กลุ่มที่มีตัวแปร
ตัวแปรกลุ่มมีลำดับความสำคัญต่ำกว่า
.gitlab-ci.yml
ลองใช้ไฟล์จากตัวอย่างก่อนหน้านี้ นี่เป็นอีกครั้งที่มีการระบุตัวแปรภายใน .gitlab-ci.yml แต่ตัวแปรภายในกลุ่มยังคงมีความสำคัญเหนือกว่าตัวแปรเหล่านั้น
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
ผลลัพธ์ไปป์ไลน์
- เสียงสะท้อน:
$ echo $MSG project-3 Job succeeded
- สะท้อนด้วย vars:
$ echo $MSG project-3 Job succeeded
มรดกที่มีค่าว่าง [แหล่งที่มา]
ค่าว่างก็เป็นค่าเช่นกัน
ค่าว่างไม่ใช่ Null
กลุ่มที่มีตัวแปร
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
ผลลัพธ์ไปป์ไลน์
- เสียงสะท้อน:
$ echo $MSG Job succeeded
- สะท้อนด้วย vars:
$ echo $MSG Job succeeded
การสืบทอดด้วยการรวมและกลุ่ม [แหล่งที่มา]
ที่นี่เราจะพยายามรวมโครงการ 2 ไว้ในโครงการ 3
กลุ่มในกรณีนี้มีลำดับความสำคัญ
กลุ่มที่มีตัวแปร
.gitlab-ci.yml
และตั้งค่าตัวแปรทั่วโลกใน .gitlab-ci.yml
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
ผลลัพธ์ไปป์ไลน์
- เสียงสะท้อน:
$ echo $MSG B Job succeeded
- สะท้อนด้วย vars:
$ echo $MSG B Job succeeded
การสืบทอดด้วยการรวม [แหล่งที่มา]
ที่นี่เราจะพยายามรวมโครงการ 2 ไว้ในโครงการ 3
โดยมีเงื่อนไขว่า ทั้งกลุ่มและตัวโครงการเองไม่มีตัวแปรใดๆ
กลุ่มที่มีตัวแปร
.gitlab-ci.yml
เช่นเดียวกับในตัวอย่างก่อนหน้า
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
ผลลัพธ์ไปป์ไลน์
- เสียงสะท้อน:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- สะท้อนด้วย vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
ผลลัพธ์มีดังนี้ ลำดับความสำคัญ:
- ตัวแปรในการตั้งค่าโปรเจ็กต์
- ตัวแปรในกลุ่ม
- ตัวแปรที่ระบุภายในงานอย่างเคร่งครัด (รวมถึงไฟล์ที่รวมไว้)
- ตัวแปรโกลบอลภายใน .gitlab-ci.yml
- ตัวแปรโกลบอลภายในไฟล์ที่รวมไว้
ข้อสรุป
จุดที่ไม่ชัดเจนที่สุดคือกฎ "ยิ่งตัวแปรอยู่ใกล้โค้ดมากเท่าไรก็ยิ่งสำคัญมากขึ้นเท่านั้น" จะทำงานสำหรับกลุ่มก่อน จากนั้นจะใช้กฎเดียวกันสำหรับตัวแปรภายใน .gitlab-ci.yml แต่อยู่ภายใต้เงื่อนไขเท่านั้น ว่าไม่ได้ระบุตัวแปรในกลุ่ม
ต่อไป จุดสำคัญคือการเข้าใจว่าพื้นที่ส่วนกลางสำหรับ .gitlab-ci.yml หลักและที่รวมไว้นั้นเป็นเรื่องปกติ และไฟล์ที่มีการรวมเกิดขึ้นนั้นมีลำดับความสำคัญ
ที่มา: will.com