Skip to main content

Claude Code GitLab CI/CD

เรียนรู้การผสานรวม Claude Code เข้ากับ workflow การพัฒนาด้วย GitLab CI/CD

ข้อมูล: Claude Code สำหรับ GitLab CI/CD อยู่ใน beta ฟีเจอร์และการทำงานอาจเปลี่ยนแปลง การผสานรวมนี้ดูแลโดย GitLab สำหรับการสนับสนุนดู GitLab issue

ทำไมต้องใช้ Claude Code กับ GitLab?

  • สร้าง MR ได้ทันที: อธิบายสิ่งที่ต้องการ และ Claude จะสร้าง MR พร้อมการเปลี่ยนแปลงและคำอธิบาย
  • นำไปใช้งานอัตโนมัติ: เปลี่ยน issue เป็นโค้ดที่ใช้งานได้ด้วยคำสั่งเดียว
  • รู้จักโปรเจกต์: Claude ทำตามแนวทาง CLAUDE.md และ code pattern ที่มีอยู่
  • ตั้งค่าง่าย: เพิ่ม job เดียวใน .gitlab-ci.yml และตัวแปร CI/CD
  • พร้อมใช้ Enterprise: เลือก Claude API, Amazon Bedrock หรือ Google Vertex AI
  • ปลอดภัยโดยค่าเริ่มต้น: รันบน GitLab runner ของคุณพร้อม branch protection

การตั้งค่า

Quick setup

  1. เพิ่มตัวแปร CI/CD แบบ masked: ไปที่ SettingsCI/CDVariables เพิ่ม ANTHROPIC_API_KEY (masked)

  2. เพิ่ม Claude job ใน .gitlab-ci.yml:

stages:
- ai

claude:
stage: ai
image: node:24-alpine3.21
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
variables:
GIT_STRATEGY: fetch
before_script:
- apk update
- apk add --no-cache git curl bash
- curl -fsSL https://claude.ai/install.sh | bash
script:
- /bin/gitlab-mcp-server || true
- echo "$AI_FLOW_INPUT for $AI_FLOW_CONTEXT on $AI_FLOW_EVENT"
- >
claude
-p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
--debug

ตัวอย่างการใช้งาน

เปลี่ยน Issue เป็น MR

ใน issue comment:

@claude implement this feature based on the issue description

Claude วิเคราะห์ issue และ codebase เขียนการเปลี่ยนแปลงใน branch และเปิด MR เพื่อตรวจสอบ

รับความช่วยเหลือในการนำไปใช้

ใน MR discussion:

@claude suggest a concrete approach to cache the results of this API call

แก้ไขบั๊กได้เร็ว

ใน issue หรือ MR comment:

@claude fix the TypeError in the user dashboard component

การใช้กับ Amazon Bedrock & Google Vertex AI

Amazon Bedrock

ข้อกำหนดเบื้องต้น:

  1. บัญชี AWS ที่เข้าถึง Amazon Bedrock
  2. GitLab ที่กำหนดค่าเป็น OIDC identity provider ใน AWS IAM
  3. IAM role พร้อมสิทธิ์ Bedrock

ตัวแปร CI/CD ที่ต้องการ:

  • AWS_ROLE_TO_ASSUME
  • AWS_REGION

Google Vertex AI

ข้อกำหนดเบื้องต้น:

  1. Google Cloud project ที่เปิดใช้ Vertex AI API
  2. Workload Identity Federation ที่กำหนดค่าเพื่อ trust GitLab OIDC
  3. Service account เฉพาะที่มีสิทธิ์ Vertex AI

ตัวแปร CI/CD ที่ต้องการ:

  • GCP_WORKLOAD_IDENTITY_PROVIDER
  • GCP_SERVICE_ACCOUNT

ตัวอย่างการกำหนดค่า

Basic .gitlab-ci.yml (Claude API)

stages:
- ai

claude:
stage: ai
image: node:24-alpine3.21
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
variables:
GIT_STRATEGY: fetch
before_script:
- apk update
- apk add --no-cache git curl bash
- curl -fsSL https://claude.ai/install.sh | bash
script:
- /bin/gitlab-mcp-server || true
- >
claude
-p "${AI_FLOW_INPUT:-'Summarize recent changes and suggest improvements'}"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
--debug

ตัวอย่าง Amazon Bedrock job (OIDC)

claude-bedrock:
stage: ai
image: node:24-alpine3.21
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
before_script:
- apk add --no-cache bash curl jq git python3 py3-pip
- pip install --no-cache-dir awscli
- curl -fsSL https://claude.ai/install.sh | bash
- export AWS_WEB_IDENTITY_TOKEN_FILE="${CI_JOB_JWT_FILE:-/tmp/oidc_token}"
- if [ -n "${CI_JOB_JWT_V2}" ]; then printf "%s" "$CI_JOB_JWT_V2" > "$AWS_WEB_IDENTITY_TOKEN_FILE"; fi
- >
aws sts assume-role-with-web-identity
--role-arn "$AWS_ROLE_TO_ASSUME"
--role-session-name "gitlab-claude-$(date +%s)"
--web-identity-token "file://$AWS_WEB_IDENTITY_TOKEN_FILE"
--duration-seconds 3600 > /tmp/aws_creds.json
- export AWS_ACCESS_KEY_ID="$(jq -r .Credentials.AccessKeyId /tmp/aws_creds.json)"
- export AWS_SECRET_ACCESS_KEY="$(jq -r .Credentials.SecretAccessKey /tmp/aws_creds.json)"
- export AWS_SESSION_TOKEN="$(jq -r .Credentials.SessionToken /tmp/aws_creds.json)"
script:
- /bin/gitlab-mcp-server || true
- >
claude
-p "${AI_FLOW_INPUT:-'Implement the requested changes and open an MR'}"
--permission-mode acceptEdits
--allowedTools "Bash Read Edit Write mcp__gitlab"
--debug
variables:
AWS_REGION: "us-west-2"

Best Practices

การกำหนดค่า CLAUDE.md

สร้างไฟล์ CLAUDE.md ที่ root ของ repository เพื่อกำหนดมาตรฐานการเขียนโค้ด criteria การ review และกฎเฉพาะโปรเจกต์

ข้อพิจารณาด้านความปลอดภัย

อย่า commit API keys หรือ cloud credentials ไปยัง repository เด็ดขาด ใช้ตัวแปร GitLab CI/CD เสมอ:

  • เพิ่ม ANTHROPIC_API_KEY เป็นตัวแปรแบบ masked
  • ใช้ OIDC ของ provider เมื่อเป็นไปได้ (ไม่ต้องใช้ key ที่มีอายุยาว)

ต้นทุน CI

  • GitLab Runner time: Claude รันบน GitLab runner และใช้นาทีในการคำนวณ
  • API costs: แต่ละ Claude interaction ใช้ token ตามขนาดของ prompt และการตอบสนอง

การแก้ปัญหา

Claude ไม่ตอบสนองต่อคำสั่ง @claude: ตรวจสอบว่า pipeline ถูก trigger และตัวแปร CI/CD (ANTHROPIC_API_KEY) มีอยู่และไม่ถูก mask

Job ไม่สามารถเขียน comment หรือเปิด MR: ตรวจสอบว่า CI_JOB_TOKEN มีสิทธิ์เพียงพอ

การยืนยันตัวตนผิดพลาด: สำหรับ Claude API ยืนยันว่า ANTHROPIC_API_KEY ถูกต้อง สำหรับ Bedrock/Vertex ตรวจสอบ OIDC/WIF configuration