Gitlab-CI สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

ตัวแปรใน Gitlab สามารถตั้งค่าได้หลายตำแหน่ง:

  1. ในการตั้งค่ากลุ่ม
  2. ในการตั้งค่าโครงการ
  3. ภายใน .gitlab-ci.yml

ในกรณีนี้ ตัวแปรในการตั้งค่ากลุ่มและโปรเจ็กต์สามารถตั้งค่าเป็น "ไฟล์" หรือ "ตัวแปรปกติ" และทำเครื่องหมายที่ช่องทำเครื่องหมาย "ป้องกัน" และ "มาสก์"

Gitlab-CI สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

มาเริ่มกันที่มรดกง่ายๆ แล้วมันจะค่อยๆ ซับซ้อนมากขึ้น

รายการระดับความสำคัญขั้นสุดท้ายมีอยู่ที่ส่วนท้ายของเอกสาร

สืบทอดร่วมกับกลุ่ม [แหล่งที่มา]

ตัวแปรจากกลุ่มจะได้รับการสืบทอดมา โดยกฎที่ว่ายิ่งกลุ่มตั้งอยู่ใกล้กับโปรเจ็กต์มากเท่าใด มูลค่าก็จะยิ่งมีความสำคัญมากขึ้นเท่านั้น

กลุ่มที่มีตัวแปร

Gitlab-CI สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

.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 สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

.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 สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

.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 สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

.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 สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

.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 สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

.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 สืบทอดตัวแปรสภาพแวดล้อมอย่างไร

.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

ผลลัพธ์มีดังนี้ ลำดับความสำคัญ:

  1. ตัวแปรในการตั้งค่าโปรเจ็กต์
  2. ตัวแปรในกลุ่ม
  3. ตัวแปรที่ระบุภายในงานอย่างเคร่งครัด (รวมถึงไฟล์ที่รวมไว้)
  4. ตัวแปรโกลบอลภายใน .gitlab-ci.yml
  5. ตัวแปรโกลบอลภายในไฟล์ที่รวมไว้

ข้อสรุป

จุดที่ไม่ชัดเจนที่สุดคือกฎ "ยิ่งตัวแปรอยู่ใกล้โค้ดมากเท่าไรก็ยิ่งสำคัญมากขึ้นเท่านั้น" จะทำงานสำหรับกลุ่มก่อน จากนั้นจะใช้กฎเดียวกันสำหรับตัวแปรภายใน .gitlab-ci.yml แต่อยู่ภายใต้เงื่อนไขเท่านั้น ว่าไม่ได้ระบุตัวแปรในกลุ่ม
ต่อไป จุดสำคัญคือการเข้าใจว่าพื้นที่ส่วนกลางสำหรับ .gitlab-ci.yml หลักและที่รวมไว้นั้นเป็นเรื่องปกติ และไฟล์ที่มีการรวมเกิดขึ้นนั้นมีลำดับความสำคัญ

ที่มา: will.com

เพิ่มความคิดเห็น