• Jenkins Pipeline + Git + Harbor + Kubernetes 部署 Springboot 项目


    整个 CICD 流程大致如下:

    这里 jenkins/gitlab/harbor 都是现成的哈,主要记录一下集成过程和其中遇到的问题。

    1、创建一个流水线任务

    2、填写项目描述

    3、编写 pipeline 脚本和其中调用的 shell 脚本

    pipeline {
        agent any
    
        environment {
            REPOSITORY="http://172.20.2.144/cloudpath/iam/cloudpath-iam.git"
            MODULE="iam-admin"
            ENVRMT="dev"
            NAMESPACE="cloudpath-$ENVRMT"
            KIND="deployment"
            SCRIPT_PATH="/home/jenkins/scripts"
        }
    
        stages {
    
            stage('拉取代码') {
                steps {
                    echo "start fetch code from git:${REPOSITORY}"
                    deleteDir()
                    script {
                        checkout([$class: 'GitSCM', branches: [[name: "$ENVRMT"]], userRemoteConfigs: [[credentialsId: '3f308c08-a313-415e-9eb9-0225ee07829e', url: "$REPOSITORY"]]])
                    }
                }
            }
    
            stage('代码静态检查') {
                steps {
                    echo "start code check"
                }
            }
    
            stage('编译+单元测试') {
                steps {
                    echo "start compile"
                    sh "source /etc/profile && cd $MODULE && mvn clean install package -U -Dmaven.test.skip=true"
                }
            }
    
            stage('构建上传镜像') {
                steps {
                    echo "start build image"
                    sh "${SCRIPT_PATH}/build_image.sh $MODULE $NAMESPACE"
                }
            }
    
            stage('发布到K8S') {
                steps {
                    echo "start deploy"
                    sh "${SCRIPT_PATH}/deploy.sh $NAMESPACE $KIND $MODULE $MODULE "
                }
            }
        }
    }
    
    #!/usr/bin/env bash
    
    MODULE=$1
    PROJECT=$2
    TIME=$(date +%Y%m%d%H%M)
    GIT_VERISON=$(git log -1 --pretty=format:"%h")
    IMAGE_NAME=172.20.31.131/${PROJECT}/${MODULE}:${TIME}_${GIT_VERISON}
    
    docker login http://172.20.31.131 -u yunjing -p 123456Qq
    
    cd ${MODULE}
    docker build -t ${IMAGE_NAME} .
    
    cd -
    docker push ${IMAGE_NAME}
    
    echo ${IMAGE_NAME} > IMAGE_NAME
    
    #!/usr/bin/env bash
    
    IMAGE=$(cat IMAGE_NAME)
    NAMESPACE=$1
    KIND=$2
    NAME=$3
    MODULE=$4
    
    echo "update image to ${IMAGE}"
    kubectl --kubeconfig /home/jenkins/scripts/config -n ${NAMESPACE} set image ${KIND} ${NAME} ${MODULE}=${IMAGE}
    

    完成后效果如下:


    以下是遇到的问题:

    1、在 pipeline 中,拉取代码时如何指定分支
    2、拉取代码时如何指定账号登录信息
    3、编译代码时找不到 mvn/java/javac

    添加 source /etc/profile
    

    4、编译时没有权限创建拉取的 jar 包存放目录

    修改仓库目录权限
    cd /home/.m2/
    chown jenkins.jenkins -R repository
    

    5、没有权限访问自定义的 shell 脚本

    修改脚本目录权限
    cd /home/jenkins/
    chown jenkins.jenkins -R scripts
    

    6、没有权限访问 /var/run/docker.sock

    修改 sock 文件的权限
    chmod 777 /var/run/docker.sock
    

    7、在脚本中区分项目和不同环境
    8、在构建脚本中创建的镜像名称变量如何传递给另一个发布脚本

    a. 在构建脚本中将镜像名称保存到一个文件
    b. 在发布脚本中通过读该文件来获取镜像名称
    

    9、需要在 jenkins 节点上安装 kubectl
    10、需要把 admin.conf 文件 copy 到 jenkins 节点上,通过 kubectl 远程访问 k8s 集群

    参考:
    https://www.cnblogs.com/hellxz/p/pipeline_pull_project.html
    https://www.cnblogs.com/shengulong/p/11220410.html
    https://www.cnblogs.com/Dev0ps/p/10502803.html
    http://www.louzhutie.cn/?articles/754083
    https://github.com/KeithTt/microservice

  • 相关阅读:
    关于《注意力模型--Attention注意力机制》的学习
    神经网络参数计算
    FPN(feature pyramid networks)算法讲解
    RetinaNet-focal loss
    论文阅读: RetinaNet
    CNN+LSTM:看图说话
    非极大值抑制-NMS
    python IO文件操作 file文件操作
    软件测试定义 分类
    软件生命周期
  • 原文地址:https://www.cnblogs.com/keithtt/p/13149895.html
Copyright © 2020-2023  润新知