Câu Hỏi Phỏng Vấn CI/CD Pipeline: GitHub Actions, GitLab CI và Jenkins Năm 2026

Chuẩn bị câu hỏi phỏng vấn CI/CD pipeline bao gồm GitHub Actions, GitLab CI và Jenkins. Bao gồm ví dụ code thực tế, mẫu cấu hình pipeline và thực hành bảo mật tốt nhất cho năm 2026.

Câu Hỏi Phỏng Vấn CI/CD Pipeline: GitHub Actions, GitLab CI và Jenkins Năm 2026

Câu hỏi phỏng vấn về CI/CD pipeline là một trong những chủ đề xuất hiện thường xuyên nhất trong các vòng tuyển dụng DevOps năm 2026. Với GitHub Actions hiện xử lý hơn 71 triệu job mỗi ngày và ra mắt thực thi step song song vào tháng 6 năm 2026, GitLab CI đạt phiên bản 19 với Secrets Manager native, và Jenkins vẫn duy trì tỷ lệ sử dụng 28%, nhà tuyển dụng mong đợi ứng viên thể hiện được khả năng thực hành trên cả ba nền tảng.

Điều mà nhà tuyển dụng thực sự kiểm tra

Phần lớn câu hỏi phỏng vấn CI/CD thuộc ba nhóm chính: thiết kế pipeline (cách tổ chức stage và job), bảo mật (quản lý secret và bảo vệ supply chain), và xử lý sự cố (debug build thất bại, tối ưu pipeline chậm). Ứng viên nên chuẩn bị sẵn ít nhất một cấu hình pipeline thực tế.

Cấu Trúc Workflow và Trigger Trong GitHub Actions

GitHub Actions tổ chức tự động hóa xoay quanh workflow, job và step. Một workflow là file YAML được lưu trong thư mục .github/workflows/, định nghĩa thời điểm và cách thức tự động hóa được chạy. Mỗi workflow chứa một hoặc nhiều job, và mỗi job chạy trên một runner riêng biệt.

Câu hỏi phỏng vấn phổ biến yêu cầu ứng viên giải thích mối quan hệ giữa trigger on, sự phụ thuộc giữa các job và keyword needs.

yaml
# .github/workflows/ci.yml
name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint

  test:
    needs: lint              # waits for lint to pass
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [20, 22]       # runs tests on both versions
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          cache: npm
      - run: npm ci
      - run: npm test

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    environment: production  # requires approval
    steps:
      - uses: actions/checkout@v4
      - run: ./deploy.sh

Workflow trên minh họa ba khái niệm quan trọng: keyword needs tạo ra dependency graph giữa các job, chiến lược matrix cho phép kiểm thử song song trên nhiều phiên bản Node.js, và keyword environment đặt deployment sau cổng phê duyệt thủ công.

Parallel Steps Trong GitHub Actions

GitHub Actions ra mắt thực thi step song song vào ngày 25 tháng 6 năm 2026, đáp ứng một trong những tính năng được yêu cầu nhiều nhất. Trước đây, tất cả step trong một job chạy tuần tự. Tính năng mới này giới thiệu bốn keyword cho phép thực thi đồng thời trong một job duy nhất.

Phân biệt trong phỏng vấn: parallel jobs vs parallel steps

Parallel jobs sử dụng runner riêng biệt với filesystem cách ly. Parallel steps chia sẻ chung một runner, checkout, environment và workspace. Nhà tuyển dụng kiểm tra xem ứng viên có hiểu sự khác biệt này không, vì nó ảnh hưởng đến caching, artifact sharing và việc sử dụng tài nguyên.

yaml
# .github/workflows/parallel-steps.yml
name: Build with Parallel Steps

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci

      # Run lint and typecheck in parallel
      - name: lint
        run: npm run lint
        background: true

      - name: typecheck
        run: npm run typecheck
        background: true

      - wait-all:              # wait for both to complete

      # Or use the parallel shorthand
      - parallel:
          - name: build-frontend
            run: npm run build:frontend
          - name: build-backend
            run: npm run build:backend

      - run: npm run deploy

Keyword background: true khởi động step bất đồng bộ và tiếp tục ngay sang step tiếp theo. Keyword wait-all tạm dừng thực thi cho đến khi tất cả background step hoàn thành. Keyword parallel cung cấp shorthand chạy nhiều step đồng thời và đợi tất cả hoàn thành trước khi tiếp tục.

Hai keyword bổ sung cũng có sẵn: wait nhắm đến background step cụ thể theo tên, và cancel dừng background step một cách graceful khi không còn cần thiết (hữu ích để dừng long-running service).

