From e38bf7e1af2c26b91c66329cf03837e414237290 Mon Sep 17 00:00:00 2001 From: icechen Date: Mon, 10 Jan 2022 17:51:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0namespace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.yaml | 24 ++++++++ config/kube.go | 58 +++++++++++++++++++ config_handler/api_config.go | 23 ++++---- config_handler/config_handler.go | 22 +++++-- config_handler/real_config.go | 13 +---- config_handler/service_config.go | 19 +++--- go_handler/go_api_handler.go | 25 +++++--- .../go_api_production_pipeline.go | 23 +++----- .../go_api_test_pipeline.go | 23 +++----- .../go_service_production_pipeline.go | 23 +++----- .../go_service_test_pipeline.go | 23 +++----- go_handler/go_service_handler.go | 21 ++++--- 12 files changed, 187 insertions(+), 110 deletions(-) create mode 100644 config/config.yaml create mode 100644 config/kube.go diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..5dadd14 --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,24 @@ +reg: + registry: reg.icechen.cn + username: ananta + password: ananta01 + +kube: + zeus: + onl: + kube_api_server: https://paw.show:6443 + kube_certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1USXlNakU0TVRNME1sb1hEVE14TVRJeU1ERTRNVE0wTWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE0zCjNDSGRweGRmMDMvR2xEME1Gb1VrYmJFR2VuRHl3U1pINERnbzZ6NzJZUGVyNi9WR3M2enVzTlRic0VKKzNHOUoKSlJteDVYUlVmZDhCVFVUblUzYVJQUFdtK0NEbDNDZERHUUdpYWNySldrMnZVaHQzdXBSbDhUOXdJL0YwejB0RgpWQW5qVmlWVmZndmIvNjliZnNQSjJtV3JPWWY3M25CVWs5VjFyRjRQRSs2cXFEUG1pTm1zb1F0SFdBNjBpclh2CkFtd3ZuMFo0S2RudFdWUlNVU3VXU21QaUlIQzVSdlZUa3QrR0hQcW5WRUl1YXlNcjlxTVI3eWRjdDJBNmptNTIKcnZ6NGlKdEV2blhFbGx3VS9QUkRoeEZjaldOTFM1akEyNEpZOVRjOE90Z2syM2FlY2NHSUZOeW9HcnRPTXVIZgpJVkQxdyt2TWVaQ0ZKMzVvdFhjQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZFakN1bEtxU0dKY2JxejUvOXVSQzBjVW1ybkFNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFCN1RFZEtTdlNLb3F3b1FCUnZpTktlVTM0bWd5NUE2Q3JMQmwxUWQ1aVdkRitXWU1PRApub3JJOGJERmJUTy92VGpNUWo4eGJoNk5lbDdlenkxZU0wRFhHM0FESS9hVVM1VHlVaVlyNFpNd3NWY0ZaT2crCjJXam9uYzFUSzdHdk44TmdkYjZVZzUvUklVZis5S1pyZSsrQkgvRWJhMUNWU3JzcDRYNDJvOWFCQ0FzUE1zZmwKRHlCSHNiRk1Vb1BYZU5vaSsvTlZmamlvd2duVXJkY2puTUxXeUh3N3ZCSTJKeFE5Qy96MHVNVHNnU2VwRVk4ZApmSHd5R0M0Z1RTTzI0WGV2V0grb2ROOFpGQTJJZ1pJaHhhZ0dWeG1ZaWpyZ0N6dTBucWdxWUxlRitkb25jOUxMCmxFR0pxRU94R251NzU4aHJRSFlhK25QYk9heWlGbzlsOE93MwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + kube_token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlhNRC1VNk1pcXR1bEowR2pnWTNhQ0ZVTjU1YWs3d041ejFZdER6bmwxR28ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJ6ZXVzIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRyb25lLXRva2VuLWpzeDQyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRyb25lIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOWQ3MmU1ZWEtMjk4Mi00ZWFkLWIyMzUtOTBlMjg2NjA1ZTY1Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OnpldXM6ZHJvbmUifQ.IMiYpJ5ckUESrGMaea_OpPx_D0lCg7OwhwHopKBDJmZdFHLXa321p27D2MqU8br3UtqrRnda-If77821VsPZ_h_VsILY_yxLGBS8lLEn8b2hSRmc3QIjAFZ9u4lFxON2EqOvQT2dzuZXtn_FgYx_RFwC78RleY7Wz7h6ikEVYghc7Z19FwlAGx8k9MDpDmNgYxGdGqoYt34KXAo2Syj1knzDrdheJvpkOAsmTluK__OHF9y3kAk-HPBR964EWj3eQlfJUwPxsedYgyKE1ypaOTaW4H4ZMfIzuW-RVmLQKJtYhei1IxMFWvYuhJ_RAxmKgKZarYjvmpTlZr7fzwLp2g + test: + kube_api_server: https://new.icechen.cn:6443 + kube_certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUyTkRFek5URTJNekl3SGhjTk1qSXdNVEExTURNd01ETXlXaGNOTXpJd01UQXpNRE13TURNeQpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUyTkRFek5URTJNekl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRM1N3L1M3SFBFMnJ5WnR1ZE1TWlJzSzdROUZmUmJ2bDZldFBBRmZreU0KT1gwOEhRaTZPQWpidXh3azE0MG54b2p6T2trRHZnWkZNTmFhcUZJSlhoWEtvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVS9aMmdWVStIR0U0Mm43dnNjNEJQCmU3engyb2t3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU1xa1l4VEhSWjN4c0E0bUYxRFhnb3pIWjJMMEF3eGcKRVJUQnZDZzQvVmZ6QWlBV0gxa2k4UjczNk5MRmJHNW80bFhGeHIyYlVDcWlCRW9tU2pVdHd2VTA2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + kube_token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImNpSTl3LWZ5SFlZcklEbzlldlY1NnYtWGR2MjFIUm9neFpzWEgxblBQTWsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJ6ZXVzIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRyb25lLXRva2VuLWdrMjlxIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRyb25lIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODkwZDkxMTgtNzU0ZS00YjYwLTkzYjQtMmQyMGFjZDE5ODliIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OnpldXM6ZHJvbmUifQ.Y77dPrm9zscU6h-3wacvd8qtQBF0HR8cEX3ywiGKOu25Oqu92h8VlS-kd8QWKooOEnxgkY2t2dj7XmwMe79i85VFlNtAv5fXYjjF2bFfS_ST5GqQXeHArMRHtzPvB8BkLqDo2DfIOphyzKPj4eADw6tke5QsYheCRpV4RCyXbExTTy8Gco8jcvERkkV6Q8hpYEPnjKMyyfPURFul1ageSsWrjFTJ3E2alZOKjo6jgPlVeoCK5KzWrZtn8F0ihmFtpFWQ334uWs-KuwIm6RjiusL_3eisRY3eSqF0U2pwyIF2wyuV0AOt6iGXkh63MWMh-1LjJoftR2vPwt7pDjUL_w + brahma: + onl: + kube_api_server: https://paw.show:6443 + kube_certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1USXlNakU0TVRNME1sb1hEVE14TVRJeU1ERTRNVE0wTWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE0zCjNDSGRweGRmMDMvR2xEME1Gb1VrYmJFR2VuRHl3U1pINERnbzZ6NzJZUGVyNi9WR3M2enVzTlRic0VKKzNHOUoKSlJteDVYUlVmZDhCVFVUblUzYVJQUFdtK0NEbDNDZERHUUdpYWNySldrMnZVaHQzdXBSbDhUOXdJL0YwejB0RgpWQW5qVmlWVmZndmIvNjliZnNQSjJtV3JPWWY3M25CVWs5VjFyRjRQRSs2cXFEUG1pTm1zb1F0SFdBNjBpclh2CkFtd3ZuMFo0S2RudFdWUlNVU3VXU21QaUlIQzVSdlZUa3QrR0hQcW5WRUl1YXlNcjlxTVI3eWRjdDJBNmptNTIKcnZ6NGlKdEV2blhFbGx3VS9QUkRoeEZjaldOTFM1akEyNEpZOVRjOE90Z2syM2FlY2NHSUZOeW9HcnRPTXVIZgpJVkQxdyt2TWVaQ0ZKMzVvdFhjQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZFakN1bEtxU0dKY2JxejUvOXVSQzBjVW1ybkFNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFCN1RFZEtTdlNLb3F3b1FCUnZpTktlVTM0bWd5NUE2Q3JMQmwxUWQ1aVdkRitXWU1PRApub3JJOGJERmJUTy92VGpNUWo4eGJoNk5lbDdlenkxZU0wRFhHM0FESS9hVVM1VHlVaVlyNFpNd3NWY0ZaT2crCjJXam9uYzFUSzdHdk44TmdkYjZVZzUvUklVZis5S1pyZSsrQkgvRWJhMUNWU3JzcDRYNDJvOWFCQ0FzUE1zZmwKRHlCSHNiRk1Vb1BYZU5vaSsvTlZmamlvd2duVXJkY2puTUxXeUh3N3ZCSTJKeFE5Qy96MHVNVHNnU2VwRVk4ZApmSHd5R0M0Z1RTTzI0WGV2V0grb2ROOFpGQTJJZ1pJaHhhZ0dWeG1ZaWpyZ0N6dTBucWdxWUxlRitkb25jOUxMCmxFR0pxRU94R251NzU4aHJRSFlhK25QYk9heWlGbzlsOE93MwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + kube_token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlhNRC1VNk1pcXR1bEowR2pnWTNhQ0ZVTjU1YWs3d041ejFZdER6bmwxR28ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJicmFobWEiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZHJvbmUtdG9rZW4tY3pxZ3AiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZHJvbmUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJjZmY0NjFmZC01MGE2LTRkMzMtODAxNy0zNGNmMzdkNTAwMWUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6YnJhaG1hOmRyb25lIn0.SYVgYctcXDYOXg6y92b5vEpSPPPo7MXIwhZ008boz0V07tAIhNyGygFOiEBxnaWEQFqOPnuIUi1e_HAUbOOqWFGq0Do4A0yAUvb7aMYVAvaRTb7eB2UbW4MLPKyJWk00MYrq9Zxbrqh38DrWeF8nCpx6LP2m30uYgOW2OcKBSsR5cZCC6p3p_QoOGNFWhIoBrjShO2eFG64nRBB1g9uTbGulvjfS_t9Nyh_umxdaPRMv0yWL0o6wKIjN_8eunlZVZgANxvrUTfyLAA3MlVZ1FmyzbU2BrkRc6Vnpme_0o9Q_5YADdFs8YwgcMpDz1_8wOlOAaGBYN4lJyiiz_QfjKA + test: + kube_api_server: https://new.icechen.cn:6443 + kube_certificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUyTkRFek5URTJNekl3SGhjTk1qSXdNVEExTURNd01ETXlXaGNOTXpJd01UQXpNRE13TURNeQpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUyTkRFek5URTJNekl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRM1N3L1M3SFBFMnJ5WnR1ZE1TWlJzSzdROUZmUmJ2bDZldFBBRmZreU0KT1gwOEhRaTZPQWpidXh3azE0MG54b2p6T2trRHZnWkZNTmFhcUZJSlhoWEtvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVS9aMmdWVStIR0U0Mm43dnNjNEJQCmU3engyb2t3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU1xa1l4VEhSWjN4c0E0bUYxRFhnb3pIWjJMMEF3eGcKRVJUQnZDZzQvVmZ6QWlBV0gxa2k4UjczNk5MRmJHNW80bFhGeHIyYlVDcWlCRW9tU2pVdHd2VTA2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + kube_token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImNpSTl3LWZ5SFlZcklEbzlldlY1NnYtWGR2MjFIUm9neFpzWEgxblBQTWsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJicmFobWEiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZHJvbmUtdG9rZW4teHJoczIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZHJvbmUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxNWMwOWFhYi1jNzc1LTRiNTUtOTFiNy1hYjM3ZmQ3NmQxZDMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6YnJhaG1hOmRyb25lIn0.dUB76nLlzOqJtylHA4k34GMQVxVNBO440iUibcA817SODS6ZExL6HPrVhLXjrrcUyEpp7zSsojeh-BBX8L23AtX--tFHq9tUoo-0MrjT_s9BnmSvDSrLHOyk0-5CyXuYaCW_Bf8kqE-zt4yg3isyV2W8tO0nFX3fILbLRU7vWvP0wd_n_KLrn1QENF-iQQoDEaoO-Cfy6DQSoHMcwuUcgbAJYUGVP92DteyXgpwArzsACtbuEq1uCXezy_5ZLHEy_wqKmVndSQoaUgU7Z4Fir6VdKXa6p0yi7WfYALp4j1tKTDLbEixraUqDoHSTZKMD46DhY1Jr8SSjF76pMYojbQ \ No newline at end of file diff --git a/config/kube.go b/config/kube.go new file mode 100644 index 0000000..96c4541 --- /dev/null +++ b/config/kube.go @@ -0,0 +1,58 @@ +package config + +import ( + _ "embed" + + "gopkg.in/yaml.v3" +) + +//go:embed "config.yaml" +var configData []byte + +type Config struct { + Reg Registry `json:"reg" yaml:"reg"` + Kube map[string]Kube `json:"kube" yaml:"kube"` +} + +// Registry 镜像仓库信息 +type Registry struct { + Registry string `json:"registry" yaml:"registry"` + Username string `json:"username" yaml:"username"` + Password string `json:"password" yaml:"password"` +} + +// Kube kube信息 +type Kube struct { + Onl KubeConfig `json:"onl" yaml:"onl"` + Test KubeConfig `json:"test" yaml:"test"` +} + +type KubeConfig struct { + KubeApiServer string `json:"kube_api_server" yaml:"kube_api_server"` + KubeCertificate string `json:"kube_certificate" yaml:"kube_certificate"` + KubeToken string `json:"kube_token" yaml:"kube_token"` +} + +var config Config + +func init() { + err := yaml.Unmarshal(configData, &config) + if err != nil { + panic(err) + } +} + +// GetOnlKubeConfigByNamespace 获取namespace的线上kube配置 +func GetOnlKubeConfigByNamespace(namespace string) KubeConfig { + return config.Kube[namespace].Onl +} + +// GetTestKubeConfigByNamespace 获取namespace的测试kube配置 +func GetTestKubeConfigByNamespace(namespace string) KubeConfig { + return config.Kube[namespace].Onl +} + +// GetRegistryConfig 获取镜像仓库配置 +func GetRegistryConfig() Registry { + return config.Reg +} diff --git a/config_handler/api_config.go b/config_handler/api_config.go index 8b6801d..0270bab 100644 --- a/config_handler/api_config.go +++ b/config_handler/api_config.go @@ -5,10 +5,10 @@ import ( "git.icechen.cn/pkg/drone_plugin/go_handler" ) -func (al ApiList) toDestinationConfig(nameSpace string, deployEnv consts.Env, serviceEnv map[string]string) (string, error) { +func (al ApiList) toDestinationConfig(deployEnv consts.Env) (string, error) { retConfig := "" for _, api := range al { - config, err := api.toDestinationConfig(nameSpace, deployEnv, serviceEnv) + config, err := api.toDestinationConfig(deployEnv) if err != nil { return "", err } @@ -17,20 +17,19 @@ func (al ApiList) toDestinationConfig(nameSpace string, deployEnv consts.Env, se return retConfig, nil } -func (a Api) toDestinationConfig(nameSpace string, deployEnv consts.Env, serviceEnv map[string]string) (string, error) { +func (a Api) toDestinationConfig(deployEnv consts.Env) (string, error) { var handler Handler switch a.Type { case go_handler.TypeGolang: handler = go_handler.GoApiHandler{ - NameSpace: nameSpace, - Name: a.Name, - AliasName: a.AliasName, - Root: a.Root, - Port: a.Port, - Host: a.Host, - Path: a.Path, - ServiceEnv: serviceEnv, - DeployEnv: deployEnv, + NameSpace: a.Namespace, + Name: a.Name, + AliasName: a.AliasName, + Root: a.Root, + Port: a.Port, + Host: a.Host, + Path: a.Path, + DeployEnv: deployEnv, } } diff --git a/config_handler/config_handler.go b/config_handler/config_handler.go index 5fc9bca..abc8c3a 100644 --- a/config_handler/config_handler.go +++ b/config_handler/config_handler.go @@ -62,7 +62,7 @@ func (p *plugin) Find(ctx context.Context, req *config.Request) (*drone.Config, // 4. 根据文件树以及原始配置文件的信息,组装需要构建的服务的ci信息 // 4.1 api modifiedApiList := getModifiedApi(cfg.Api, modifiedFileList, foundAppByMessage(req.Build.Message), foundAppByParams(req.Build.Params)) - destinationApi, err := modifiedApiList.toDestinationConfig(cfg.Name, getDeployEnv(req), cfg.toServiceEnv()) + destinationApi, err := modifiedApiList.toDestinationConfig(getDeployEnv(req)) if err != nil { logrus.Error(err) return nil, err @@ -70,7 +70,7 @@ func (p *plugin) Find(ctx context.Context, req *config.Request) (*drone.Config, // 4.2 service modifiedServiceList := getModifiedService(cfg.Service, modifiedFileList, foundAppByMessage(req.Build.Message), foundAppByParams(req.Build.Params)) - destinationService, err := modifiedServiceList.toDestinationConfig(cfg.Name, getDeployEnv(req), cfg.toServiceEnv()) + destinationService, err := modifiedServiceList.toDestinationConfig(getDeployEnv(req)) if err != nil { logrus.Error(err) return nil, err @@ -136,8 +136,13 @@ func getDeployApiByAppSlice(api ApiList, appSlice []string) ApiList { ret := make(ApiList, 0) for _, app := range appSlice { for _, a := range api { - if "api-"+a.Name == strings.TrimSpace(app) { - ret = append(ret, a) + appWithNamespace := strings.Split(app, ".") + if len(appWithNamespace) == 2 { + name := appWithNamespace[0] + namespace := appWithNamespace[1] + if a.Namespace == strings.TrimSpace(namespace) && "api-"+a.Name == strings.TrimSpace(name) { + ret = append(ret, a) + } } } } @@ -166,8 +171,13 @@ func getDeployServiceByAppSlice(service ServiceList, appSlice []string) ServiceL ret := make(ServiceList, 0) for _, app := range appSlice { for _, s := range service { - if "service-"+s.Name == strings.TrimSpace(app) { - ret = append(ret, s) + appWithNamespace := strings.Split(app, ".") + if len(appWithNamespace) == 2 { + name := appWithNamespace[0] + namespace := appWithNamespace[1] + if s.Namespace == strings.TrimSpace(namespace) && "service-"+s.Name == strings.TrimSpace(name) { + ret = append(ret, s) + } } } } diff --git a/config_handler/real_config.go b/config_handler/real_config.go index 9777646..327e608 100644 --- a/config_handler/real_config.go +++ b/config_handler/real_config.go @@ -3,7 +3,6 @@ package config_handler import ( "git.icechen.cn/pkg/drone_plugin/git" "gopkg.in/yaml.v3" - "strings" ) const TypeMonorepo = "monorepo" // 单库类型 @@ -16,18 +15,10 @@ type Config struct { Service ServiceList `json:"service" yaml:"service"` } -func (c Config) toServiceEnv() map[string]string { - sl := c.Service - retMap := make(map[string]string) - for _, service := range sl { - retMap[strings.ToUpper("SERVICE_"+service.Name)] = c.Name + "-" + service.Name + ":" + service.Port - } - return retMap -} - type ( ApiList []Api Api struct { + Namespace string `json:"namespace" yaml:"namespace"` Name string `json:"name" yaml:"name"` AliasName string `json:"alias_name" yaml:"aliasName"` Root string `json:"root" yaml:"root"` @@ -37,9 +28,11 @@ type ( Path string `json:"path" yaml:"path"` } ) + type ( ServiceList []Service Service struct { + Namespace string `json:"namespace" yaml:"namespace"` Name string `json:"name" yaml:"name"` AliasName string `json:"alias_name" yaml:"aliasName"` Root string `json:"root" yaml:"root"` diff --git a/config_handler/service_config.go b/config_handler/service_config.go index 2e7997f..ded028d 100644 --- a/config_handler/service_config.go +++ b/config_handler/service_config.go @@ -5,10 +5,10 @@ import ( "git.icechen.cn/pkg/drone_plugin/go_handler" ) -func (sl ServiceList) toDestinationConfig(nameSpace string, deployEnv consts.Env, serviceEnv map[string]string) (string, error) { +func (sl ServiceList) toDestinationConfig(deployEnv consts.Env) (string, error) { retConfig := "" for _, service := range sl { - config, err := service.toDestinationConfig(nameSpace, deployEnv, serviceEnv) + config, err := service.toDestinationConfig(deployEnv) if err != nil { return "", err } @@ -17,18 +17,17 @@ func (sl ServiceList) toDestinationConfig(nameSpace string, deployEnv consts.Env return retConfig, nil } -func (s Service) toDestinationConfig(nameSpace string, deployEnv consts.Env, serviceEnv map[string]string) (string, error) { +func (s Service) toDestinationConfig(deployEnv consts.Env) (string, error) { var handler Handler switch s.Type { case go_handler.TypeGolang: handler = go_handler.GoServiceHandler{ - NameSpace: nameSpace, - Name: s.Name, - AliasName: s.AliasName, - Root: s.Root, - Port: s.Port, - ServiceEnv: serviceEnv, - DeployEnv: deployEnv, + NameSpace: s.Namespace, + Name: s.Name, + AliasName: s.AliasName, + Root: s.Root, + Port: s.Port, + DeployEnv: deployEnv, } } diff --git a/go_handler/go_api_handler.go b/go_handler/go_api_handler.go index 771472d..fd6dc55 100644 --- a/go_handler/go_api_handler.go +++ b/go_handler/go_api_handler.go @@ -4,6 +4,8 @@ import ( "bytes" "text/template" + "git.icechen.cn/pkg/drone_plugin/config" + "git.icechen.cn/pkg/drone_plugin/go_handler/go_handler_template" "git.icechen.cn/pkg/drone_plugin/consts" @@ -12,24 +14,29 @@ import ( const TypeGolang = "golang" type GoApiHandler struct { - NameSpace string - Name string - AliasName string - Root string - Port string - Host string - Path string - ServiceEnv map[string]string - DeployEnv consts.Env + NameSpace string + Name string + AliasName string + Root string + Port string + Host string + Path string + DeployEnv consts.Env + + Reg config.Registry + Kube config.KubeConfig } func (gah GoApiHandler) ToDestinationConfig() (string, error) { var err error t := template.New(gah.Name) + gah.Reg = config.GetRegistryConfig() apiPipeline := go_handler_template.ApiTestPipeline + gah.Kube = config.GetTestKubeConfigByNamespace(gah.NameSpace) if gah.DeployEnv == consts.EnvProduction { apiPipeline = go_handler_template.ApiProductionPipeline + gah.Kube = config.GetOnlKubeConfigByNamespace(gah.NameSpace) } t, err = t.Parse(apiPipeline) diff --git a/go_handler/go_handler_template/go_api_production_pipeline.go b/go_handler/go_handler_template/go_api_production_pipeline.go index 0590adb..593fdb0 100644 --- a/go_handler/go_handler_template/go_api_production_pipeline.go +++ b/go_handler/go_handler_template/go_api_production_pipeline.go @@ -3,7 +3,7 @@ package go_handler_template const ApiProductionPipeline = ` kind: pipeline type: docker -name: 部署production-api-{{ .Name }} +name: 部署production-api-{{ .Name }}.{{ .NameSpace }} steps: - name: build @@ -12,12 +12,10 @@ steps: - name: docker path: /var/run/docker.sock settings: - username: - from_secret: reg_username - password: - from_secret: reg_password - repo: reg.icechen.cn/{{ .NameSpace }}/api-{{ .Name }} - registry: reg.icechen.cn + username: {{ .Reg.Password }} + password: {{ .Reg.Registry }} + repo: {{ .Reg.Registry }}/{{ .NameSpace }}/api-{{ .Name }} + registry: {{ .Reg.Registry }} tags: - ${DRONE_TAG} - latest @@ -27,12 +25,9 @@ steps: - name: deploy image: bitsbeats/drone-helm3 settings: - kube_api_server: - from_secret: kubernetes_server - kube_token: - from_secret: kubernetes_token - kube_certificate: - from_secret: kubernetes_cert + kube_api_server: {{ .Kube.KubeApiServer }} + kube_token: {{ .Kube.KubeToken }} + kube_certificate: {{ .Kube.KubeCertificate }} chart: ./{{ .Root }}/deploy release: api-{{ .Name }} wait: true @@ -40,7 +35,7 @@ steps: values: - nameSpace={{ .NameSpace }} - aliasName={{ .AliasName }} - - image=reg.icechen.cn/{{ .NameSpace }}/api-{{ .Name }} + - image={{ .Reg.Registry }}/{{ .NameSpace }}/api-{{ .Name }} - imageTag=${DRONE_TAG} - port={{ .Port }} {{ if .Host }} diff --git a/go_handler/go_handler_template/go_api_test_pipeline.go b/go_handler/go_handler_template/go_api_test_pipeline.go index d2c4fb1..86ee939 100644 --- a/go_handler/go_handler_template/go_api_test_pipeline.go +++ b/go_handler/go_handler_template/go_api_test_pipeline.go @@ -3,7 +3,7 @@ package go_handler_template const ApiTestPipeline = ` kind: pipeline type: docker -name: 部署test-api-{{ .Name }} +name: 部署test-api-{{ .Name }}.{{ .NameSpace }} steps: - name: build @@ -12,12 +12,10 @@ steps: - name: docker path: /var/run/docker.sock settings: - username: - from_secret: reg_username - password: - from_secret: reg_password - repo: reg.icechen.cn/{{ .NameSpace }}/api-{{ .Name }} - registry: reg.icechen.cn + username: {{ .Reg.Password }} + password: {{ .Reg.Registry }} + repo: {{ .Reg.Registry }}/{{ .NameSpace }}/api-{{ .Name }} + registry: {{ .Reg.Registry }} tags: - ${DRONE_COMMIT:0:8} - latest @@ -27,12 +25,9 @@ steps: - name: deploy image: bitsbeats/drone-helm3 settings: - kube_api_server: - from_secret: kubernetes_server_test - kube_token: - from_secret: kubernetes_token_test - kube_certificate: - from_secret: kubernetes_cert_test + kube_api_server: {{ .Kube.KubeApiServer }} + kube_token: {{ .Kube.KubeToken }} + kube_certificate: {{ .Kube.KubeCertificate }} chart: ./{{ .Root }}/deploy release: api-{{ .Name }}-test wait: true @@ -40,7 +35,7 @@ steps: values: - nameSpace={{ .NameSpace }} - aliasName={{ .AliasName }} - - image=reg.icechen.cn/{{ .NameSpace }}/api-{{ .Name }} + - image={{ .Reg.Registry }}/{{ .NameSpace }}/api-{{ .Name }} - imageTag=${DRONE_COMMIT:0:8} - port={{ .Port }} {{ if .Host }} diff --git a/go_handler/go_handler_template/go_service_production_pipeline.go b/go_handler/go_handler_template/go_service_production_pipeline.go index 5983ec2..a4a8d24 100644 --- a/go_handler/go_handler_template/go_service_production_pipeline.go +++ b/go_handler/go_handler_template/go_service_production_pipeline.go @@ -3,7 +3,7 @@ package go_handler_template const ServiceProductionPipeline = ` kind: pipeline type: docker -name: 部署production-service-{{ .Name }} +name: 部署production-service-{{ .Name }}.{{ .NameSpace }} steps: - name: build @@ -12,12 +12,10 @@ steps: - name: docker path: /var/run/docker.sock settings: - username: - from_secret: reg_username - password: - from_secret: reg_password - repo: reg.icechen.cn/{{ .NameSpace }}/service-{{ .Name }} - registry: reg.icechen.cn + username: {{ .Reg.Password }} + password: {{ .Reg.Registry }} + repo: {{ .Reg.Registry }}/{{ .NameSpace }}/service-{{ .Name }} + registry: {{ .Reg.Registry }} tags: - "${DRONE_TAG}" - latest @@ -27,12 +25,9 @@ steps: - name: deploy image: bitsbeats/drone-helm3 settings: - kube_api_server: - from_secret: kubernetes_server - kube_token: - from_secret: kubernetes_token - kube_certificate: - from_secret: kubernetes_cert + kube_api_server: {{ .Kube.KubeApiServer }} + kube_token: {{ .Kube.KubeToken }} + kube_certificate: {{ .Kube.KubeCertificate }} chart: ./{{ .Root }}/deploy release: service-{{ .Name }} wait: true @@ -40,7 +35,7 @@ steps: values: - nameSpace={{ .NameSpace }} - aliasName={{ .AliasName }} - - image=reg.icechen.cn/{{ .NameSpace }}/service-{{ .Name }} + - image={{ .Reg.Registry }}/{{ .NameSpace }}/service-{{ .Name }} - imageTag=${DRONE_TAG} - port={{ .Port }} diff --git a/go_handler/go_handler_template/go_service_test_pipeline.go b/go_handler/go_handler_template/go_service_test_pipeline.go index 2ce3974..4b1880d 100644 --- a/go_handler/go_handler_template/go_service_test_pipeline.go +++ b/go_handler/go_handler_template/go_service_test_pipeline.go @@ -3,7 +3,7 @@ package go_handler_template const ServiceTestPipeline = ` kind: pipeline type: docker -name: 部署test-service-{{ .Name }} +name: 部署test-service-{{ .Name }}.{{ .NameSpace }} steps: - name: build @@ -12,12 +12,10 @@ steps: - name: docker path: /var/run/docker.sock settings: - username: - from_secret: reg_username - password: - from_secret: reg_password - repo: reg.icechen.cn/{{ .NameSpace }}/service-{{ .Name }} - registry: reg.icechen.cn + username: {{ .Reg.Password }} + password: {{ .Reg.Registry }} + repo: {{ .Reg.Registry }}/{{ .NameSpace }}/service-{{ .Name }} + registry: {{ .Reg.Registry }} tags: - ${DRONE_COMMIT:0:8} - latest @@ -27,12 +25,9 @@ steps: - name: deploy image: bitsbeats/drone-helm3 settings: - kube_api_server: - from_secret: kubernetes_server_test - kube_token: - from_secret: kubernetes_token_test - kube_certificate: - from_secret: kubernetes_cert_test + kube_api_server: {{ .Kube.KubeApiServer }} + kube_token: {{ .Kube.KubeToken }} + kube_certificate: {{ .Kube.KubeCertificate }} chart: ./{{ .Root }}/deploy release: service-{{ .Name }}-test wait: true @@ -40,7 +35,7 @@ steps: values: - nameSpace={{ .NameSpace }} - aliasName={{ .AliasName }} - - image=reg.icechen.cn/{{ .NameSpace }}/service-{{ .Name }} + - image={{ .Reg.Registry }}/{{ .NameSpace }}/service-{{ .Name }} - imageTag=${DRONE_COMMIT:0:8} - port={{ .Port }} diff --git a/go_handler/go_service_handler.go b/go_handler/go_service_handler.go index d489e3f..539332f 100644 --- a/go_handler/go_service_handler.go +++ b/go_handler/go_service_handler.go @@ -4,28 +4,35 @@ import ( "bytes" "text/template" + "git.icechen.cn/pkg/drone_plugin/config" + "git.icechen.cn/pkg/drone_plugin/go_handler/go_handler_template" "git.icechen.cn/pkg/drone_plugin/consts" ) type GoServiceHandler struct { - NameSpace string - Name string - AliasName string - Root string - Port string - ServiceEnv map[string]string - DeployEnv consts.Env + NameSpace string + Name string + AliasName string + Root string + Port string + DeployEnv consts.Env + + Reg config.Registry + Kube config.KubeConfig } func (gsh GoServiceHandler) ToDestinationConfig() (string, error) { var err error t := template.New(gsh.Name) + gsh.Reg = config.GetRegistryConfig() servicePipeline := go_handler_template.ServiceTestPipeline + gsh.Kube = config.GetTestKubeConfigByNamespace(gsh.NameSpace) if gsh.DeployEnv == consts.EnvProduction { servicePipeline = go_handler_template.ServiceProductionPipeline + gsh.Kube = config.GetOnlKubeConfigByNamespace(gsh.NameSpace) } t, err = t.Parse(servicePipeline)