Triển khai một dự án Spring Boot từ nền tảng DevOps Coding sang máy chủ từ xa chỉ cần ba bước chính:
- Biên dịch mã nguồn thành file JAR.
- Sao chép file JAR lên máy chủ đích thông qua SCP.
- Thực thi lệnh shell từ xa để khởi chạy ứng dụng.
Cơ chế tự động hóa trên Coding
Coding cung cấp giải pháp tích hợp liên tục (CI) dựa trên Jenkins, nhưng được đóng gói và tối ưu hóa cho trải nghiệm liền mạch. Mỗi lần build, hệ thống sẽ tạo ra một máy ảo (CVM), cài đặt Jenkins bên trong và thực thi pipeline — giống như cách triển khai thủ công trên server vật lý.
Hai phương pháp triển khai phổ biến
1. Triển khai truyền thống với Jenkins
Yêu cầu cài đặt các công cụ sau trên server:
| Công cụ | Mục đích |
|---|---|
| Jenkins | Quản lý quy trình CI/CD |
| Git | Quản lý phiên bản mã nguồn |
| Maven | Xây dựng dự án Java |
| JDK | Môi trường chạy ứng dụng Java |
Jenkins có thể sử dụng SSH để điều khiển server từ xa mà không cần cài đặt trực tiếp trên đó. Tuy nhiên, cấu hình ban đầu khá phức tạp: cần khai báo đường dẫn JDK, Maven, repository Git... Một sai sót nhỏ cũng có thể khiến toàn bộ pipeline thất bại.
2. Triển khai hiện đại với Coding CI
Coding CI hỗ trợ ba loại môi trường build:
- Mặc định: Chạy trên máy ảo do Coding cung cấp.
- Docker: Chạy trong container từ image tùy chọn.
- Dockerfile: Xây dựng container từ Dockerfile trong repo.
Chuẩn bị kết nối SSH đến server
Trên server đích, tạo cặp khóa SSH:
ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"
Khóa công khai (id_rsa.pub) cần được thêm vào ~/.ssh/authorized_keys. Khóa riêng tư (id_rsa) sẽ được lưu trong phần "Quản lý xác thực" của Coding dưới dạng凭据私钥.
Viết Pipeline triển khai
Dưới đây là ví dụ pipeline triển khai dự án Spring Boot:
pipeline {
agent any
stages {
stage('Lấy mã nguồn') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]
])
}
}
stage('Build') {
steps {
dir('user-authority') {
sh 'mvn -T 1C clean package -DskipTests -s ./settings.xml'
}
archiveArtifacts(artifacts: '**/target/*.jar', fingerprint: true)
}
}
stage('Triển khai') {
steps {
script {
def server = [
name: 'prod-server',
host: '121.36.19.189',
port: 22,
user: 'root',
allowAnyHosts: true
]
withCredentials([sshUserPrivateKey(credentialsId: "your-credential-id", keyFileVariable: 'SSH_KEY')]) {
server.identityFile = SSH_KEY
sshPut remote: server, from: 'user-authority/target/user-authority-0.0.1-SNAPSHOT.jar', into: '/opt/app/'
sshCommand remote: server, command: 'cd /opt/app && java -jar user-authority-0.0.1-SNAPSHOT.jar &'
}
}
}
}
}
}
Xử lý phụ thuộc Maven từ kho nội bộ
Nếu dự án cần tải dependency từ Nexus/Maven私服, hãy đặt file settings.xml đã cấu hình vào thư mục gốc dự án và gọi lệnh build kèm tùy chọn:
mvn -T 1C clean package -DskipTests -s ./settings.xml
Kích hoạt build tự động
Coding hỗ trợ trigger build theo nhiều điều kiện: push code, pull request, hoặc cron schedule. Cấu hình này giúp triển khai ứng dụng tự động mỗi khi có thay đổi mã nguồn.