Cấu Hình Pipeline GitLab CI Với Stages

GitLab CI sử dụng file .gitlab-ci.yml tại thư mục gốc của repository. Khác với GitHub Actions nơi các job chạy độc lập theo mặc định, GitLab CI tổ chức job thành các stage thực thi tuần tự, trong khi các job trong cùng stage chạy song song.

Nhà tuyển dụng thường yêu cầu ứng viên chuyển đổi workflow GitHub Actions sang pipeline GitLab CI, hoặc ngược lại.

yaml
# .gitlab-ci.yml
stages:
  - validate
  - test
  - deploy

variables:
  NODE_VERSION: "22"

lint:
  stage: validate
  image: node:${NODE_VERSION}
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
  script:
    - npm ci
    - npm run lint

unit-tests:
  stage: test
  image: node:${NODE_VERSION}
  parallel:
    matrix:
      - NODE_VERSION: ["20", "22"]
  script:
    - npm ci
    - npm test
  artifacts:
    reports:
      junit: coverage/junit.xml
    expire_in: 7 days

deploy-production:
  stage: deploy
  image: alpine:latest
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual                   # manual gate
  environment:
    name: production
    url: https://app.example.com
  script:
    - ./deploy.sh

Những điểm khác biệt chính so với GitHub Actions: stages quy định thứ tự thực thi toàn cục, keyword parallel:matrix xử lý matrix build, và artifacts:reports:junit tích hợp kết quả kiểm thử trực tiếp vào giao diện merge request.

GitLab 19.0 (tháng 5 năm 2026) giới thiệu Secrets Manager trong open beta, cung cấp lưu trữ secret native mà không cần dịch vụ bên ngoài như HashiCorp Vault. GitLab 19.2 (tháng 7 năm 2026) đưa chính sách thực thi pipeline theo lịch trình vào trạng thái generally available, cho phép các team áp dụng compliance scan hoặc dependency check theo lịch cố định trên nhiều dự án từ một định nghĩa chính sách duy nhất.

Sẵn sàng chinh phục phỏng vấn DevOps?

Luyện tập với mô phỏng tương tác, flashcards và bài kiểm tra kỹ thuật.

Cú Pháp Jenkins Declarative Pipeline

Jenkins sử dụng Jenkinsfile được lưu tại thư mục gốc của repository. Cú pháp declarative pipeline, được khuyến nghị làm mặc định trong năm 2026, cung cấp xử lý lỗi có cấu trúc và bố cục dựa trên stage rõ ràng.

Câu hỏi phỏng vấn thường gặp: giải thích sự khác biệt giữa declarative và scripted pipeline, và khi nào sử dụng từng loại.

groovy
// Jenkinsfile
pipeline {
    agent any

    tools {
        nodejs 'node-22'       // configured in Jenkins Global Tool
    }

    environment {
        CI = 'true'
        DEPLOY_ENV = credentials('deploy-env-secret')
    }

    stages {
        stage('Install') {
            steps {
                sh 'npm ci'
            }
        }

        stage('Lint & Test') {
            parallel {             // parallel execution
                stage('Lint') {
                    steps {
                        sh 'npm run lint'
                    }
                }
                stage('Test') {
                    steps {
                        sh 'npm test'
                    }
                    post {
                        always {
                            junit 'coverage/junit.xml'
                        }
                    }
                }
            }
        }

        stage('Deploy') {
            when {
                branch 'main'
            }
            input {
                message 'Deploy to production?'
            }
            steps {
                sh './deploy.sh'
            }
        }
    }

    post {
        failure {
            mail to: 'team@example.com',
                 subject: "Build failed: ${env.JOB_NAME}",
                 body: "Check ${env.BUILD_URL}"
        }
    }
}

Declarative pipeline áp dụng cấu trúc thông qua các khối bắt buộc pipeline, agentstages. Chỉ thị parallel bên trong stage chạy lint và test đồng thời. Chỉ thị input tạm dừng thực thi để chờ phê duyệt thủ công, tương tự environment của GitHub Actions và manual gate của GitLab. Jenkins yêu cầu Java 21 kể từ tháng 1 năm 2026, do đó môi trường pipeline cần tính đến phụ thuộc runtime này.

Unbundling plugin Jenkins (2.574+)

Jenkins 2.574 (tháng 7 năm 2026) và 2.577 (tháng 8 năm 2026) loại bỏ một số plugin khỏi file WAR mặc định, bao gồm JUnit, Mailer, Matrix Authorization, Bouncycastle API và JavaMail API. Các instance không có quyền truy cập update center phải cài đặt các plugin này thủ công trước khi nâng cấp. Việc loại bỏ plugin JUnit đặc biệt ảnh hưởng đến pipeline sử dụng step junit như được hiển thị ở trên.

