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 -

浙公网安备 33010602011771号