Jenkins Learn
01. Nền tảng

Thuật ngữ Jenkins

Từ điển thực hành về job, build, node, agent, executor, Pipeline, credential, artifact và trạng thái build.

Thuật ngữ Jenkins

Mục lục


Mục tiêu

Sau bài này, bạn có thể:

  • dùng đúng từ khi trao đổi về Jenkins;
  • phân biệt job với build, node với executor, workspace với artifact;
  • đọc một Pipeline cơ bản và gọi tên các thành phần;
  • hiểu các trạng thái SUCCESS, UNSTABLE, FAILURE, ABORTED;
  • tránh các thuật ngữ cũ như “master/slave”.

1. Bản đồ khái niệm

Một câu mô tả đầy đủ có thể là:

Webhook trigger Pipeline orders-service; run số 142 chờ trong queue cho tới khi một executor trên agent có label linux && docker rảnh, sau đó checkout code vào workspace và publish artifact version 1.8.4.


2. Job, item, build và run

Thuật ngữĐịnh nghĩaVí dụ
ItemĐối tượng trong Jenkins UI, có thể là folder, job hoặc PipelineFolder payments, Pipeline api
JobCấu hình mô tả công việc Jenkins cần thực hiệnFreestyle job build tài liệu
ProjectTên cũ, gần nghĩa với job“Freestyle project” vẫn xuất hiện trong UI
BuildKết quả của một lần thực thi jobdocs-build #27
RunKhái niệm tổng quát cho một lần thực thi; thường dùng tương đương buildMột Pipeline run từ commit cụ thể
Build numberSố tăng dần trong phạm vi một jobBUILD_NUMBER=27
Build IDĐịnh danh lần chạy; ở Jenkins hiện đại thường tương ứng build numberBUILD_ID=27
FolderContainer tổ chức item và có thể tạo scope cấu hình/credentialteam-a/service-x
ViewCách nhóm và hiển thị item trên dashboardView cho các job production

2.1 Job không phải build

Job là định nghĩa; build là một lần chạy của định nghĩa đó. Sửa cấu hình job sẽ ảnh hưởng các lần chạy sau nhưng không biến lịch sử build cũ thành một job mới.

Job: orders-service
├── Build #140 → SUCCESS
├── Build #141 → FAILURE
└── Build #142 → SUCCESS

2.2 Freestyle, Pipeline và Multibranch Pipeline

Loại itemDùng khiLưu ý
Freestyle projectLab hoặc automation đơn giản cấu hình bằng UIKhó review và version hóa khi workflow lớn
PipelineWorkflow nhiều stage, nên định nghĩa bằng JenkinsfileHỗ trợ Pipeline as Code
Multibranch PipelineTự phát hiện branch/pull request có JenkinsfilePhù hợp repository có nhiều branch
FolderPhân nhóm item, phân quyền và credential scopeKhông thực thi build

3. Controller, node, agent và executor

Thuật ngữĐịnh nghĩaĐiểm cần nhớ
ControllerTiến trình trung tâm lưu cấu hình, cung cấp UI/API và điều phốiKhông nên chạy build production trực tiếp
NodeMáy thuộc Jenkins environment và có khả năng thực thiController và agent đều được xem là node
Built-in nodeNode gắn với controllerNên đặt 0 executor ở production
AgentMáy/container/pod kết nối controller để thực thi taskCó thể tĩnh hoặc ephemeral
ExecutorSlot thực thi trên một nodeQuyết định số task có thể chạy đồng thời
LabelChuỗi mô tả capability/nhóm nodeVí dụ linux, docker, jdk21
CloudCấu hình có thể provision agent độngVí dụ Kubernetes hoặc VM cloud plugin
LauncherCơ chế khởi động/kết nối agentSSH, inbound connection, cloud provisioner

3.1 Phân biệt node, agent và executor

  • Một agent thường chạy trên một node.
  • Một node có thể có không, một hoặc nhiều executor.
  • Executor không phải process build cố định; nó là capacity slot được cấp cho workload.
  • Một agent 4 executor không mặc nhiên nhanh hơn agent 1 executor; workload có thể tranh chấp CPU, RAM và disk.

Xem mô hình đầy đủ tại Kiến trúc Jenkins.


4. Pipeline, stage và step