Quản Lý Secret Trên Các Nền Tảng CI/CD

Mọi buổi phỏng vấn CI/CD đều bao gồm câu hỏi về quản lý secret. Mỗi nền tảng xử lý thông tin xác thực theo cách khác nhau, và việc hiểu rõ các hàm ý bảo mật là rất quan trọng.

GitHub Actions lưu trữ secret ở cấp repository, environment hoặc organization. Secret được tự động ẩn khỏi log, nhưng mô hình scoping hiện tại có những hạn chế. Lộ trình bảo mật 2026 giới thiệu scoped secret ràng buộc thông tin xác thực vào ngữ cảnh thực thi cụ thể, giải quyết rủi ro truy cập quá rộng.

GitLab CI cung cấp CI/CD variable với quy tắc bảo vệ. Biến được bảo vệ chỉ được inject vào pipeline chạy trên branch hoặc tag được bảo vệ. GitLab 19.0 giới thiệu Secrets Manager, cho phép các team lưu trữ và tham chiếu secret native mà không cần vault bên ngoài. Secret được scope theo dự án hoặc group và chỉ có thể truy cập bởi job yêu cầu chúng một cách rõ ràng.

Jenkins sử dụng plugin Credentials với nhiều loại thông tin xác thực (username/password, SSH key, secret text, chứng chỉ). Helper credentials() trong declarative pipeline gắn secret vào biến môi trường, và credential cấp Folder giới hạn quyền truy cập theo dự án cụ thể.

Câu trả lời phỏng vấn then chốt: không bao giờ hardcode secret trong file pipeline, luôn sử dụng hệ thống quản lý secret nguyên bản của nền tảng, xoay vòng credential thường xuyên, và ưu tiên token ngắn hạn thay vì API key dài hạn.

Tối Ưu Pipeline và Chiến Lược Caching

Pipeline chậm ảnh hưởng trực tiếp đến năng suất của lập trình viên. Nhà tuyển dụng kiểm tra xem ứng viên có khả năng chẩn đoán và khắc phục điểm nghẽn cổ chai hiệu năng trong hệ thống CI/CD hay không.

Ba kỹ thuật tối ưu phổ quát áp dụng trên cả ba nền tảng:

Dependency caching tránh tải lại package mỗi lần chạy. GitHub Actions sử dụng actions/cache hoặc hỗ trợ cache tích hợp trong setup action. GitLab CI sử dụng cache với chiến lược key. Jenkins dựa vào tính bền vững của workspace hoặc lệnh stash/unstash.

Thực thi song song chia công việc cho nhiều runner. GitHub Actions hiện hỗ trợ cả parallel jobs (chiến lược matrix) và parallel steps (keyword background/parallel). GitLab CI sử dụng parallel:matrix, và Jenkins sử dụng chỉ thị parallel. Mức độ chia phù hợp phụ thuộc vào dự án: quá nhiều job song song gây lãng phí thời gian khởi động runner, quá ít thì bỏ phí tài nguyên.

Thực thi có điều kiện bỏ qua các stage không cần thiết. Cả ba nền tảng đều hỗ trợ: GitHub Actions với biểu thức if, GitLab CI với rules, và Jenkins với chỉ thị when. Pipeline được thiết kế tốt sẽ bỏ qua stage deployment trên feature branch và bỏ qua thay đổi chỉ liên quan đến lint để không kích hoạt toàn bộ test suite.

Bảo Mật Pipeline CI/CD và Bảo Vệ Supply Chain

Các cuộc tấn công supply chain nhắm vào hệ thống CI/CD gia tăng đáng kể trong năm 2025, với các sự cố ảnh hưởng đến tj-actions/changed-files và các GitHub Actions phổ biến khác. Câu hỏi phỏng vấn hiện nay thường xuyên kiểm tra ứng viên về chiến lược củng cố bảo mật.

Ghim phiên bản action theo commit SHA cụ thể thay vì tag để ngăn chặn tấn công tag-hijacking:

yaml
# .github/workflows/secure.yml
steps:
  # Vulnerable: tag can be moved to malicious commit
  - uses: actions/checkout@v4

  # Secure: pinned to exact commit SHA
  - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

GitLab CI giải quyết vấn đề supply chain thông qua CI/CD components với chứng nhận SLSA Level 1 (có sẵn từ GitLab 18.1), cung cấp nguồn gốc rõ ràng hơn khi lắp ráp pipeline từ các component tái sử dụng. Tag container bất biến (GitLab 18.2) ngăn chặn việc thay thế image sau khi đã xuất bản.

