大致流程

  • 开发人员把做好的 knight.blog.csdn.net 项目代码通过git推送到gitlab
  • 然后Jenkins通过 gitlab webhook (前提是配置好),自动从拉取gitlab上面拉取代码下来。(作用是实现本地 git push 后 jenkins 自动构建部署服务)
  • 然后进行build,编译、生成镜像、然后把镜像推送到Harbor仓库;
  • 然后在部署的时候通过k8s拉取Harbor上面的代码进行创建容器和服务,最终发布完成,然后可以用外网访问

第一阶段,获取代码(Git)
第二阶段,编译打包(Maven)
第三阶段,镜像打包与推送到仓库 (Harbor)
第四阶段,部署应用到k8s集群 (kubectl)

pipeline 的编写

pipeline{

      environment{
	    // 定义变量,或从Jenkins传入进来的变量
      }

      agent{
        node{
          // 选择 k8s 集群节点
        }
      }

      stages{
 
            stage('获取代码'){
                steps{
                 // 拉取项目程序源码
               }
            }
            
            stage('代码编译打包'){
              steps{
                 container("maven") {
                 // 使用 maven 容器,编译打包
                 }
              }
            }

            stage('镜像构建推送'){
              steps{ 
              	container("kaniko") { 
                    // 使用 kaniko 容器, docker镜像编译与推送到镜像仓库
                }
              }
            }

            stage('获取部署配置'){
              steps{
                 // 拉取 yaml 部署文件
               }
              }
             
            stage('应用部署到K8S集群') {
              steps {
                container('kubectl') {
                // 使用 kubectl 容器, 执行 yaml 部署文件,部署应用到 k8s集群
                }	
              }  
            }
			
        }
    }

形象图描述如下:

命令流程

export JENKINS_HOME="/root/.jenkins/workspace/springboot-jenkins"
export JENKINS_VERSION="v0.1"
 
echo "JENKINS_HOME:${JENKINS_HOME},JENKINS_VERSION:${JENKINS_VERSION}"
 
echo "开始打包"
mvn clean
mvn package
 
echo "开始制作镜像"
docker build -t 你的私有Harbor地址/knight/jenkins:$JENKINS_VERSION $JENKINS_HOME
 
echo "开始推镜像"
docker push 你的私有Harbor地址/knight/jenkins:$JENKINS_VERSION
 
echo "开始运行镜像"
kubectl apply -f $JENKINS_HOME/build/jenkins-svc.yaml

# 使用envsubst传递export的参数
envsubst < $JENKINS_HOME/build/jenkins-deployment.yaml | kubectl apply -f -

编写DockerFile:

# Java8镜像
FROM knight/base:latest
 
WORKDIR /
 
# 将系统编码设置为c.utf-8,默认的POSIX不支持中文
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
 
# 将子项目打包的jar包拷贝到项目根目录
COPY target/springboot-jenkins-0.0.1-SNAPSHOT.jar /jenkins.jar
 
# 设置容器启动时执行的命令,-Dfile.encoding=utf-8
CMD ["java", "-jar", "jenkins.jar"]

编写暴露端口的Service:jenkins-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: jenkinks-service
  labels:
    app: jenkinks-service
spec:
  type: NodePort
  ports:
    - port: 8888
      name: jenkinks-service
      targetPort: 8888
      nodePort: 32088
      protocol: TCP
  selector:
    app: jenkinks-service

编写Deployment: jenkins-svc.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkinks-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      name: jenkinks-service
  template:
    metadata:
      labels:
        name: jenkinks-service
        app: jenkinks-service
    spec:
      containers:
        - name: jeecg
          image: 你的私有Harbor地址/knight/jenkins:$JENKINS_VERSION
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8888

参考

# 参考1
https://www.cnblogs.com/shawhe/p/11313633.html

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