Thuật ngữĐịnh nghĩaVí dụ
PipelineMô hình workflow delivery do người dùng định nghĩaBuild → Test → Deploy
JenkinsfileFile text chứa định nghĩa Pipeline, thường lưu ở root repositoryJenkinsfile
Declarative PipelineCú pháp có cấu trúc chuẩn với pipeline, agent, stagesPhù hợp phần lớn dự án
Scripted PipelineCú pháp Groovy linh hoạt hơn, thường bắt đầu bằng nodeDùng cho logic cần kiểm soát sâu
StageNhóm công việc có ý nghĩa nghiệp vụ/kỹ thuật riêngBuild, Test, Deploy
StepMột tác vụ cụ thể trong Pipelinesh, echo, junit
Post actionHành động chạy theo kết quả hoặc sau Pipeline/stagePublish report, cleanup, notification
Shared LibraryCode Groovy dùng chung giữa nhiều PipelineChuẩn hóa workflow tổ chức

4.1 Stage không phải environment

Stage là phần logic của Pipeline; environment là nơi phần mềm chạy. Một stage có thể deploy đến environment, nhưng hai khái niệm không đồng nghĩa.

Stage: Deploy Staging
Action: gọi Helm để thay đổi
Environment: cluster/namespace staging

4.2 Step không nhất thiết là một command

Một step có thể gọi shell command, chờ approval, retry block, ghi test report hoặc archive artifact. Plugin có thể cung cấp step mới.


5. Queue, workspace, artifact và fingerprint

Thuật ngữĐịnh nghĩaSai lầm thường gặp
QueueDanh sách workload đang chờ được cấp executorCho rằng mọi build được trigger sẽ chạy ngay
WorkspaceThư mục làm việc trên node cho job/buildDùng như nơi lưu artifact lâu dài
ArtifactFile bất biến tạo ra từ build và được lưu để dùng sauGọi mọi file tạm trong workspace là artifact
ArchiveĐưa file build vào cơ chế lưu artifact của JenkinsDùng thay artifact repository ở quy mô lớn
FingerprintHash giúp theo dõi một file/artifact qua các jobCoi fingerprint là chữ ký bảo mật
StashLưu tạm file để chuyển giữa stage/node trong cùng Pipeline runDùng để phân phối artifact lớn lâu dài
CacheDữ liệu có thể tái tạo để tăng tốc buildCoi cache là output phát hành chính thức
Build historyLịch sử run, log, status và metadataKhông thiết lập retention

5.1 Phân biệt artifact, cache và workspace

Workspace: nơi đang làm việc, có thể xóa
Cache: dữ liệu tăng tốc, mất thì tạo lại
Artifact: output có version cần lưu và phân phối

Ví dụ với ứng dụng Java:

  • Maven dependency trong .m2 là cache;
  • source checkout và target/classes nằm trong workspace;
  • file JAR đã version hóa để release là artifact.

6. Plugin, credential và secret

Thuật ngữĐịnh nghĩaVí dụ
Jenkins coreỨng dụng Jenkins chính trong jenkins.warUI và nền tảng extension
PluginGói mở rộng coreGit, JUnit, Kubernetes
Update CenterNguồn metadata để khám phá/cập nhật pluginHiển thị trong Manage Jenkins
CredentialBản ghi bí mật hoặc danh tính Jenkins quản lýToken, SSH key, username/password
Credential IDĐịnh danh dùng để tham chiếu credentialregistry-push-token
ScopePhạm vi credential có thể được sử dụngSystem, global hoặc folder tùy cấu hình
Secret textCredential dạng chuỗi bí mậtAPI token
Secret fileFile bí mật được cấp tạm cho buildkubeconfig, key file

6.1 Credential ID không phải secret

ID như prod-token có thể xuất hiện trong Jenkinsfile; giá trị token thật không được hard-code. Tuy nhiên, ID cũng không nên chứa dữ liệu nhạy cảm như username nội bộ nếu không cần.

6.2 Masking không phải sandbox bảo mật

Jenkins có thể che giá trị credential trong nhiều tình huống log thông thường, nhưng Pipeline chạy code độc hại vẫn có thể tìm cách lấy secret đã được cấp. Chỉ cấp trusted credential cho trusted code và giới hạn scope/thời gian sử dụng.


7. Trigger, upstream và downstream

Thuật ngữĐịnh nghĩaVí dụ
TriggerTiêu chí làm bắt đầu một runWebhook, cron, API, manual
WebhookHTTP callback từ hệ thống ngoàiGit provider báo có push
SCM pollingJenkins định kỳ kiểm tra SCM có thay đổi khôngDùng khi webhook không khả dụng
UpstreamJob/Pipeline kích hoạt công việc khácJob build package
DownstreamJob/Pipeline được công việc khác kích hoạtJob deploy package
ParameterGiá trị đầu vào của buildENVIRONMENT=staging
CauseMetadata mô tả nguyên nhân build bắt đầuUser, timer, SCM event
Quiet periodKhoảng trì hoãn trước khi schedule buildGom các event gần nhau trong một số use case

