使用CI/CD自动部署K8s应用

一、更新代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值