下面是每个步骤的详细说明和示例代码:
1. 编写Spring Boot应用程序代码
创建一个简单的Spring Boot应用程序,例如一个Hello World REST API。
代码语言:java复制// HelloWorldController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HelloWorldController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}
2. 创建.gitlab-ci.yml文件,定义CI/CD流水线配置
在项目根目录下创建.gitlab-ci.yml
文件。
stages:
- test
- build
- deploy
variables:
DOCKER_IMAGE_NAME: registry.example.com/my-spring-boot-app
TAG: $CI_COMMIT_SHORT_SHA
test:
stage: test
script:
- ./mvnw test
build:
stage: build
script:
- ./mvnw clean package
- docker build -t $DOCKER_IMAGE_NAME:$TAG .
deploy:
stage: deploy
script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
- docker push $DOCKER_IMAGE_NAME:$TAG
3. 编写Dockerfile用于构建Docker镜像
在项目根目录下创建一个Dockerfile。
代码语言:dockerfile复制# Dockerfile
FROM adoptopenjdk:11-jre-hotspot
WORKDIR /app
COPY target/my-spring-boot-app.jar .
CMD ["java", "-jar", "my-spring-boot-app.jar"]
4. 将代码推送到GitLab仓库
将代码推送到GitLab仓库,确保已经将Spring Boot应用程序、.gitlab-ci.yml
和Dockerfile包含在提交中。
git add .
git commit -m "Initial commit"
git push origin master
5. GitLab CI/CD流水线触发测试和构建
每当代码推送到GitLab仓库时,GitLab CI/CD流水线将自动触发。它会运行测试并构建Docker镜像。
6. Docker镜像将被构建并推送到指定的Docker Registry
构建的Docker镜像将被推送到指定的Docker Registry,确保在.gitlab-ci.yml
文件中设置了正确的CI_REGISTRY_USER、CI_REGISTRY_PASSWORD和CI_REGISTRY。
7. 部署Spring Boot应用程序到目标环境
使用Docker Compose或其他容器编排工具将Spring Boot应用程序部署到目标环境中。下面是使用docker-compose.yml
文件进行部署的示例。
version: '3'
services:
web:
image: registry.example.com/my-spring-boot-app:latest
ports:
- "8080:8080"
depends_on:
- database
database:
image: mysql:5.7
environment:
MYSQL_DATABASE: mydatabase
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_USERNAME: dbuser
MYSQL_PASSWORD: dbpassword
ports:
- "3306:3306"
在上述docker-compose.yml中,有两个服务:web和database。web服务使用你构建的Spring Boot应用程序的Docker镜像,并将其映射到主机端口8080。database服务使用MySQL的Docker镜像,并设置了一些环境变量来配置数据库。并确保$TAG
为你之前构建的Docker镜像的标签。
将上述docker-compose.yml文件放置在项目根目录中。
在项目根目录运行以下命令以启动服务:
代码语言:bash复制docker-compose up -d
这将启动web和database服务,并将它们分别映射到主机的8080和3306端口。
然后访问http://localhost:8080/api/hello
验证应用程序是否成功部署。
若要停止服务,运行以下命令:
代码语言:bash复制docker-compose down