\n\n\n momo-cogwork \u00d7 momo-ticket-system\n \u7cfb\u7d71\u6574\u5408\u6587\u4ef6 \u00b7 2026-07-08\n
\n\nSRE Internal \u00b7 Systems Guide
\nmomo-cogwork \u00d7 momo-ticket-system
\u7cfb\u7d71\u6574\u5408\u6587\u4ef6
\n\u6700\u5f8c\u66f4\u65b0\uff1a2026-07-08
\n\n\u672c\u6587\u4ef6\u6574\u5408\u5169\u500b\u7cfb\u7d71\u7684\u64cd\u4f5c\u8aaa\u660e\u8207\u7cfb\u7d71\u6d41\u7a0b\uff1a
\n\n\n
\n
momo-cogwork
\n
SRE \u5167\u90e8\u684c\u9762\u5de5\u5177\uff08Wails v3, Go + Svelte\uff09\uff0c\u6574\u5408\u4e0a\u7dda\u6e05\u55ae\u3001Config Server\u3001GitLab\u3001ITSM(Jira)\u3001Outlook \u641c\u5c0b\u3001eForm \u5f85\u8fa6\u3001\u7c21\u5831\u7522\u751f\u3001\u6a94\u6848\u641c\u5c0b\u7b49\u5206\u9801\u3002
\n
\n
\n
momo-ticket-system
\n
\u4e0a\u7dda\u55ae\u7ba1\u7406\u5e73\u53f0\uff08ticket.fmt.com.tw\uff09\uff0c\u53d6\u4ee3 Excel \u4e0a\u7dda\u6e05\u55ae\u6d41\u7a0b\uff1b\u540c\u6642\u662f momo-cogwork\u300c\u4e0a\u7dda\u6e05\u55ae\u300d\u300cConfig Server\u300d\u5169\u500b\u5206\u9801\u7684\u8cc7\u6599\u4f86\u6e90\u8207\u5beb\u5165\u5c0d\u8c61\u3002
\n
\n
\n\nmomo-cogwork \u662f\u7528\u6236\u7aef\uff08\u8d70 /api/ext/* API Key \u4ecb\u9762\uff09\uff0cmomo-ticket-system \u7684\u7db2\u9801\u524d\u53f0\u5247\u4f9b\u771f\u4eba\u767b\u5165\u64cd\u4f5c\uff08\u8d70 /api/* JWT \u4ecb\u9762\uff09\u2014\u2014\u540c\u4e00\u4efd\u8cc7\u6599\u3001\u5169\u689d\u5b8c\u5168\u9694\u96e2\u7684\u5165\u53e3\u3002
\n\n\n
\u76ee\u9304 / CONTENTS
\n
\n
\n\n\n1\u7cfb\u7d71\u5730\u8c8c
\n\n\n \n\n
\n
\n \u4f7f\u7528\u8005 / SRE\n
\n
\n\n
\n\n
\n
\n
\n
\u684c\u9762\u64cd\u4f5c\n
\n
\n
momo-cogwork
\n
\u684c\u9762 App \u00b7 Wails v3 \u00b7 Go + Svelte
\n
\n \u4e0a\u7dda\u6e05\u55ae\n Config Server\n GitLab\n ITSM(Jira)\n Outlook\n eForm\n \u7c21\u5831\n \u6a94\u6848\u641c\u5c0b\n \u66f4\u65b0\u63d0\u793a\n
\n
\n
\n\n
\n
X-API-Key\n
\n
/api/ext/*\n
\n\n
\n
\n
\n
\u700f\u89bd\u5668 + Zitadel SSO\n
\n
\n
momo-ticket-system
\n
ticket.fmt.com.tw \u00b7 Go + Vue \u00b7 GKE
\n
\n
/api/* \u2014 JWT\uff08\u7db2\u9801\u767b\u5165\u4f7f\u7528\u8005\uff09
\n
/api/ext/* \u2014 X-API-Key\uff08cogwork \u7528\u9019\u7d44\uff09
\n
\u26c1 AlloyDB / PostgreSQL
\n
\n
\n
\n
\n\n
\n
\n
\n
\n
\n
Jenkins
\n
Basic Auth / trigger
\n
\n
\n
\n
\n
\n
\n
RCM Config
\n
X-Api-Key \u00b7 KrakenD
\n
\n
\n
\n
\n
\n
\n
GitLab
\n
TOKEN / server merge
\n
\n
\n
\n
\n
\n
\n
Jira / Atlassian
\n
Cloud OAuth
\n
\n
\n
\n
\n
\n
\n
Outlook
\n
\u672c\u6a5f MAPI/COM
\n
\n
\n
\n
\n
\n
\n
\u672c\u6a5f\u6a94\u6848
\n
\u6a94\u6848\u7cfb\u7d71 API
\n
\n
\n
\n
\n
\n
\n
Zitadel IdP
\n
OIDC \u00b7 SSO
\n
\n
\n
\n\n
\n momo-cogwork \u76f4\u9023\n momo-ticket-system \u9023\u7dda\n \u5169\u8005\u7686\u9023\n
\n
\n \u5716 1 \u2014 \u5168\u7cfb\u7d71\u5730\u8c8c\uff1a\u684c\u9762\u5de5\u5177\u3001\u7968\u52d9\u5e73\u53f0\u8207\u5916\u90e8\u7cfb\u7d71\u7684\u9023\u7dda\u95dc\u4fc2\n\n\n\n \u95dc\u9375\u539f\u5247\uff1amomo-cogwork \u53ea\u900f\u904e momo-ticket-system \u8b80\u300c\u8a72\u6253\u54ea\u4e9b Jenkins job\u300d\u300c\u54ea\u4e9b config \u8981\u7570\u52d5\u300d\u9019\u985e\u4e2d\u7e7c\u8cc7\u6599\uff1b\u771f\u6b63\u57f7\u884c\u90e8\u7f72\uff08\u6253 Jenkins\uff09\u8ddf\u771f\u6b63\u5beb\u5165\u8a2d\u5b9a\u503c\uff08\u6253 RCM\uff09\u90fd\u662f cogwork \u76f4\u63a5\u5c0d\u76ee\u6a19\u7cfb\u7d71\u4e0b\u624b\uff0c\u4e0d\u7d93\u904e momo-ticket-system \u8f49\u767c\u2014\u2014momo-ticket-system \u53ea\u8ca0\u8cac\u4e8b\u5f8c\u8a18\u9304\u300c\u9019\u7b46\u5df2\u7d93\u8655\u7406\u4e86\u300d\u3002\n
\n\n\n2momo-cogwork\uff08\u684c\u9762\u5de5\u5177\uff09
\n\n2.1 \u5206\u9801\u7e3d\u89bd
\n\n \n \u5206\u9801\n \u7528\u9014\n \u8cc7\u6599\u4f86\u6e90 / \u5beb\u5165\u5c0d\u8c61\n \u552f\u8b80\u6216\u53ef\u5beb\n \n \n \u4e0a\u7dda\u6e05\u55ae\u67e5\u8a62\u7576\u5929/\u6307\u5b9a\u65e5\u671f\u7684\u4e0a\u7dda\u55ae\u3001\u5c55\u958b\u7d30\u9805\u3001\u56de\u586b\u4e0a\u7dda\u72c0\u614b\u3001\u9ede\u7cfb\u7d71\u9032\u53bb\u57f7\u884c Jenkinsmomo-ticket-system ext API\u8b80 + \u5beb\uff08\u56de\u586b\u3001\u89f8\u767c\u90e8\u7f72\uff09\n Config Server\u67e5\u8a62 momo-ticket-system \u4e0a\u5f85\u5957\u7528\u7684 RCM \u8a2d\u5b9a\u7570\u52d5\uff0c\u5957\u7528\u5230\u771f\u6b63\u7684 RCM Config Servermomo-ticket-system ext API + RCM API\u8b80 + \u5beb\n GitLabMR \u5217\u8868\u3001\u5efa\u7acb/\u5408\u4f75/\u95dc\u9589 MR\u3001\u8b70\u984c\u770b\u677f\u3001Epic\u3001\u6210\u54e1/\u8fed\u4ee3GitLab REST API\uff08\u53ef\u8a2d\u5b9a\u591a\u500b instance\uff09\u8b80 + \u5beb\n ITSM\u67e5 Jira \u8b70\u984c\u3001\u52fe\u9078\u5f8c\u4e00\u9375\u5efa\u7acb\u5c0d\u61c9 GitLab \u8b70\u984cAtlassian Cloud API + GitLab API\u8b80 + \u5beb\uff08\u50c5\u65b0\u589e GitLab \u8b70\u984c\uff09\n Outlook\u641c\u5c0b\u672c\u6a5f Outlook \u4fe1\u4ef6\uff08\u552f\u8b80\uff09\u672c\u6a5f Outlook\uff08Windows COM / MAPI\uff09\u552f\u8b80\n eForm \u5f85\u8fa6momo \u5167\u90e8\u5165\u53e3\u7684\u5f85\u8fa6\u5de5\u55ae\uff0c\u53ef\u6279\u6b21\u81ea\u52d5\u6838\u51c6momo \u5167\u90e8 eForm \u7cfb\u7d71\u8b80 + \u5beb\uff08\u6838\u51c6\u52d5\u4f5c\uff09\n \u7c21\u5831 (slidesmith)\u5f9e GitLab \u770b\u677f\u7522\u751f\u9031\u5831\u7c21\u5831/\u770b\u677f\u5716GitLab REST API\u552f\u8b80\uff08\u8f38\u51fa\u6a94\u6848\u5230\u672c\u6a5f\uff09\n \u6a94\u6848\u641c\u5c0b\u672c\u6a5f\u8cc7\u6599\u593e\u641c\u5c0b + \u6279\u6b21\u79fb\u52d5/\u8907\u88fd\u672c\u6a5f\u6a94\u6848\u7cfb\u7d71\u8b80 + \u5beb\uff08\u50c5\u79fb\u52d5/\u8907\u88fd\uff0c\u4e0d\u8986\u84cb\u540c\u540d\uff09\n \u8a2d\u5b9a\u7de8\u8f2f config.yaml\u3001\u6df1\u8272/\u4eae\u8272\u4e3b\u984c\u5207\u63db\u3001\u7248\u672c/\u66f4\u65b0\u6aa2\u67e5\uff08\u300c\u95dc\u65bc\u300d\u5b50\u5206\u9801\uff09\u672c\u6a5f\u8a2d\u5b9a\u6a94 + GitLab Releases API\u8b80 + \u5beb\n \n\n\n2.2 \u4e0a\u7dda\u6e05\u55ae \u2192 Jenkins \u57f7\u884c
\n\n \n \u5716 2 \u2014 \u4e0a\u7dda\u6e05\u55ae\u5206\u9801:\u5f9e\u67e5\u55ae\u5230\u5faa\u5e8f\u57f7\u884c Jenkins job\n\n\n2.3 \u4e0a\u7dda\u56de\u586b(\u91cb\u51fa\u72c0\u614b / \u6025\u4e0a / \u9000\u7248)
\n\n \n \u5716 3 \u2014 \u4e0a\u7dda\u56de\u586b\u8868\u55ae\u7684\u9a57\u8b49\u8207\u9001\u51fa\u6d41\u7a0b\n\n\n PUT /api/ext/releases/{id}/feedback\uff08scope releases:write-feedback\uff09\u8ddf UI \u7248\uff08JWT\uff09\u7684 updateFeedback \u8d70\u540c\u4e00\u5957 repository \u908f\u8f2f\uff0c\u662f\u70ba cogwork \u88dc\u4e0a\u7684\u7aef\u9ede\u2014\u2014\u539f\u672c ext API \u53ea\u6709 PUT .../status\uff08\u53ea\u80fd\u5beb status/result\uff0c\u4e0d\u542b\u6025\u4e0a/\u9000\u7248\uff09\u3002\n
\n\n2.4 Config Server \u5957\u7528
\n\n \n \u5716 4 \u2014 Config Server \u7570\u52d5\u5957\u7528:\u5148\u5beb RCM\u3001\u5f8c\u6a19\u8a18\u5b8c\u6210\n\n\n\u5b89\u5168\u8a2d\u8a08\u91cd\u9ede\uff1a
\n\n - RCM \u5148\u5beb\u3001momo-ticket-system \u5f8c\u6a19\u8a18\u2014\u2014RCM \u624d\u662f\u771f\u6b63\u7684\u7cfb\u7d71\u7d00\u9304\u4f86\u6e90\uff1b\u82e5\u5f8c\u6a19\u8a18\u5931\u6557\uff0c\u8b8a\u66f4\u672c\u8eab\u5df2\u7d93\u751f\u6548\uff0c\u53ea\u662f momo-ticket-system \u9019\u908a\u770b\u8d77\u4f86\u9084\u662f\u5f85\u8655\u7406\uff0c\u53ef\u4ee5\u5b89\u5168\u91cd\u8a66\u3002
\n - \u7a7a\u503c\u9632\u5446\u2014\u2014
value \u662f\u7a7a\u5b57\u4e32\u6642\u76f4\u63a5\u62d2\u7d55\u5957\u7528\uff0c\u907f\u514d\u628a RCM \u6b63\u5f0f\u74b0\u5883\u7684\u503c\u6d17\u6210\u7a7a\u767d\u3002 \n - \u591a\u74b0\u5883\u5408\u4f75\u5957\u7528\u2014\u2014
environment \u6b04\u4f4d\u53ef\u80fd\u662f \"TC+TP\"\u3001\"TC+TP+GCP\"\uff1bcogwork \u6703\u5148\u628a\u6bcf\u500b\u74b0\u5883\u7684\u6191\u8b49\u90fd\u89e3\u6790\u6210\u529f\u624d\u958b\u59cb\u5beb\u5165\uff0c\u4efb\u4f55\u4e00\u500b\u74b0\u5883\u5931\u6557\u5c31\u505c\u4e0b\u4e26\u6e05\u695a\u56de\u5831\u9032\u5ea6\uff0c\u4e0d\u6703\u534a\u5957\u7528\u5c31\u6a19\u8a18\u5b8c\u6210\u3002 \n
\n\n\n \u26a0 \u5df2\u77e5\u9650\u5236\uff1aRCM \u7db2\u9801\u4e0a\u7684\u300cDeploy\u300d\u958b\u95dc\uff08API \u56de\u61c9\u88e1\u7684 enable \u6b04\u4f4d\uff09\u7121\u6cd5\u900f\u904e API Key \u5beb\u5165 API \u63a7\u5236\u2014\u2014\u5be6\u6e2c\u5beb\u5165\u6642\u5e36 enable:true \u6703\u88ab RCM \u76f4\u63a5\u5ffd\u7565\u3002\u76ee\u524d\u900f\u904e API \u5beb\u5165\u7684\u503c\u4e00\u5f8b\u662f\u300c\u672a\u555f\u7528\u300d\u72c0\u614b\uff0c\u9700\u8981\u6709\u4eba\u5230 RCM \u7db2\u9801\u624b\u52d5\u6253\u958b\u8a72 key \u7684 Deploy \u958b\u95dc\u624d\u6703\u5be6\u969b\u751f\u6548\u3002\u5df2\u63d0\u554f\u984c\u55ae\u7d66 RCM \u7dad\u8b77\u4eba\u54e1\u78ba\u8a8d\uff08\u898b rcm-enable-deploy-toggle.md\uff09\u3002\n
\n\n2.5 \u7248\u672c\u66f4\u65b0\u63d0\u793a
\nApp \u958b\u6a5f\u6642\u6253 GitLab\uff08momo-cooperation/team/sre/momo-cogwork \u7684 Releases API\uff0c\u6cbf\u7528 GitLab \u5206\u9801\u5df2\u8a2d\u5b9a\u7684 token\uff09\uff0c\u8ddf\u5167\u5d4c\u7248\u865f\uff08internal/buildinfo.Version\uff09\u6bd4\u8f03\uff1a
\n\n - \u6709\u66f4\u65b0 \u2192 \u72c0\u614b\u5217\u986f\u793a\u53ef\u95dc\u9589\u7684\u63d0\u793a\u689d + \u8a2d\u5b9a\u300c\u95dc\u65bc\u300d\u5206\u9801\u986f\u793a\u8a73\u60c5\uff0c\u9ede\u63d0\u793a\u689d\u958b\u700f\u89bd\u5668\u5230 Release \u4e0b\u8f09\u9801\u3002
\n - \u5df2\u662f\u6700\u65b0 / \u67e5\u8a62\u5931\u6557\uff08\u672a\u8a2d\u5b9a\u3001\u6c92\u7db2\u8def\u3001\u9084\u6c92\u767c\u904e Release\uff09\u2192 \u5b8c\u5168\u975c\u9ed8\uff0c\u4e0d\u986f\u793a\u3001\u4e0d\u5831\u932f\u3002
\n
\n\u767c\u5e03\u65b0\u7248\u672c\u6b65\u9a5f\uff08\u898b momo-cogwork \u5c08\u6848 CLAUDE.md\u300cDistribution & \u767c\u5e03\u65b0\u7248\u672c\u300d\uff09\uff1a\u6539\u7248\u865f \u2192 pixi run build \u2192 git tag vX.Y.Z && git push origin vX.Y.Z \u2192 \u5230 GitLab \u5efa\u7acb Release \u4e26\u9644\u4e0a exe\u3002
\n\n2.6 \u8a2d\u5b9a\u6a94(config.yaml)\u6db5\u84cb\u7bc4\u570d
\n\u4e00\u500b\u6a94\u6848\u8a2d\u5b9a\u6240\u6709\u5206\u9801\u9700\u8981\u7684\u6191\u8b49/\u7aef\u9ede\uff0c\u6bcf\u500b\u5340\u584a\u7368\u7acb\u3001\u4e92\u4e0d\u5f71\u97ff\uff1a
\n\n \n \u5340\u584a\n \u7d66\u54ea\u500b\u5206\u9801\u7528\n \u8a8d\u8b49\u65b9\u5f0f\n \n \n token(-file) / gitlabs:GitLab \u5206\u9801\u3001ITSM \u63a8\u9001 GitLab\u3001\u7c21\u5831\u3001\u7248\u672c\u66f4\u65b0\u63d0\u793aGitLab PRIVATE-TOKEN\n board-url / epic-board-url\u7c21\u5831\uff08\u6cbf\u7528 GitLab token\uff09\n release-api / release-api-key(-file)\u4e0a\u7dda\u6e05\u55aeX-API-Key\uff08momo-ticket-system\uff09\n jenkins.instances\u4e0a\u7dda\u6e05\u55ae \u2192 Jenkins \u57f7\u884cBasic Auth\uff08username + API token\uff0c\u4f9d job URL host \u6bd4\u5c0d\uff09\n config-server.environmentsConfig ServerX-Api-Key\uff08TP/TC/GCP \u5404\u74b0\u5883\u7368\u7acb key\uff09\n Atlassian OAuth \u76f8\u95dcITSM(Jira)Atlassian Cloud OAuth\n title / date / template\u7c21\u5831\u5c01\u9762\u2014\n proxy / use-proxy-for-*\u4f9d\u5404\u5206\u9801\u9700\u8981\u2014\n \n\n\u5b8c\u6574\u7bc4\u672c\u898b apps/momo-cogwork/config.yaml.example\uff08\u6bcf\u500b\u5340\u584a\u90fd\u6709\u8a73\u7d30\u8a3b\u89e3\u8ddf\u7bc4\u4f8b\uff09\u3002
\n\n\n3momo-ticket-system\uff08\u7db2\u9801\u524d\u53f0\uff09
\n\u672c\u7bc0\u8aaa\u660e\u7db2\u9801\u524d\u53f0\uff08\u771f\u4eba\u767b\u5165\u4f7f\u7528\u7684 /api/* JWT \u4ecb\u9762\uff09\u7684\u7cfb\u7d71\u6d41\u7a0b\u8207\u64cd\u4f5c\u65b9\u5f0f\u3002
\n\n3.1 \u7cfb\u7d71\u6982\u89bd
\n\n \n \u74b0\u5883\n \u7db2\u5740\n Namespace\uff08GKE\uff09\n \u8cc7\u6599\u5eab\n \n \n Developdev-ticket.fmt.com.twmomo-ticket-developAlloyDB\uff08develop\uff09\n Productionticket.fmt.com.twmomo-ticket-productionAlloyDB\uff08production\uff09\n \n\n\n \n \u5c64\u6b21\n \u6280\u8853\n \n \n FrontendVue 3 + TypeScript + Vite + Pinia + Vue Router\n BackendGo\uff08chi router + pgx/v5\uff09\n \u767b\u5165Zitadel OIDC SSO\uff08\u4e3b\u8981\uff09\uff0f\u672c\u6a5f\u7ba1\u7406\u8005\u5e33\u5bc6\uff08fallback\uff0cGKE \u74b0\u5883\u7121\u6cd5\u9023\u5167\u7db2 AD \u6642\u4f7f\u7528\uff09\n \u90e8\u7f72GKE\uff0cGateway API\uff0ckubectl apply -k overlays/{develop,production}-gke\n \n\n\n3.2 \u89d2\u8272\u8207\u6b0a\u9650
\n\n \n \u89d2\u8272\n \u53ef\u505a\u7684\u4e8b\n \n \n General_User\u586b\u5beb/\u9001\u51fa\u4e0a\u7dda\u55ae\uff08\u622a\u6b62\u6642\u9593\u5f8c\u9700 Deploy_User/Admin \u624d\u80fd\u88dc\u55ae\uff09\u3001\u7de8\u8f2f\u81ea\u5df1\u5efa\u7acb\u4e14\u5c1a\u672a\u5408\u4f75\u6210\u529f\u7684\u4e0a\u7dda\u55ae\u8207\u5176\u660e\u7d30\uff08\u542b\u300c\u9806\u5e8f\u300d\u6b04\u4f4d\uff09\u3001\u67e5\u8a62\u4e0a\u7dda\u7d00\u9304\u3001\u65b0\u589e/\u7de8\u8f2f/\u522a\u9664 Config Server \u7570\u52d5\n Deploy_UserGeneral_User \u5168\u90e8\u6b0a\u9650 + \u6e2c\u8a66\u5408\u4f75/\u6b63\u5f0f\u5408\u4f75\u3001\u89f8\u767c\u90e8\u7f72\uff08Jenkins\uff09\u3001\u4e0a\u7dda\u56de\u586b\u9762\u677f\uff08\u50c5\u524d\u7aef\u9650\u5236\u986f\u793a\uff0c\u5f8c\u7aef\u672a\u5f37\u5236\uff09\n Admin\u4ee5\u4e0a\u5168\u90e8 + \u5b8c\u6574 /admin \u5f8c\u53f0\uff08\u7cfb\u7d71\u8207 Jenkins jobs\u3001\u4f7f\u7528\u8005\u8207\u89d2\u8272\u3001AD \u767b\u5165\u7fa4\u7d44\u8207 cutoff\u3001Git/Jenkins \u6191\u8b49\u3001API \u91d1\u9470\u3001\u90e8\u7f72\u7a97\u53e3\uff09\uff0c\u4e14\u4e0d\u8ad6\u5efa\u7acb\u8005\u6216\u5408\u4f75\u72c0\u614b\u7686\u53ef\u7de8\u8f2f/\u6aa2\u8996\u4efb\u4f55\u4e0a\u7dda\u55ae\n \n\n\n \u6ce8\u610f\uff1a/releases\u3001\u4e0a\u7dda\u56de\u586b\u3001Config Server\u3001\u90e8\u7f72\u7a97\u53e3\u3001\u90e8\u7f72\u4f9d\u8cf4\u7b49 API \u5f8c\u7aef\u6c92\u6709\u639b\u89d2\u8272\u6aa2\u67e5\u4e2d\u4ecb\u5c64\u2014\u2014\u9019\u4e9b\u64cd\u4f5c\u5728\u9801\u9762\u4e0a\u53ea\u662f\u9760\u524d\u7aef v-if=\"auth.canDeploy\" \u96b1\u85cf\u6309\u9215\uff0cGeneral_User \u82e5\u76f4\u63a5\u547c\u53eb API \u4ecd\u53ef\u57f7\u884c\u3002\u552f\u4e00\u5728\u5f8c\u7aef\u5f37\u5236\u7684\u89d2\u8272\u9650\u5236\u662f\uff1aRequireAdminRole\uff08\u6574\u500b /admin/*\uff09\u8207 RequireDeployRole\uff08\u89f8\u767c\u90e8\u7f72\u7aef\u9ede\u3001\u5408\u4f75\u7aef\u9ede\uff09\u3002\n
\n\n3.3 \u767b\u5165\u6d41\u7a0b
\n\n \n \u5716 5 \u2014 Zitadel OIDC SSO \u767b\u5165\u6d41\u7a0b\n\n\n - \u672c\u6a5f\u7ba1\u7406\u8005\u5e33\u5bc6\u767b\u5165\uff1a\u767b\u5165\u9801\u9810\u8a2d\u96b1\u85cf\uff0c\u9ede\u9023\u7d50\u300c\u7ba1\u7406\u8005\u5e33\u5bc6\u767b\u5165\u300d\u5c55\u958b\u5e33\u865f/\u5bc6\u78bc\u8868\u55ae\u3002\u6b64\u8def\u5f91\u50c5\u7528\u65bc GKE \u74b0\u5883\u9023\u4e0d\u5230\u5167\u7db2 AD \u6642\u7684 fallback\uff08\u900f\u904e
LOCAL_ADMIN_USER/LOCAL_ADMIN_PASSWORD \u8a2d\u5b9a\uff09\uff0c\u767b\u5165\u6210\u529f\u81ea\u52d5\u8ce6\u4e88 Admin \u89d2\u8272\u3002\u9664\u6b64\u5e33\u865f\u5916\uff0c\u5176\u4ed6\u4efb\u4f55\u5e33\u5bc6\u767b\u5165\u5617\u8a66\u4e00\u5f8b\u88ab\u62d2\u7d55\uff08401 USE_SSO\uff0c\u8a0a\u606f\u300c\u8acb\u4f7f\u7528 SSO \u767b\u5165\u300d\uff09\u3002 \n - SSO \u5931\u6557\u6703\u5c0e\u56de\u767b\u5165\u9801\u4e26\u986f\u793a\u300cSSO \u767b\u5165\u5931\u6557\uff0c\u8acb\u91cd\u8a66\u6216\u806f\u7d61\u7ba1\u7406\u54e1\u3002\u300d
\n
\n\n3.4 \u9801\u9762\u5730\u5716
\n\n \n \u8def\u5f91\n \u9801\u9762\n \u9700\u767b\u5165\n \u8aaa\u660e\n \n \n /login\u767b\u5165\u9801\u5426\u5df2\u767b\u5165\u6703\u81ea\u52d5\u5c0e\u5411 /\n /\u586b\u5beb\u4e0a\u7dda\u55ae\uff08ReleaseFormView\uff09\u662f\u9996\u9801\n /releases\u4e0a\u7dda\u7d00\u9304\u67e5\u8a62\uff08ReleaseQueryView\uff09\u662f\u67e5\u8a62\u3001\u56de\u586b\u3001\u5408\u4f75\u3001\u89f8\u767c\u90e8\u7f72\n /config-serverConfig Server \u63d0\u4ea4\uff08ConfigServerFormView\uff09\u662f\u2014\n /config-server/queryConfig Server \u67e5\u8a62\uff08ConfigServerQueryView\uff09\u662f\u2014\n /admin\u7ba1\u7406\u5f8c\u53f0\uff08AdminView\uff09\u662f5 \u500b\u5206\u9801\uff1b\u5be6\u969b\u5b58\u53d6\u9760 API \u7aef 403 \u64cb\uff0c\u9801\u9762\u672c\u8eab\u7121\u89d2\u8272\u5b88\u885b\n \n\n\n3.5 \u586b\u5beb\u4e0a\u7dda\u55ae(/)
\n\n \n \u5716 6 \u2014 \u586b\u5beb\u4e0a\u7dda\u55ae:\u624b\u52d5\u586b\u5beb\u6216 Excel \u6279\u6b21\u532f\u5165\n\n\n\u4e3b\u8868\u55ae\u6b04\u4f4d
\n\n \n \u6b04\u4f4d\n \u5fc5\u586b\n \u8aaa\u660e\n \n \n \u9700\u6c42\u55ae\u865f\u2713\u5982 IT057-2026060100123\n \u4e0a\u7dda\u7cfb\u7d71\u2713\u591a\u9078\uff0c\u9078\u5230 QA \u4e0a\u7dda\u7cfb\u7d71\u6703\u63d0\u793a\n \u4e0a\u7dda\u4eba\u54e1\u2713AD \u540d\u9304\u9078\u4eba\n \u5de5\u7a0b\u5e2b\u2713AD \u540d\u9304\u9078\u4eba\n \u958b\u55ae\u4eba\u54e1\u2713AD \u540d\u9304\u9078\u4eba\uff0c\u9810\u8a2d\u70ba\u76ee\u524d\u767b\u5165\u8005\n \u6e2c\u8a66\u4eba\u54e1\u9078\u586bAD \u540d\u9304\u9078\u4eba\n \u9810\u8a08\u4e0a\u7dda\u6642\u9593\u2713\u65e5\u671f + \u6642/\u5206\uff08\u5206\u9418\u50c5\u53ef\u9078 00/15/30/45\uff09\n \u4e0a\u7dda\u9806\u5e8f\u689d\u4ef6\u5fc5\u586b\u9078 2 \u500b\u4ee5\u4e0a\u7cfb\u7d71\u6642\u624d\u5f37\u5236\u5fc5\u586b\n \u958b\u901a\u6b63\u5f0f DB\u662f/\u5426\n \u958b\u901a\u6b63\u5f0f\u74b0\u5883\u9632\u706b\u7246\u662f/\u5426\n \u4e0a\u7dda\u985e\u578b\u4e00\u822c\u4e0a\u7dda / \u6025\u4e0a\n \u6025\u4e0a\u539f\u56e0\u689d\u4ef6\u5fc5\u586b\u4e0a\u7dda\u985e\u578b = \u6025\u4e0a\u6642\u5fc5\u586b\n \u8aaa\u660e/QC \u4fe1\u4ef6\u4e3b\u65e8\u2713\u2014\n \n\n\n\u660e\u7d30(\u4f9d\u6240\u9078\u7cfb\u7d71\u81ea\u52d5\u7522\u751f)
\n\n \n \u6b04\u4f4d\n \u5fc5\u586b\n \u8aaa\u660e\n \n \n \u7cfb\u7d71\u5225\u552f\u8b80\u81ea\u52d5\u5e36\u5165\n branch\u2713\u2014\n \u958b\u767c\u5de5\u7a0b\u5e2b\u2713\u9810\u8a2d\u5e36\u5165\u300c\u5de5\u7a0b\u5e2b\u300d\u6b04\u4f4d\u503c\n \u7a0b\u5f0f\u652f\u6578/\u7e3d\u652f\u6578\u9078\u586b\u81ea\u7531\u6587\u5b57\n config&\u6392\u7a0b&\u975c\u614b\u6a94\u8def\u5f91\u9078\u586b\u2014\n \n\n\n\u9001\u55ae\u5931\u6557\u5e38\u898b\u932f\u8aa4
\n\n \n \u932f\u8aa4\u78bc\n \u986f\u793a\u8a0a\u606f\n \n \n CUTOFF_TIME_EXCEEDED\u5df2\u8d85\u904e\u586b\u55ae\u622a\u6b62\u6642\u9593\u3002\u82e5\u9700\u88dc\u55ae\uff0c\u8acb\u78ba\u8a8d\u76ee\u524d\u5e33\u865f\u662f\u5426\u70ba Admin \u6216 Deploy_User\u3002\n FORM_VALIDATION_FAILED / INVALID_REQUEST\u4f9d\u6b04\u4f4d\u986f\u793a\u5c0d\u61c9\u932f\u8aa4\n SYSTEM_NOT_FOUND\u9078\u64c7\u7684\u7cfb\u7d71\u4e0d\u5b58\u5728\n IMPORT_VALIDATION_FAILED / INVALID_IMPORT_DATA / FILE_REQUIREDExcel \u532f\u5165\u76f8\u95dc\n \n\n\n3.6 \u67e5\u8a62\u8207\u56de\u586b(/releases)
\n\u641c\u5c0b\u689d\u4ef6\uff1a\u65e5\u671f / \u9700\u6c42\u55ae\u865f / \u4e0a\u7dda\u4eba\u54e1 \u2192 \u6309\u300c\u67e5\u8a62\u300d\u8f09\u5165\u5217\u8868\uff0c\u9ede\u5217\u5c55\u958b\u8a73\u60c5\u9762\u677f\u3002
\n\n \n \u5716 7 \u2014 \u67e5\u8a62\u9801\u8a73\u60c5\u9762\u677f\u7684\u64cd\u4f5c\u5206\u652f\n\n\n\u4e0a\u7dda\u56de\u586b(PUT /releases/{id}/feedback)
\n\n \n \u6b04\u4f4d\n \u8aaa\u660e\n \n \n \u4e0a\u7dda\u662f\u5426\u5b8c\u6210\u4e0b\u62c9\uff1a\u672a\u4e0a\u7dda / \u5df2\u4e0a\u7dda / \u53d6\u6d88 / \u5931\u6557 / \u90e8\u7f72\u4e2d / \u90e8\u7f72\u6210\u529f / \u90e8\u7f72\u5931\u6557\n \u662f\u5426\u70ba\u6025\u4e0a\u52fe\u9078\u5f8c\u5fc5\u586b\u300c\u6025\u4e0a\u539f\u56e0\u300d\n \u662f\u5426\u6709\u9000\u7248\u52fe\u9078\u5f8c\u5fc5\u586b\u300c\u9000\u7248\u539f\u56e0\u300d\n \n\n\n \u6025\u4e0a/\u9000\u7248\u5728\u5efa\u55ae\u6642\uff08\u4e0a\u7dda\u985e\u578b\uff09\u8207\u56de\u586b\u6642\u5404\u81ea\u7368\u7acb\u4e00\u4efd\uff0c\u4ee3\u8868\u4e0a\u7dda\u5f8c\u53ef\u900f\u904e\u56de\u586b\u91cd\u65b0\u8072\u660e/\u66f4\u6b63\u3002momo-cogwork \u7684\u4e0a\u7dda\u56de\u586b\u529f\u80fd\uff08\u00a72.3\uff09\u5beb\u5165\u7684\u662f\u540c\u4e00\u4efd\u8cc7\u6599\uff0c\u8d70 ext API\u3002\n
\n\n\u660e\u7d30\u8868\u683c(\u53ef\u5c31\u5730\u7de8\u8f2f)
\n\u6b04\u4f4d\uff1a\u9806\u5e8f / \u7cfb\u7d71 / branch / \u958b\u767c\u5de5\u7a0b\u5e2b / \u7a0b\u5f0f\u652f\u6578 / \u8a2d\u5b9a\u8def\u5f91 / \u5099\u8a3b + \u7de8\u8f2f\u6309\u9215\u3002
\n\n - \u53ef\u7de8\u8f2f\u6b04\u4f4d\uff1abranch\u3001\u958b\u767c\u5de5\u7a0b\u5e2b\u3001\u7a0b\u5f0f\u652f\u6578\u3001\u8a2d\u5b9a\u8def\u5f91\u3001\u5099\u8a3b\u3001\u9806\u5e8f\uff08sortOrder\uff0c\u6578\u5b57\uff09\u2014\u20142026-07-08 \u65b0\u589e\u529f\u80fd\uff0c\u586b\u55ae\u4eba\u81ea\u5df1\u5c31\u80fd\u8abf\u6574\u660e\u7d30\u986f\u793a\u9806\u5e8f\u3002
\n - \u7de8\u8f2f\u6b0a\u9650\uff1aAdmin \u6c38\u9060\u53ef\u7de8\u8f2f\uff1b\u5176\u4ed6\u4f7f\u7528\u8005\u50c5\u80fd\u7de8\u8f2f\u81ea\u5df1\u5efa\u7acb\u4e14\u5c1a\u672a\u6709\u5408\u4f75\u6210\u529f\u7684\u4e0a\u7dda\u55ae\u3002
\n
\n\n\u5176\u4ed6\u5340\u584a
\n\n \n \u5340\u584a\n \u8aaa\u660e\n \n \n \u6e2c\u8a66\u5408\u4f75 / \u6b63\u5f0f\u5408\u4f75POST /releases/{id}/test-merge\u3001POST /releases/{id}/merge\uff08\u6b63\u5f0f\u5408\u4f75\u9700\u4e8c\u6b21\u78ba\u8a8d\uff09\u3002\u7f3a Git \u8a2d\u5b9a\u6642\u56de GIT_CONFIG_REQUIRED\n \u89f8\u767c\u90e8\u7f72\u50c5\u8a72\u4e0a\u7dda\u55ae\u6240\u5c6c\u7cfb\u7d71\u6709\u8a2d\u5b9a Jenkins job \u6642\u986f\u793a\uff1bPOST /releases/{id}/trigger-deploy\uff0c\u90e8\u7f72\u7d50\u679c\u7531 Jenkins pipeline \u900f\u904e API Key \u975e\u540c\u6b65\u56de\u547c\u66f4\u65b0\u72c0\u614b\n \u90e8\u7f72\u7a97\u53e3\u4e0b\u62c9\u9078\u64c7\u65e2\u6709\u7a97\u53e3 \u2192 \u5957\u7528\uff08PUT /releases/{id}/window\uff09\n \u90e8\u7f72\u4f9d\u8cf4\u641c\u5c0b\u55ae\u865f \u2192 \u65b0\u589e/\u79fb\u9664\u4f9d\u8cf4\uff08\u672c\u55ae\u9700\u7b49\u4f9d\u8cf4\u55ae\u5b8c\u6210\u624d\u80fd\u90e8\u7f72\uff09\n \u72c0\u614b\u6b77\u7a0b\u6bcf\u6b21\u72c0\u614b\u8b8a\u66f4\u7686\u8a18\u9304\uff0c\u4ee5\u6642\u9593\u8ef8\u5448\u73fe\n \u5408\u4f75\u7d50\u679c\u9010 branch \u986f\u793a\u72c0\u614b/commit/\u885d\u7a81\u5167\u5bb9\n \n\n\u672c\u9801\u6c92\u6709\u532f\u51fa\u529f\u80fd\uff08Excel \u7bc4\u672c\u4e0b\u8f09\u53ea\u5728\u586b\u55ae\u9801\uff09\u3002
\n\n3.7 Config Server(/config-server\u3001/config-server/query)
\n\u7528\u9014\uff1a\u7368\u7acb\u65bc\u4e0a\u7dda\u55ae\u4e4b\u5916\uff08\u4f46\u53ef\u9078\u64c7\u6027\u95dc\u806f\uff09\u7684\u8a2d\u5b9a\u503c\u7570\u52d5\u8ffd\u8e64\u7cfb\u7d71\u3002\u5f8c\u7aef\u50c5\u8981\u6c42\u767b\u5165\uff0c\u6c92\u6709\u89d2\u8272\u9650\u5236\u2014\u2014\u4efb\u4f55\u767b\u5165\u4f7f\u7528\u8005\u7686\u53ef\u65b0\u589e/\u7de8\u8f2f/\u522a\u9664\u3002
\n\n\u63d0\u4ea4\u8868\u55ae\u6b04\u4f4d
\n\n \n \u6b04\u4f4d\n \u5fc5\u586b\n \u8aaa\u660e\n \n \n \u74b0\u5883TP / TC / GCP / TC+TP / TC+TP+GCP\n Project Name\u2713\u2014\n Tag Name\u2713\u2014\n \u5206\u985eRedis / Project / Limit / Switch / Key \u6b0a\u9650 / API Key \u7ba1\u7406 / \u5176\u4ed6\uff08\u9078\u5176\u4ed6\u6642\u300c\u5206\u985e\uff08\u81ea\u8a02\uff09\u300d\u5fc5\u586b\uff09\n Key\u2713\u2014\n \u65b0\u503c (Value)\u4e0a\u9650 2500 \u5b57\n Deploy\u662f/\u5426\uff0c\u9810\u8a2d\u662f\n \u9700\u6c42\u55ae\u865f\u53ef\u641c\u5c0b\u4e26\u95dc\u806f\u65e2\u6709\u4e0a\u7dda\u55ae\n \u8aaa\u660e\u2713\u2014\n \n\n\n\u67e5\u8a62\u9801
\n\u7be9\u9078\uff1a\u74b0\u5883 / \u5206\u985e / \u9700\u6c42\u55ae\u865f \u2192 \u67e5\u8a62\u3002\u8868\u683c\u542b\u300c\u5df2\u66f4\u65b0\u300d\u6b04\u4f4d\uff08badge\uff1a\u662f=\u5df2\u5957\u7528\u3001\u5426=\u5f85\u8655\u7406\uff09\uff1b\u53ef\u5c31\u5730\u7de8\u8f2f\u6240\u6709\u6b04\u4f4d\uff08\u5df2\u66f4\u65b0\u65d7\u6a19\u672c\u8eab\u5728\u6b64\u756b\u9762\u552f\u8b80\uff0c\u5be6\u969b\u5957\u7528\u52d5\u4f5c\u662f\u900f\u904e momo-cogwork \u4ee5 config-server:write API Key \u547c\u53eb\u5b8c\u6210\u2014\u2014\u6d41\u7a0b\u898b \u00a72.4\uff09\u3002
\n\n3.8 Admin \u5f8c\u53f0(/admin\uff0c\u50c5 Admin \u89d2\u8272\u53ef\u7528)
\n\n \n \u5206\u9801\n \u7ba1\u7406\u5167\u5bb9\n \n \n \u7cfb\u7d71\u8a2d\u5b9a\u65b0\u589e/\u7de8\u8f2f\u7cfb\u7d71\uff08\u540d\u7a31\u3001Git URL\u3001target branch\u3001QA \u4e0a\u7dda\u6a19\u8a18\uff09\uff1b\u6bcf\u500b\u7cfb\u7d71\u4e0b\u5de2\u72c0\u7ba1\u7406 Jenkins Jobs\uff08Job \u540d\u7a31/\u74b0\u5883/URL/\u5099\u8a3b/\u57f7\u884c\u9806\u5e8f\u3001\u52d5\u614b\u6216\u56fa\u5b9a\u53c3\u6578\uff09\n \u4f7f\u7528\u8005\u7ba1\u7406\u641c\u5c0b AD \u540d\u9304\u65b0\u589e\u4f7f\u7528\u8005\u4e26\u6307\u5b9a\u89d2\u8272\uff1b\u65e2\u6709\u4f7f\u7528\u8005\u53ef\u6539\u89d2\u8272/\u79fb\u9664\uff08\u4e0d\u53ef\u79fb\u9664\u81ea\u5df1\uff09\n \u5b58\u53d6\u63a7\u5236AD \u7fa4\u7d44 DN \u767d\u540d\u55ae\uff08SSO \u767b\u5165\u7528\uff09\uff1b\u622a\u6b62\u6642\u9593\u8a2d\u5b9a\uff08daysBeforeRelease\u3001cutoffTime\u3001timezone\uff09\uff0c\u9a45\u52d5\u9001\u55ae\u6642\u7684 CUTOFF_TIME_EXCEEDED \u6aa2\u67e5\n \u6191\u8b49\u8a2d\u5b9aGit Token\uff08GitLab group token\uff09\u3001Jenkins \u5e33\u5bc6\u6191\u8b49\u3001\u5916\u90e8\u7cfb\u7d71 API \u91d1\u9470\uff08\u53ef\u52fe\u9078 scope\uff1areleases:read\u3001releases:write-status\u3001releases:write-feedback\u3001jenkins-jobs:read\u3001systems:read\u3001systems:write\u3001jenkins-jobs:write\u3001config-server:read\u3001config-server:write\uff1b\u91d1\u9470\u50c5\u986f\u793a\u4e00\u6b21\uff09\n \u90e8\u7f72\u7a97\u53e3\u65b0\u589e/\u522a\u9664\u5177\u540d\u6642\u6bb5\uff08\u7a97\u53e3\u540d\u7a31\u3001\u8a08\u5283\u6642\u9593\u3001\u5099\u8a3b\uff09\uff0c\u4f9b\u4e0a\u7dda\u55ae\u6307\u5b9a\n \n\n\n3.9 \u6574\u9ad4\u6d41\u7a0b\u5716(\u5efa\u55ae \u2192 \u90e8\u7f72 \u2192 \u56de\u586b)
\n\n \n \u5716 8 \u2014 \u4e0a\u7dda\u55ae\u5b8c\u6574\u751f\u547d\u9031\u671f:\u5efa\u55ae \u2192 \u5408\u4f75 \u2192 \u90e8\u7f72 \u2192 \u56de\u586b\n\n\n\n4\u5169\u7cfb\u7d71\u4ecb\u63a5
\n\n4.1 \u5169\u5957\u4e92\u76f8\u9694\u96e2\u7684 API \u4ecb\u9762
\nmomo-ticket-system \u5c0d\u5916\u6709\u5169\u689d\u5b8c\u5168\u5206\u958b\u7684\u8def\u7531\u6a39\uff0c\u6c92\u6709\u5171\u7528\u4e2d\u4ecb\u5c64\uff1a
\n\n \n \n /api/*\uff08JWT\uff09\n /api/ext/*\uff08API Key\uff09\n \n \n \u4f7f\u7528\u8005\u7db2\u9801\u767b\u5165\u7684\u771f\u4eba\uff08Zitadel SSO\uff09\u670d\u52d9\u5e33\u865f\u5f0f\u7684\u5916\u90e8 client\uff08\u4f8b\u5982 cogwork\u3001Jenkins pipeline\uff09\n \u8a8d\u8b49Authorization JWT\uff0c9 \u5c0f\u6642\u5230\u671fX-API-Key: mtk_xxxx\u2026\uff0c\u53ef\u8a2d\u5230\u671f\u6642\u9593\u3001\u53ef\u64a4\u92b7\n \u6b0a\u9650\u6a21\u578b\u89d2\u8272\uff08General_User / Deploy_User / Admin\uff09Scope\uff08releases:read\u3001config-server:write \u7b49\uff09\n \u8ab0\u5728\u7528momo-ticket-system \u81ea\u5df1\u7684\u7db2\u9801\u524d\u7aefmomo-cogwork\u3001Jenkins pipeline \u56de\u5831\n \n\nmomo-cogwork \u53ea\u8d70 /api/ext/*\uff0c\u56e0\u70ba\u5b83\u662f\u7121\u4f7f\u7528\u8005 session \u7684\u684c\u9762\u7528\u6236\u7aef\uff0c\u5929\u751f\u4e0d\u7b26\u5408 JWT \u4e2d\u4ecb\u5c64\u300c\u8981\u6709\u767b\u5165\u4f7f\u7528\u8005\u300d\u7684\u5047\u8a2d\u3002
\n\n4.2 \u6838\u5fc3\u8cc7\u6599\u6a21\u578b
\n\n \n \u5716 9 \u2014 \u6838\u5fc3\u8cc7\u6599\u6a21\u578b(ER \u5716)\n\n\n4.3 ext API \u7aef\u9ede\u7e3d\u89bd(cogwork \u5be6\u969b\u6703\u547c\u53eb\u7684)
\n\n \n Method\n Path\n Scope\n cogwork \u5c0d\u61c9\u529f\u80fd\n \n \n GET/api/ext/releasesreleases:read\u4e0a\u7dda\u6e05\u55ae\u5217\u8868\n GET/api/ext/releases/{id}releases:read\u4e0a\u7dda\u55ae\u7d30\u9805\n PUT/api/ext/releases/{id}/statusreleases:write-status\uff08cogwork \u672a\u4f7f\u7528\uff1b\u70ba Jenkins pipeline \u81ea\u52d5\u56de\u5831\u90e8\u7f72\u7d50\u679c\u4fdd\u7559\uff09\n PUT/api/ext/releases/{id}/feedbackreleases:write-feedback\u4e0a\u7dda\u56de\u586b\uff08\u72c0\u614b/\u6025\u4e0a/\u9000\u7248\uff09\n GET/api/ext/systems/{systemId}/jenkins-jobsjenkins-jobs:readJenkins \u57f7\u884c\u9762\u677f\u7684 job \u6e05\u55ae\n GET/api/ext/config-server-changesconfig-server:readConfig Server \u5f85\u8655\u7406\u6e05\u55ae\n PUT/api/ext/config-server-changes/{id}config-server:writeConfig Server \u5957\u7528\u5f8c\u6a19\u8a18\u5b8c\u6210\n \n\n\n cogwork \u4f7f\u7528\u7684 API Key \u9700\u8981\u540c\u6642\u5177\u5099 releases:read\u3001releases:write-feedback\u3001jenkins-jobs:read\u3001config-server:read\u3001config-server:write \u9019\u5e7e\u500b scope\uff0c\u65bc Admin \u2192 \u6191\u8b49\u8a2d\u5b9a \u2192 API \u91d1\u9470 \u8a2d\u5b9a\u3002\n
\n\n4.4 \u5916\u90e8\u7b2c\u4e09\u65b9\u7cfb\u7d71(momo-ticket-system \u4e0d\u7d93\u624b\uff0ccogwork \u76f4\u63a5\u5c0d\u63a5)
\n\n \n \u7cfb\u7d71\n momo-cogwork \u600e\u9ebc\u63a5\n \u5099\u8a3b\n \n \n Jenkins\u76f4\u63a5\u6253 classic remote API\uff08buildWithParameters + \u8f2a\u8a62 queue/build + consoleText\uff09\uff0cBasic Auth\uff08\u4f9d job URL \u7684 host \u6bd4\u5c0d\u6191\u8b49\uff09\u300c\u54ea\u4e9b job \u5c6c\u65bc\u54ea\u500b\u7cfb\u7d71\u300d\u4ecd\u7136\u4f86\u81ea momo-ticket-system\uff1b\u57f7\u884c\u672c\u8eab\u5b8c\u5168\u7e5e\u904e\u5b83\n RCM Config Server\u76f4\u63a5\u6253 KrakenD gateway\uff0cX-Api-Key\uff1b\u6b63\u5f0f\u74b0\u5883 TP/GCP \u5171\u7528\u4e00\u500b gateway\u3001TC \u662f\u7368\u7acb gateway\uff1b\u6b63\u5f0f\u74b0\u5883 TC \u8def\u5f91\u524d\u7db4\u542b /tc/\uff0c\u8ddf\u6e2c\u8a66\u6a5f\u4e0d\u540c\u898b README_APIKEY_PROD.md\uff1bDeploy \u958b\u95dc\uff08enable\uff09API \u7121\u6cd5\u63a7\u5236\uff08\u00a72.4 \u5df2\u77e5\u9650\u5236\uff09\n GitLabREST API v4\uff0cPRIVATE-TOKEN\uff1b\u53ef\u8a2d\u5b9a\u591a\u500b instance\u4e5f\u662f cogwork \u7248\u672c\u66f4\u65b0\u63d0\u793a\u7684\u8cc7\u6599\u4f86\u6e90\n Jira / AtlassianAtlassian Cloud OAuth\u552f\u8b80\u67e5\u8a62\uff0c\u5beb\u5165\u52d5\u4f5c\u5be6\u969b\u4e0a\u662f\u5efa\u7acb GitLab \u8b70\u984c\uff0c\u4e0d\u5beb\u56de Jira\n Outlook / \u672c\u6a5f\u6a94\u6848Windows \u672c\u6a5f COM/MAPI\u3001\u6a94\u6848\u7cfb\u7d71 API\u5b8c\u5168\u5728\u4f7f\u7528\u8005\u81ea\u5df1\u96fb\u8166\u4e0a\uff0c\u4e0d\u7d93\u904e\u4efb\u4f55\u4f3a\u670d\u5668\n \n\n\n\n5\u5feb\u901f\u5c0d\u7167:\u4e00\u500b\u64cd\u4f5c\u80cc\u5f8c\u6253\u4e86\u54ea\u4e9b\u7cfb\u7d71
\n\n \n \u4f7f\u7528\u8005\u64cd\u4f5c\n \u4f9d\u5e8f\u6253\u7684\u7cfb\u7d71\n \n \n \uff08cogwork\uff09\u958b\u555f\u4e0a\u7dda\u6e05\u55aemomo-ticket-system\uff08ext, GET\uff09\n \uff08cogwork\uff09\u5c55\u958b\u4e0a\u7dda\u55ae\u7d30\u9805momo-ticket-system\uff08ext, GET\uff09\n \uff08cogwork\uff09\u9ede\u7cfb\u7d71\u958b Jenkins \u9762\u677fmomo-ticket-system\uff08ext, GET job \u6e05\u55ae\uff09\u2192 Jenkins\uff08\u76f4\u63a5\u89f8\u767c/\u8f2a\u8a62\uff09\n \uff08cogwork\uff09\u5132\u5b58\u4e0a\u7dda\u56de\u586bmomo-ticket-system\uff08ext, PUT feedback\uff09\n \uff08cogwork\uff09\u5957\u7528\u4e00\u7b46 Config Server \u7570\u52d5momo-ticket-system\uff08ext, GET \u6700\u65b0\u8a18\u9304\uff09\u2192 RCM\uff08POST /config\uff0c\u53ef\u80fd\u4e00\u5230\u4e09\u500b\u74b0\u5883\uff09\u2192 momo-ticket-system\uff08ext, PUT \u6a19\u8a18\u5b8c\u6210\uff09\n \uff08cogwork\uff09\u958b\u6a5f\u6aa2\u67e5\u66f4\u65b0GitLab\uff08\u81ea\u5df1\u5c08\u6848\u7684 Releases API\uff09\n \uff08cogwork\uff09GitLab \u5206\u9801\u64cd\u4f5c MRGitLab\uff08\u76f4\u63a5\uff09\n \uff08cogwork\uff09ITSM \u67e5 Jira / \u5efa GitLab \u8b70\u984cAtlassian\uff08\u67e5\u8a62\uff09\u2192 GitLab\uff08\u5efa\u7acb\u8b70\u984c\uff09\n \uff08\u7db2\u9801\uff09SSO \u767b\u5165momo-ticket-system \u2192 Zitadel \u2192 momo-ticket-system\uff08\u767c JWT\uff09\n \uff08\u7db2\u9801\uff09\u586b\u5beb/\u532f\u5165\u4e0a\u7dda\u55aemomo-ticket-system\uff08JWT, POST\uff09\n \uff08\u7db2\u9801\uff09\u6e2c\u8a66\u5408\u4f75 / \u6b63\u5f0f\u5408\u4f75momo-ticket-system \u2192 GitLab\uff08\u4f3a\u670d\u5668\u7aef git merge/push\uff09\n \uff08\u7db2\u9801\uff09\u89f8\u767c\u90e8\u7f72momo-ticket-system \u2192 Jenkins\uff08trigger\uff09\uff0c\u7d50\u679c\u7531 pipeline \u8d70 ext API \u56de\u547c\n \uff08\u7db2\u9801\uff09\u4e0a\u7dda\u56de\u586bmomo-ticket-system\uff08JWT, PUT feedback\uff09\n \uff08\u7db2\u9801\uff09\u63d0\u4ea4 Config Server \u7570\u52d5momo-ticket-system\uff08JWT, POST\uff09\u2014\u2014\u5957\u7528\u52d5\u4f5c\u4e4b\u5f8c\u7531 cogwork \u5b8c\u6210\n \n\n\n\n\u9644\u9644\u9304:\u76f8\u95dc\u6587\u4ef6
\n\n \n \u6587\u4ef6\n \u5167\u5bb9\n \n \n momo-cogwork \u5c08\u6848 CLAUDE.md\u958b\u767c\u74b0\u5883\u3001build/\u767c\u5e03\u6d41\u7a0b\u3001\u5df2\u77e5\u554f\u984c\n momo-ticket-system \u5c08\u6848 readme.md\u90e8\u7f72\u7d30\u7bc0\u3001GKE \u8e29\u96f7\u7d00\u9304\u3001CI/CD\n README_APIKEY.md / README_APIKEY_PROD.mdRCM Config Server API \u6587\u4ef6\uff08\u6e2c\u8a66\u6a5f/\u6b63\u5f0f\u6a5f\uff09\n rcm-enable-deploy-toggle.mdRCM Deploy \u958b\u95dc\u7121\u6cd5\u7531 API \u63a7\u5236\u7684\u554f\u984c\u55ae\n \n\n\n\n