一、更新代码
1、本案例是一个spring-boot项目,需要新增一个控制器文件,供外部访问。
1)上一版本的代码结构如下:
[root@manager demo]# tree /root/spring/demo
/root/spring/demo
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── cn
│ │ │ └── lczxz
│ │ │ └── myapp
│ │ │ └── MyappApplication.java
│ │ └── resources
│ │ ├── application.properties
│ │ ├── static
│ │ └── templates
│ └── test
│ └── java
│ └── cn
│ └── lczxz
│ └── myapp
│ └── MyappApplicationTests.java
2)新版本增加一个控制器文件:vim src/main/java/cn/lczxz/myapp/AnfieldController.java
package cn.lczxz.myapp;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AnfieldController {
@GetMapping("/anfield")
public String anfield() {
return "Welcome to anfield!\n";
}
}
3)编译代码(测试代码是否正确):mvn compile
2、提交代码
1)将代码添加到暂存区:git add .
2)将暂存区的更改添加到本地仓库:git commit -m "add anfield"
3)推送代码到远程仓库:git push -u origin master
二、拉取代码
1、在jenkins中创建一个流水线任务,pipeline脚本如下:
pipeline {
agent any
environment {
DOCKER_IMAGE = "registry.cn-chengdu.aliyuncs.com/pod-1/spring:${env.BUILD_NUMBER}"
GIT_REPO_URL = 'https://gitee.com/mio1215/spring-boot.git'
GIT_CREDENTIALS_ID = '****' // 替换为你的 Git 凭证 ID
DOCKER_REGISTRY_CREDENTIALS_ID = '****' // 替换为你在 Jenkins 中创建的凭证 ID
SPRING_APP_DIR = '/opt/spring'
DOCKERFILE_PATH = "${SPRING_APP_DIR}/Dockerfile"
}
stages {
stage('Checkout') {
steps {
script {
sh """
mkdir -p ${SPRING_APP_DIR}
"""
dir("${SPRING_APP_DIR}") {
git branch: 'test', url: "${GIT_REPO_URL}", credentialsId: "${GIT_CREDENTIALS_ID}"
}
}
}
}
stage('Docker Build') {
steps {
script {
withCredentials([usernamePassword(credentialsId: "${DOCKER_REGISTRY_CREDENTIALS_ID}", usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
sh """
echo \$PASSWORD | podman login --username=\$USERNAME --password-stdin registry.cn-chengdu.aliyuncs.com
podman build -t ${DOCKER_IMAGE} -f ${DOCKERFILE_PATH} ${SPRING_APP_DIR}
"""
}
}
}
}
stage('Docker Push') {
steps {
script {
withCredentials([usernamePassword(credentialsId: "${DOCKER_REGISTRY_CREDENTIALS_ID}", usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
sh """
echo \$PASSWORD | podman login --username=\$USERNAME --password-stdin registry.cn-chengdu.aliyuncs.com
podman push ${DOCKER_IMAGE}
"""
}
}
}
}
}
}
2、执行任务
1)在本地/opt/spring目录下创建Dockerfile文件:vim /opt/spring/Dockerfile
# 选择基础镜像
FROM registry.cn-chengdu.aliyuncs.com/pod-1/spring:v3
# 设置工作目录
WORKDIR /opt/spring-prod
# 复制 Spring Boot 应用程序源码到容器中
COPY . /opt/spring-prod/
# 暴露应用端口
EXPOSE 8008
# 启动命令
ENTRYPOINT ["mvn", "spring-boot:run"]
2)执行构建任务:将代码拉取到本地的/opt/spring目录下,并自动创建和推送镜像。
三、更新应用
1、编写deployment资源文件:vim spring-deploy.yaml
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: spring-deploy
spec:
replicas: 2
selector:
matchLabels:
app: spring
template:
metadata:
labels:
app: spring
spec:
containers:
- name: spring
image: registry.cn-chengdu.aliyuncs.com/pod-1/spring:1
command: ['mvn', 'spring-boot:run']
ports:
- containerPort: 8008
imagePullSecrets:
- name: myregistrykey
2)更新应用:kubectl apply -f spring-deploy.yaml
3)查看pod地址:kubectl get pods -o wide
4)访问API:curl 192.168.200.225:8008/anfield