Bài viết này hướng dẫn bạn cách triển khai ứng dụng Flask thông qua Jenkins Pipeline, sử dụng Docker trên hai server Jenkins Agent: một cho môi trường dev, một cho môi trường prod. Toàn bộ quá trình được tự động hóa từ bước lấy mã nguồn đến build và deploy container Flask.
Mô hình triển khai:
- Jenkins Server (Master)
- Hai Jenkins Agent:
dev-nodevàprod-node - Ứng dụng Flask từ GitHub
- Docker dùng để đóng gói và chạy container Flask
1. Cài đặt Docker trên 2 Server Agent
Tham khảo chi tiết tại: Hướng dẫn: cách cài đặt docker trên linux – mục 4
Trên cả hai server agent (dev và prod), thực hiện cài đặt Docker để hỗ trợ việc build và chạy container.
2. Kết nối Agent Dev & Prod vào Jenkins
Bước 1: Truy Cập Jenkins
Mở trình duyệt và truy cập Jenkins thông qua địa chỉ:
http://<jenkins-server-ip>:8080
Bước 2: Cài Đặt Plugin “SSH Agent”
Jenkins sử dụng plugin SSH để kết nối tới các agent từ xa.
- Vào Manage Jenkins → Manage Plugins
- Chọn tab Available
- Tìm plugin “SSH Agent”
- Chọn và nhấn Install without restart
Bước 3: Cấu Hình Node (Agent) Mới
Trên cả hai server agent, thực hiện:
sudo chown azureadmin:azureadmin /opt
sudo apt update
sudo apt install openjdk-21-jre -y
Tại Jenkins:
- Truy cập Manage Jenkins → Nodes
- Nhấn “New Node”
Ví dụ cấu hình node prod-node:
- Name:
prod-node - Type: Permanent Agent → nhấn OK
- Remote root directory:
/opt - Labels:
prod(dùng để phân biệt khi chọn node thực thi pipeline) - Usage: Only build jobs with label expressions matching this node
- Launch method: Launch agents via SSH
Bước 4: Thêm SSH Credentials
- Truy cập Manage Jenkins → Credentials → (global) → Add Credentials
- Chọn loại Username with password
- Username:
azureadmin(hoặc user khác có quyền SSH) - Password: mật khẩu tương ứng
- ID: đặt tên dễ nhớ, ví dụ
root-prod
- Username:
Cấu hình tiếp node prod-node:
- Host: địa chỉ IP máy prod
- Credentials: chọn
root-prod - Host key verification strategy: chọn Non verifying verification strategy
Lưu cấu hình.
Lặp lại tương tự với máy dev:
- Node name:
dev-node - Label:
dev - Remote root directory:
/opt - Credentials ID:
root-dev - Host: IP máy dev

3. Tạo Jenkins Pipeline triển khai Flask với Docker
Mục Tiêu:
- Tự động hoá quá trình deploy ứng dụng Flask bằng Docker
- Pipeline thực hiện trên cả môi trường dev và prod
Bước 1: Tạo Jenkins Pipeline Mới
- Vào Jenkins Dashboard
- Nhấn New Item
- Chọn Pipeline
- Đặt tên:
flask-pipeline→ nhấn OK

Bước 2: Viết Jenkinsfile (Pipeline Script)
pipeline {
agent {
label 'prod'
}
stages {
stage('Clone Source') {
steps {
sh '''
rm -rf /opt/python
git clone https://github.com/ttnguyenblog/python /opt/python
'''
}
}
stage('Remove Container') {
steps {
sh 'docker rm web -f || true'
}
}
stage('Remove Image') {
steps {
sh 'docker image remove flask:v1 -f || true'
}
}
stage('Build Image') {
steps {
sh 'docker build -t flask:v1 /opt/python'
}
}
stage('Deploy Container') {
steps {
sh 'docker run -dit --name web -p 80:5000 flask:v1'
}
}
}
}
Lưu ý: Bạn có thể đổi
label 'prod'thànhdevnếu muốn chạy pipeline trên node dev.
Bước 3: Kiểm Tra Kết Quả
- Nhấn Build Now trên Pipeline
- Truy cập địa chỉ IP của agent:
http://<ip-agent>:80
- Xác minh ứng dụng Flask hiển thị đúng nội dung mong đợi
Xem thêm:
[CI/CD] Triển khai ứng dụng Java với Jenkins, Ansible và Tomcat
[CI/CD] Hướng dẫn triển khai với Apache, Docker, Jenkins, Ansible
