找到devpos

选中平台管理

点击访问控制

创建企业空间

然后进入企业空间

点击devpos项目,然后创建项目



创建项目

编写Deployment
在k8s中每个pod中对应着一个Deployment.yaml配置文件所以想要项目上线,就需要先编写Deployment文件
以gateway为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| kind: Deployment apiVersion: apps/v1 metadata: name: k-gateway namespace: koalas-cloud labels: app: k-gateway annotations: deployment.kubernetes.io/revision: '1' kubesphere.io/alias-name: 网关 kubesphere.io/creator: admin spec: replicas: 1 selector: matchLabels: app: k-gateway template: metadata: labels: app: k-gateway spec: volumes: - name: host-time hostPath: path: /etc/localtime type: '' containers: - name: container-gateway image: '$REGISTRY/$DOCKERHUB_NAMESPACE/koalas-gateway:SNAPSHOT-$BUILD_NUMBER' ports: - name: tcp-5056 containerPort: 5056 protocol: TCP env: - name: JAVA_OPTS valueFrom: configMapKeyRef: name: k-evn key: JAVA_OPTS - name: SPRING_CONFIG valueFrom: configMapKeyRef: name: k-evn key: SPRING_CONFIG resources: limits: cpu: '1' memory: 1000Mi requests: cpu: 500m memory: 320Mi volumeMounts: - name: host-time readOnly: true mountPath: /etc/localtime terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: IfNotPresent restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst serviceAccountName: default serviceAccount: default securityContext: {} imagePullSecrets: - name: demo-harbor-secret schedulerName: default-scheduler strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 25% maxSurge: 25% revisionHistoryLimit: 10 progressDeadlineSeconds: 600
|
添加凭证
在编写流水线的地方需要先把凭证添加好
添加git代码凭证


输入有读权限的git账号密码,这里也可以用ssl方式不一一列举
添加harbor凭证
同git一致
添加kubeconfig
kubeconfig是k8s容器内可以执行ketcel命令的权限标识符

选择后内容自动填充的不需要手动输入

编写流水线
找到刚才新建的流水线,打开Jenkinsfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| pipeline { agent { node { label 'maven' }
} stages { stage('代码拉取') { when { expression { return (params.IS_BUILD_AND_PACKAGE == true) }
} post { success { echo '代码拉取成功!' }
} steps { container('maven') { checkout([$class: 'GitSCM', branches: [[name: "${BRANCH_TAG}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'koalas-code', url: "http://git.tetpark.com/tingeting/koalas-cloud.git"]]]) sh "ls" } } }
stage('Maven编译代码') { agent none when { expression { return (params.IS_BUILD_AND_PACKAGE == true) }
} post { success { echo '编译代码成功!' }
} steps { container('maven') { sh 'mvn -Dmaven.test.skip=true -gs `pwd`/configuration/settings.xml clean package' sh "ls" }
} }
stage('构建镜像,推送') { steps { container('maven') { withCredentials([usernamePassword(passwordVariable : 'HARBOR_PASSWORD' ,usernameVariable : 'HARBOR_USERNAME' ,credentialsId : "$DOCKER_CREDENTIAL_ID" ,)]) { sh 'echo "$HARBOR_PASSWORD" | docker login $REGISTRY -u "$HARBOR_USERNAME" --password-stdin' } script { sh "ls" services_str = "${SERVICES}" def services = services_str.split("\n") for (int i = 0; i < services.size(); ++i){ service_name = services[i].replaceAll("\"", "") echo "选择的服务:${service_name}" // 制作镜像 if("${service_name}".contains("koalas-gateway") || "${service_name}".contains("koalas-auth")){ //基础镜像构建 sh "docker build -t $REGISTRY/$DOCKERHUB_NAMESPACE/${service_name}:SNAPSHOT-$BUILD_NUMBER ${service_name}" }else{ sh "docker build -t $REGISTRY/$DOCKERHUB_NAMESPACE/${service_name}:SNAPSHOT-$BUILD_NUMBER koalas-modules/${service_name}" } // 镜像标签 sh "docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/${service_name}:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/${service_name}:${BRANCH_TAG}" // 上传镜像 sh "docker push $REGISTRY/$DOCKERHUB_NAMESPACE/${service_name}:SNAPSHOT-$BUILD_NUMBER" } //删除悬虚镜像 sh "docker image prune -a -f" // 登出私有仓库 sh "docker logout $REGISTRY" }
}
} }
stage('发布到测试环境') { agent none steps { container('maven') { sh 'kubectl version --short --client' withCredentials([kubeconfigFile(credentialsId: "$KUBECONFIG_CREDENTIAL_ID", variable: 'KUBECONFIG')]) { script { sh "ls" services_str = "${SERVICES}" def services = services_str.split("\n") for (int i = 0; i < services.size(); ++i){ service_name = services[i].replaceAll("\"", "") echo "选择的服务:${service_name}" if("${service_name}".contains("koalas-gateway") || "${service_name}".contains("koalas-auth")){ sh "envsubst < ${service_name}/deploy/dev/deploy.yml | kubectl apply -f -" }else{ sh "envsubst < koalas-modules/${service_name}/deploy/dev/deploy.yml | kubectl apply -f -" } } } } } } } } environment { DOCKER_CREDENTIAL_ID = 'harbor' GITHUB_CREDENTIAL_ID = 'koalas-code' KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig' REGISTRY = '192.168.1.121:8098' DOCKERHUB_NAMESPACE = 'koalas-cloud' } }
|
运行效果

点击运行

选择k8s-dev分支
选择你要更新的模块点击更新
等着发布完成就好
