ผมอยากให้มีการ npm run lint ทุกครั้งก่อนที่จะมีการ Merge branch เข้ามายัง dev branch เพื่อให้มันทำการเช็ด code ที่เขียนมาก่อนว่าถูกหลักไหม หรือใครอยากจะให้มันรันคำสั่งอะไรก็ได้ตามสะดวก สามารถทำได้ดังนี้ สำหรับคนที่ใช้ Gitlab ci อยู่

ตัวอย่าง Code

eslint:
  stage: test
  script:
    - npm i
    - npm run lint
  cache:
    paths:
      - web/node_modules
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'

ให้ดูในส่วนของ if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"' จะเป็นการบอกให้ Job นี้ทำงานก็ต่อเมื่อมีการ Merge request เข้ามายัง dev branch ตามรูปล่าง

merge-request-pipeline

แต่หากมีการ Merge request ไปยัง branch อื่นๆ Job นี้ก็จะไม่ทำงาน ซึ่งตอนกด Merge ก็จะมีให้เราเลือกได้ว่าจะ merge ให้ก็ต่อเมื่อ Pipeline ที่เรากำหนดมัน Pass นะ ทำให้การ code เราก่อนเข้า branch จะมีประสิทธิภาพมากขึ้น

หรือใครอยากให้ run job ทุกครั้งที่มีการ merge request เลยก็เขียนดังนี้

test_c:
  stage: test
  script:
    - echo "This job tests something."
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

ลองนำประยุกต์ใช้กันนะครับ...