7.1 Trigger không đảm bảo executor rảnh

Webhook thành công chỉ cho biết Jenkins đã nhận event. Build vẫn có thể nằm trong queue vì thiếu agent hoặc executor.

7.2 Cron và webhook phục vụ mục đích khác nhau

  • Webhook phù hợp feedback theo thay đổi source code.
  • Cron phù hợp công việc định kỳ như dependency scan hoặc cleanup.
  • SCM polling là phương án thay thế khi không cấu hình được webhook, nhưng tạo request định kỳ lên SCM.

8. Trạng thái build

Trạng tháiÝ nghĩaVí dụ
SUCCESSBuild hoàn thành và các tiêu chí bắt buộc đạtCompile/test thành công
UNSTABLEBuild hoàn thành nhưng có vấn đề không được coi là fatalTest report có test fail tùy cấu hình
FAILURECó lỗi nghiêm trọng làm build thất bạiCommand trả exit code khác 0
ABORTEDBuild bị dừng trước khi kết thúc dự kiếnUser stop hoặc timeout
NOT_BUILTMột phần công việc không được chạyStage bị bỏ qua do dependency trước thất bại

8.1 UNSTABLE không phải SUCCESS

Một Pipeline có thể tiếp tục sau khi test report đánh dấu UNSTABLE. Quy tắc publish/deploy phải kiểm tra trạng thái rõ ràng thay vì chỉ dựa vào việc Pipeline chưa dừng.

8.2 Exit code và trạng thái

Trên Unix/Linux, shell command trả exit code 0 thường được hiểu là thành công; giá trị khác 0 làm step thất bại nếu không được xử lý. Không dùng || true chỉ để làm Pipeline xanh vì sẽ che lỗi thật. Nếu cần tiếp tục để publish report, hãy dùng cơ chế error handling có chủ đích.


9. Thuật ngữ cũ và dễ nhầm

Nên dùngTránh dùngGiải thích
ControllerMastermaster là thuật ngữ cũ đã bị thay thế
AgentSlaveslave là thuật ngữ cũ đã bị thay thế
JobProject khi nói chungProject là tên cũ; UI vẫn có “Freestyle project”
Built-in nodeMaster nodeNode gắn với controller
Build agentBuild server khi cần chính xácAgent thực thi dưới điều phối của controller
DeployRelease nếu chưa phân biệtDeploy đưa code vào environment; release mở tính năng cho user có thể là bước khác

9.1 Jenkins URL và Resource Root URL

  • Jenkins URL là URL chính user và integration truy cập.
  • Resource Root URL là URL phụ có thể dùng để phục vụ nội dung build có khả năng không đáng tin cậy, tách khỏi origin chính.

9.2 LTS và weekly

  • LTS release ưu tiên chu kỳ ổn định và phù hợp phần lớn môi trường production.
  • Weekly release nhận feature/fix sớm hơn nhưng đòi hỏi nhịp kiểm thử và nâng cấp thường xuyên hơn.

10. Đọc một Jenkinsfile bằng thuật ngữ chuẩn

pipeline {
    agent { label 'linux && jdk21' }

    stages {
        stage('Build') {
            steps {
                sh './mvnw -B package'
            }
        }
    }

    post {
        always {
            junit 'target/surefire-reports/*.xml'
            archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
        }
    }
}

Diễn giải:

  1. đây là Declarative Pipeline;
  2. agent yêu cầu Jenkins tìm node có label linuxjdk21;
  3. run chờ trong queue cho tới khi có executor phù hợp;
  4. Jenkins cấp workspace trên agent;
  5. stage Build chứa step sh gọi Maven Wrapper;
  6. post chạy action publish JUnit report và archive file JAR;
  7. fingerprint: true tạo fingerprint để hỗ trợ theo dõi file;
  8. toàn bộ lần thực thi tạo thành một Pipeline run/build có build number riêng.

Bài tập tự kiểm tra

Điền thuật ngữ đúng vào chỗ trống:

  1. Một lần thực thi job được gọi là ______.
  2. Slot chạy workload trên node là ______.
  3. Thư mục checkout source trên agent là ______.
  4. File JAR đã đóng gói và lưu để phát hành là ______.
  5. Danh sách workload đang chờ executor là ______.
  6. File định nghĩa Pipeline as Code thường tên là ______.

Tài liệu tham khảo

On this page