kubesphere-devops环境搭建

一、开启kubesphere

 二、创建Jenkins流水线

 参数:

REGISTRY—→[harbor.od.com](http://harbor.od.com/)
DOCKERHUB_NAMESPACE—→competition-dev
APP_NAME—→cctegitc-api-frontend
BRANCH_NAME—→dev
BUILD_NUMBER—→latest

1、backend-dev的Jenkins流水线【持续集成&交付 (CI/CD)】

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('拉取代码') {
      agent none
      steps {
        container('maven') {
          git(url: 'http://192.168.30.187:7002/leishenglong/workplace-competition.git', credentialsId: 'gitlab', branch: 'dev', changelog: true, poll: false)
        }

      }
    }

    stage('打包') {
      steps {
        container('maven') {
          sh 'mvn clean install -DskipTests'
          sh '''cd ruoyi-admin/target
cp workplace-competition.jar ../../devops/dev/backend/
mv workplace-competition.jar cctegitc-api.jar'''
        }

      }
    }

    stage('构建镜像&推送harbor') {
      agent none
      steps {
        container('maven') {
          sh '''ls
cd devops/dev/backend/
ls
docker build -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER ./'''
          withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
          }

        }

      }
    }

    stage('部署到测试环境') {
      agent none
      steps {
        container('maven') {
          withCredentials([kubeconfigContent(credentialsId : 'kubespheretest' ,variable : ' KUBECONFIG_CONFIG' ,)]) {
            sh 'mkdir -p ~/.kube/'
            sh '''echo "$KUBECONFIG_CONFIG" > ~/.kube/config
'''
            sh '''cd devops/dev/backend/
ls
envsubst < deployment-competition-service.yaml | kubectl delete -f -
envsubst < service-competition-service.yaml | kubectl delete -f -
envsubst < deployment-competition-service.yaml | kubectl apply -f -
envsubst < service-competition-service.yaml | kubectl apply -f -'''
          }

        }

      }
    }

  }
  environment {
    DOCKER_CREDENTIAL_ID = 'harbor'
    GITHUB_CREDENTIAL_ID = 'gitlab'
    KUBECONFIG_CREDENTIAL_ID = 'kubeconfig'
    REGISTRY = 'harbor.od.com'
    DOCKERHUB_NAMESPACE = 'competition-dev'
    GITHUB_ACCOUNT = 'kubesphere'
    APP_NAME = 'cctegitc-api'
  }
  parameters {
    string(name: 'TAG_NAME', defaultValue: 'dev', description: '')
  }
}

2、frontend-dev的Jenkins流水线【Node.js】

pipeline {
  agent {
    node {
      label 'nodejs'
    }

  }
  stages {
    stage('拉取代码') {
      agent none
      steps {
        container('nodejs') {
          git(url: 'http://192.168.30.187:7002/leishenglong/workplace-competition.git', credentialsId: 'gitlab', branch: 'dev', changelog: true, poll: false)
        }

      }
    }

    stage('打包') {
      agent none
      steps {
        container('nodejs') {
          sh 'ls'
          sh '''cd ruoyi-ui
npm install --registry=https://registry.npm.taobao.org
npm run build:stage
cp -r dist ../devops/dev/frontend/'''
        }

      }
    }

    stage('构建镜像&推送harbor') {
      agent none
      steps {
        container('nodejs') {
          sh '''ls
cd devops/dev/frontend/
ls
docker build -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER ./'''
          withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
          }

        }

      }
    }

    stage('部署到测试环境') {
      agent none
      steps {
        container('nodejs') {
          withCredentials([kubeconfigContent(credentialsId : 'kubespheretest' ,variable : ' KUBECONFIG_CONFIG' ,)]) {
            sh 'mkdir -p ~/.kube/'
            sh '''echo "$KUBECONFIG_CONFIG" > ~/.kube/config
'''
            sh '''cd devops/dev/backend/
ls
envsubst < deployment-competition-service.yaml | kubectl delete -f -
envsubst < service-competition-service.yaml | kubectl delete -f -
envsubst < deployment-competition-service.yaml | kubectl apply -f -
envsubst < service-competition-service.yaml | kubectl apply -f -'''
          }

        }

      }
    }

  }
  environment {
    DOCKER_CREDENTIAL_ID = 'harbor'
    GITHUB_CREDENTIAL_ID = 'gitlab'
    KUBECONFIG_CREDENTIAL_ID = 'kubeconfig'
    REGISTRY = 'harbor.od.com'
    DOCKERHUB_NAMESPACE = 'competition-dev'
    GITHUB_ACCOUNT = 'kubesphere'
    APP_NAME = 'cctegitc-api-frontend'
  }
  parameters {
    string(name: 'TAG_NAME', defaultValue: 'dev', description: '')
  }
}

三、常见问题

1、harbor登录 & kubesphere认证

harbor登录

kubesphere认证

 2、指定node版本

 通过node命令,在Jenkins流水线中,进行node版本的升级

npm install -g n
npm -g install npm@9.7.2
npm cache clean --force

 3、标签不改,镜像更新问题

(1)更新harbor仓库的镜像

docker tag:标记本地镜像,将其归入某一个仓库 
docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER

(2)更改镜像拉取策略

 (3)先删后创建

envsubst < deployment-detection-service.yaml | kubectl delete -f -
envsubst < service-detection-service.yaml | kubectl delete -f -
envsubst < deployment-detection-service.yaml | kubectl apply -f -
envsubst < service-detection-service.yaml | kubectl apply -f -
posted @ 2023-10-31 16:25  liubingPersonalBlog  阅读(271)  评论(0)    收藏  举报