为 Spring Boot 应用程序创建构建/部署流水线涉及多个步骤,而 Jenkins 可以作为强大的工具来自动化这些流程。在本教程中,我们将指导您为托管在 GitHub 上的 Spring Boot 应用程序设置流水线,使用 Jenkins 构建该应用程序,并将其部署到 Amazon Elastic Kubernetes Service (EKS)。
在您的 Jenkins 实例中,安装以下插件:
3. 保存流水线作业。
Amazon Elastic Container Registry (ECR) 是由 Amazon Web Services (AWS) 提供的完全托管的 Docker 容器注册表服务。ECR 允许开发人员存储、管理和部署 Docker 容器镜像,为 AWS 生态系统中的容器化应用程序提供安全且可扩展的解决方案。
按照以下步骤设置 ECR 存储库:
5. 配置权限(可选):
6. 加密设置(可选):
7. 生命周期策略(可选):
8. 创建存储库:点击“创建存储库”按钮完成存储库创建。
现在,您已成功创建 ECR 存储库。您将在 Jenkins 管道脚本中使用存储库 URI(例如
Amazon Elastic Kubernetes Service (EKS) 是由 Amazon Web Services (AWS) 提供的完全托管的 Kubernetes 服务。EKS 简化了使用 Kubernetes 的容器化应用程序的部署、管理和扩展,使开发人员能够专注于构建和运行应用程序,而无需维护底层 Kubernetes 基础设施的复杂性。
配置 Amazon EKS 集群的步骤如下:
aws eks create-cluster --name your-eks-cluster --role-arn arn:aws:iam::123456789012:role/eks-cluster-role --resources-vpc-config subnetIds=subnet-xxxxxxxxxxxxxxxxx,securityGroupIds=sg-xxxxxxxxxxxxxxxxx
2. 将 your-eks-cluster、arn:aws:iam::123456789012:role/eks-cluster-role、subnet-xxxxxxxxxxxxxxxxx 和 sg-xxxxxxxxxxxxxxxxx 替换为您的首选集群名称、IAM 角色、子网 ID 和安全组 ID。
3. 更新您的 kubectl 配置以连接到 EKS 集群。这需要 AWS CLI 和 aws eks update-kubeconfig 命令。
aws eks update-kubeconfig --name your-eks-cluster
将 your-eks-cluster 替换为您的集群名称。
3. 验证 kubectl 是否已正确配置并可以连接到 EKS 集群。
kubectl get nodes
您应该会看到 EKS 集群的节点。
4. 为您的应用程序创建 Kubernetes 部署和服务 YAML 文件(例如,kubernetes/deployment.yaml)。
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-app
spec:
replicas: 3
selector:
matchLabels:
app: your-app
template:
metadata:
labels:
app: your-app
spec:
containers:
- name: your-app
image: .dkr.ecr..amazonaws.com/your-app:latest
将
kubectl apply -f kubernetes/deployment.yaml
此配置假设您已创建 VPC 和必要的 IAM 角色。请根据您的 AWS 环境调整设置。更新 Jenkins 流水线脚本(本教程的第 4 步),使其包含正确的集群信息,例如集群 URL、IAM 角色以及其他相关详细信息。
在 GitHub 仓库根目录创建一个 Jenkinsfile 文件。该文件将定义整个流水线。以下是一个基本示例:
pipeline {
agent any
stages {
stage('Checkout') {
steps {
script {
checkout scm
}
}
}
stage('Build and Test') {
steps {
script {
sh 'mvn clean package'
}
}
}
stage('Build Docker Image') {
steps {
script {
sh 'docker build -t your-docker-repo/your-app:latest .'
}
}
}
stage('Push to ECR') {
steps {
script {
withAWS(credentials: 'aws-credentials', region: 'your-aws-region') {
sh 'aws ecr get-login-password --region your-aws-region | docker login --username AWS --password-stdin your-aws-account-id.dkr.ecr.your-aws-region.amazonaws.com'
sh 'docker push your-aws-account-id.dkr.ecr.your-aws-region.amazonaws.com/your-app:latest'
}
}
}
}
stage('Deploy to EKS') {
steps {
script {
withKubeConfig([credentialsId: 'kubeconfig-credentials', serverUrl: 'https://your-eks-cluster-url']) {
sh 'kubectl apply -f kubernetes/deployment.yaml'
}
}
}
}
}
}
该流水线包含多个阶段。
该脚本利用 Jenkins 插件进行 GitHub 集成、Docker、AWS 和 Kubernetes,以及用于安全访问外部服务的相关凭证。此 Jenkinsfile 提供了一个全面的流水线,可在 AWS 上的容器化环境中自动执行 Spring Boot 应用程序的构建、测试和部署流程。
手动触发 Jenkins 作业,或在 GitHub 中设置 Webhook,以便在每次推送时触发流水线。
1. 手动触发:
2. 使用 GitHub Webhook 自动触发(可选):
3. 监控流水线执行:
4. 调查故障:
5. 访问构件和部署:
通过运行管道,您可以确保整个 CI/CD 流程(从源代码集成到在 Amazon EKS 上部署)自动化且可重现。定期监控管道执行情况,以便及早发现问题,并维护可靠高效的软件交付工作流程。