Với Jenkins, cơ chế Shared Library nên sử dụng repository chuyên dụng với branch protection, yêu cầu code review và signed commit. Ủy ban Châu Âu khởi động Chương trình Bug Bounty cho Jenkins thông qua YesWeHack, phản ánh vai trò quan trọng của nền tảng này trong supply chain doanh nghiệp.

So Sánh Đa Nền Tảng Để Chuẩn Bị Phỏng Vấn

Tính năngGitHub ActionsGitLab CIJenkins
File cấu hình.github/workflows/*.yml.gitlab-ci.ymlJenkinsfile
Mô hình thực thiDựa trên job với parallel stepsDựa trên stage (stage tuần tự)Dựa trên stage (linh hoạt)
Runner hostingGitHub-hosted + self-hostedGitLab.com shared + self-hostedChỉ self-hosted
Lưu trữ secretSecret repository/org/environmentSecrets Manager + CI/CD variablePlugin Credentials
Matrix buildstrategy.matrixparallel:matrixmatrix (plugin)
Cổng thủ côngenvironment + required reviewerswhen: manualChỉ thị input
Marketplace20.000+ Actions trên MarketplaceCI/CD Components Catalog1.800+ plugin
Tính năng AICopilot for ActionsDuo CI Expert AgentPlugin cộng đồng
GiáMiễn phí cho repo công khai, tính theo phút cho riêng tư400 phút CI/CD miễn phí, sau đó theo bậcMiễn phí (mã nguồn mở), tự quản lý

Bảng so sánh này bao gồm những điểm khác biệt thường được kiểm tra nhất trong phỏng vấn. Câu hỏi tiếp theo thường là: "Nền tảng nào sẽ được chọn cho dự án mới, và tại sao?" Câu trả lời phụ thuộc vào công cụ hiện có, quy mô đội ngũ, yêu cầu tuân thủ, và việc tổ chức ưu tiên hạ tầng quản lý (GitHub/GitLab) hay kiểm soát toàn diện (Jenkins).

Nguồn Tham Khảo

Luyện tập các câu hỏi này thực tế với module phỏng vấn CI/CD fundamentalsGitHub Actions, hoặc tìm hiểu sâu hơn về câu hỏi cụ thể cho GitLab CIJenkins. Để chuẩn bị DevOps toàn diện hơn, hướng dẫn câu hỏi phỏng vấn DevOps thiết yếu bao gồm đầy đủ các chủ đề ngoài CI/CD.

Bắt đầu luyện tập!

Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.

Điểm Chính Cho Phỏng Vấn CI/CD Pipeline

  • GitHub Actions parallel steps (background, wait-all, parallel) ra mắt vào tháng 6 năm 2026, cho phép thực thi đồng thời trong một job duy nhất với việc chia sẻ runner, checkout và workspace
  • GitLab 19.x giới thiệu Secrets Manager native (open beta, tháng 5 năm 2026) và đưa chính sách thực thi pipeline theo lịch trình vào trạng thái generally available (tháng 7 năm 2026), giảm sự phụ thuộc vào công cụ bên ngoài
  • Jenkins 2.574+ unbundle các plugin cốt lõi bao gồm JUnit và Mailer khỏi file WAR, yêu cầu cài đặt rõ ràng cho các instance không có quyền truy cập update center
  • Quản lý secret là chủ đề bảo mật được kiểm tra nhiều nhất trên cả ba nền tảng: cần thể hiện kiến thức về scoped secret, protected variable và chiến lược xoay vòng credential
  • Tối ưu pipeline thông qua caching, thực thi song song và thực thi có điều kiện áp dụng được trên mọi nền tảng và cho thấy kinh nghiệm sản xuất thực tế với nhà tuyển dụng
  • Chuẩn bị ít nhất một cấu hình pipeline hoạt động cho mỗi nền tảng, tập trung vào các mẫu thực tế thay vì ví dụ đơn giản

Bắt đầu luyện tập!

Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.

Thử thách hôm nay

Bạn có tìm ra lỗi trong DevOps không?

Một đoạn mã thật, một lỗi ẩn, mỗi ngày một lượt. Không cần tài khoản để thử.

Anthony Fillion-Maillet

Viết bởi

Anthony Fillion-Maillet

Người sáng lập SharpSkill

Lập trình viên fullstack hơn 10 năm. Anh điều hành SharpSkill và chịu trách nhiệm về mọi nội dung đăng tại đây.

Cập nhật ngày 24 tháng 8, 2026

Thẻ

#ci-cd
#github-actions
#gitlab-ci
#jenkins
#devops
#interview

Chia sẻ

Bài viết liên quan