{"id":15458,"date":"2024-06-05T14:15:53","date_gmt":"2024-06-05T06:15:53","guid":{"rendered":"https:\/\/92it.top\/?p=15458"},"modified":"2024-08-16T14:11:13","modified_gmt":"2024-08-16T06:11:13","slug":"openshift-%e4%b8%80%e4%ba%9btips","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=15458","title":{"rendered":"Openshift \u5b66\u4e60\u4e2d\u7684\u4e00\u4e9btips"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898: BuildConfig (bc)\u662f\u4ec0\u4e48\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><code>BuildConfig<\/code> \u662f OpenShift \u7279\u6709\u7684\u8d44\u6e90\uff0c\u7528\u4e8e\u5b9a\u4e49\u548c\u7ba1\u7406\u6784\u5efa\u8fc7\u7a0b\u3002\u5b83\u63cf\u8ff0\u4e86\u5982\u4f55\u4ece\u6e90\u4ee3\u7801\u751f\u6210\u5bb9\u5668\u955c\u50cf\u3002<code>BuildConfig<\/code> \u662f OpenShift \u7528\u4e8e\u63cf\u8ff0\u5e94\u7528\u7a0b\u5e8f\u6784\u5efa\u8fc7\u7a0b\u7684\u8d44\u6e90\u3002\u5b83\u5b9a\u4e49\u4e86\u4ece\u6e90\u4ee3\u7801\u751f\u6210\u5bb9\u5668\u955c\u50cf\u7684\u5404\u79cd\u53c2\u6570\u548c\u6b65\u9aa4\u3002<code>BuildConfig<\/code> \u5305\u62ec\u6784\u5efa\u6e90\u3001\u6784\u5efa\u7b56\u7565\u3001\u8f93\u51fa\u76ee\u6807\u4ee5\u53ca\u89e6\u53d1\u5668\u7b49\u4fe1\u606f\u3002<\/p>\n\n\n\n<p><strong>\u4e3b\u8981\u7ec4\u6210\u90e8\u5206<\/strong>\uff1a<\/p>\n\n\n\n<ol>\n<li>\u6e90\u4ee3\u7801 (Source)\uff1a\n<ul>\n<li>\u5b9a\u4e49\u6784\u5efa\u7684\u6e90\u4ee3\u7801\u4f4d\u7f6e\uff0c\u53ef\u4ee5\u662f Git \u4ed3\u5e93\u3001\u672c\u5730\u6587\u4ef6\u8def\u5f84\u7b49\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u6784\u5efa\u7b56\u7565 (Build Strategy)\uff1a\n<ul>\n<li>\u5b9a\u4e49\u4f7f\u7528\u54ea\u79cd\u6784\u5efa\u7b56\u7565\uff0c\u4f8b\u5982 Source-to-Image (S2I)\u3001Dockerfile\u3001Custom \u7b49\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u8f93\u51fa (Output)\uff1a\n<ul>\n<li>\u5b9a\u4e49\u6784\u5efa\u5b8c\u6210\u540e\uff0c\u751f\u6210\u7684\u955c\u50cf\u5e94\u8be5\u63a8\u9001\u5230\u54ea\u4e2a\u955c\u50cf\u4ed3\u5e93\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u89e6\u53d1\u5668 (Triggers)\uff1a\n<ul>\n<li>\u5b9a\u4e49\u4f55\u65f6\u89e6\u53d1\u6784\u5efa\uff0c\u4f8b\u5982\u5728\u6e90\u4ee3\u7801\u53d8\u5316\u65f6\u3001\u5728\u955c\u50cf\u53d8\u5316\u65f6\u7b49\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>\u7279\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul>\n<li>\u5b9a\u4e49\u6784\u5efa\u7b56\u7565\uff1a\u53ef\u4ee5\u4f7f\u7528\u4e0d\u540c\u7684\u6784\u5efa\u7b56\u7565\uff0c\u5982\u6e90\u4ee3\u7801\u6784\u5efa\uff08Source-to-Image, S2I\uff09\u3001Dockerfile \u6784\u5efa\u3001\u4e8c\u8fdb\u5236\u6784\u5efa\u7b49\u3002<\/li>\n\n\n\n<li>\u89e6\u53d1\u5668\uff1a\u652f\u6301\u57fa\u4e8e Git \u53d8\u5316\u3001ImageStream \u53d8\u5316\u3001\u5b9a\u65f6\u7b49\u89e6\u53d1\u6784\u5efa\u3002<\/li>\n\n\n\n<li>\u6784\u5efa\u8fc7\u7a0b\uff1a\u5728\u6784\u5efa\u8fc7\u7a0b\u4e2d\u4f1a\u542f\u52a8\u4e00\u4e2a\u6216\u591a\u4e2a Pod \u6765\u6267\u884c\u6784\u5efa\u4efb\u52a1\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u793a\u4f8b\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: build.openshift.io\/v1\nkind: BuildConfig\nmetadata:\n  name: example-buildconfig\nspec:\n  source:\n    type: Git\n    git:\n      uri: 'https:\/\/github.com\/openshift\/nodejs-ex.git'\n  strategy:\n    type: Source\n  output:\n    to:\n      kind: ImageStreamTag\n      name: 'example-image:latest'\n  triggers:\n    - type: GitHub\n      github:\n        secret: 'mysecret'\n    - type: ImageChange\n    - type: ConfigChange\n<\/pre>\n\n\n\n<p><strong>\u914d\u7f6e\u6587\u4ef6\u7684\u4f5c\u7528<\/strong>\uff1a<\/p>\n\n\n\n<ul>\n<li>\u5b9a\u4e49\u6784\u5efa\u6d41\u7a0b\uff1a <code>BuildConfig<\/code> \u5b9a\u4e49\u4e86\u5982\u4f55\u4ece\u6e90\u4ee3\u7801\u751f\u6210\u5bb9\u5668\u955c\u50cf\uff0c\u5305\u62ec\u6240\u9700\u7684\u6240\u6709\u6b65\u9aa4\u548c\u53c2\u6570\u3002<\/li>\n\n\n\n<li>\u89e6\u53d1\u6784\u5efa\uff1a \u6839\u636e\u914d\u7f6e\u4e2d\u7684\u89e6\u53d1\u5668\uff0c\u5f53\u6ee1\u8db3\u6761\u4ef6\u65f6\uff0c\u4f1a\u81ea\u52a8\u542f\u52a8\u6784\u5efa\u4efb\u52a1\u3002\u4f8b\u5982\uff0c\u4ee3\u7801\u4ed3\u5e93\u6709\u65b0\u7684\u63d0\u4ea4\u65f6\uff0c<code>BuildConfig<\/code> \u4f1a\u81ea\u52a8\u89e6\u53d1\u65b0\u7684\u6784\u5efa\u3002<\/li>\n\n\n\n<li>\u7ba1\u7406\u6784\u5efa\u8fc7\u7a0b\uff1a OpenShift \u7684\u6784\u5efa\u63a7\u5236\u5668\u4f1a\u6839\u636e <code>BuildConfig<\/code> \u7684\u5b9a\u4e49\u542f\u52a8\u6784\u5efa Pod\uff0c\u6267\u884c\u6784\u5efa\u4efb\u52a1\uff0c\u7136\u540e\u5c06\u751f\u6210\u7684\u955c\u50cf\u63a8\u9001\u5230\u6307\u5b9a\u7684\u955c\u50cf\u4ed3\u5e93\u3002<\/li>\n<\/ul>\n\n\n\n<p><code>BuildConfig<\/code> \u5b9a\u4e49\u4e86\u6784\u5efa\u8fc7\u7a0b\uff0c\u5f53\u89e6\u53d1\u6784\u5efa\u65f6\uff0c\u4f1a\u542f\u52a8\u4e00\u4e2a\u6784\u5efa Pod \u6765\u6267\u884c\u6784\u5efa\u4efb\u52a1\u3002<\/p>\n\n\n\n<p>\u6784\u5efa\u5b8c\u6210\u540e\uff0c\u6784\u5efa Pod \u4f1a\u88ab\u5220\u9664\u3002<\/p>\n\n\n\n<p><strong>\u6784\u5efa\u8fc7\u7a0b<\/strong>\uff1a<\/p>\n\n\n\n<ol>\n<li>\u521b\u5efa BuildConfig\uff1a \u901a\u8fc7 <code>oc create -f buildconfig.yaml<\/code> \u547d\u4ee4\u521b\u5efa <code>BuildConfig<\/code>\u3002<\/li>\n\n\n\n<li>\u89e6\u53d1\u6784\u5efa\uff1a \u6839\u636e\u5b9a\u4e49\u7684\u89e6\u53d1\u5668\uff0c\u6784\u5efa\u4efb\u52a1\u4f1a\u5728\u5408\u9002\u7684\u65f6\u673a\u542f\u52a8\uff0c\u4f8b\u5982\u4ee3\u7801\u66f4\u65b0\u3001\u624b\u52a8\u89e6\u53d1\u7b49\u3002<\/li>\n\n\n\n<li>\u521b\u5efa\u6784\u5efa Pod\uff1a \u6784\u5efa\u63a7\u5236\u5668\u4f1a\u542f\u52a8\u4e00\u4e2a\u4e34\u65f6\u7684\u6784\u5efa Pod\uff0c\u6267\u884c\u4ece\u6e90\u4ee3\u7801\u751f\u6210\u955c\u50cf\u7684\u4efb\u52a1\u3002<\/li>\n\n\n\n<li>\u8f93\u51fa\u955c\u50cf\uff1a \u6784\u5efa Pod \u5b8c\u6210\u4efb\u52a1\u540e\uff0c\u5c06\u751f\u6210\u7684\u955c\u50cf\u63a8\u9001\u5230\u6307\u5b9a\u7684\u955c\u50cf\u4ed3\u5e93\u3002<\/li>\n\n\n\n<li>\u7ba1\u7406\u548c\u76d1\u63a7\uff1a \u53ef\u4ee5\u4f7f\u7528 <code>oc get builds<\/code> \u548c <code>oc logs build\/&lt;build-name&gt;<\/code> \u547d\u4ee4\u67e5\u770b\u6784\u5efa\u72b6\u6001\u548c\u65e5\u5fd7\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u7528oc get pod\uff0c\u53ef\u4ee5\u770b\u5230 \u4e34\u65f6\u7684\u6784\u5efa Pod<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"862\" height=\"118\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4.png\" alt=\"\" class=\"wp-image-15459\" style=\"width:484px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4.png 862w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4-300x41.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4-768x105.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4-830x114.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4-230x31.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4-350x48.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-4-480x66.png 480w\" sizes=\"(max-width: 862px) 100vw, 862px\" \/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898: <code>oc new-app<\/code> \u547d\u4ee4\u53ef\u4ee5\u81ea\u52a8\u751f\u6210 <code>BuildConfig<\/code> \u5417\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><code>oc new-app<\/code> \u547d\u4ee4\u7528\u4e8e\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u5305\u62ec\u521b\u5efa\u76f8\u5e94\u7684 Kubernetes \u548c OpenShift \u8d44\u6e90\uff0c\u5982 DeploymentConfig\u3001Service\u3001Route\uff0c\u4ee5\u53ca\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0cBuildConfig\u3002<\/p>\n\n\n\n<p><strong>\u81ea\u52a8\u751f\u6210 <code>BuildConfig<\/code> \u7684\u60c5\u51b5<\/strong><\/p>\n\n\n\n<p>\u5f53\u4f60\u4f7f\u7528 <code>oc new-app<\/code> \u547d\u4ee4\u5e76\u6307\u5b9a\u6e90\u4ee3\u7801\u4ed3\u5e93\uff08\u4f8b\u5982 Git \u4ed3\u5e93\uff09\u65f6\uff0cOpenShift \u4f1a\u81ea\u52a8\u521b\u5efa\u4e00\u4e2a <code>BuildConfig<\/code> \u4ee5\u4ece\u6e90\u4ee3\u7801\u6784\u5efa\u5bb9\u5668\u955c\u50cf\u3002\u8fd9\u4e2a <code>BuildConfig<\/code> \u5c06\u5b9a\u4e49\u5982\u4f55\u4ece\u6e90\u4ee3\u7801\u751f\u6210\u955c\u50cf\uff0c\u7136\u540e\u5c06\u8be5\u955c\u50cf\u90e8\u7f72\u5230\u96c6\u7fa4\u4e2d\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc new-app https:\/\/github.com\/sclorg\/nodejs-ex -l name=myapp<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0cOpenShift \u4f1a\uff1a<\/p>\n\n\n\n<ol>\n<li>\u521b\u5efa\u4e00\u4e2a <code>BuildConfig<\/code>\uff0c\u5b9a\u4e49\u5982\u4f55\u4ece <code>https:\/\/github.com\/sclorg\/nodejs-ex<\/code> \u4ed3\u5e93\u4e2d\u7684\u6e90\u4ee3\u7801\u751f\u6210\u955c\u50cf\u3002<\/li>\n\n\n\n<li>\u521b\u5efa\u4e00\u4e2a <code>ImageStream<\/code> \u6765\u5b58\u50a8\u6784\u5efa\u7684\u955c\u50cf\u3002<\/li>\n\n\n\n<li>\u521b\u5efa\u4e00\u4e2a <code>DeploymentConfig<\/code>\uff0c\u7528\u4e8e\u7ba1\u7406\u5e94\u7528\u7684\u90e8\u7f72\u3002<\/li>\n\n\n\n<li>\u521b\u5efa\u4e00\u4e2a <code>Service<\/code>\uff0c\u7528\u4e8e\u66b4\u9732\u5e94\u7528\u3002<\/li>\n\n\n\n<li>\u521b\u5efa\u4e00\u4e2a <code>Route<\/code>\uff08\u5982\u679c\u9002\u7528\uff09\uff0c\u7528\u4e8e\u5916\u90e8\u8bbf\u95ee\u5e94\u7528\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u4e0d\u81ea\u52a8\u751f\u6210 <code>BuildConfig<\/code> \u7684\u60c5\u51b5<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc new-app nodejs:latest -l name=myapp<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0cOpenShift \u76f4\u63a5\u4f7f\u7528 <code>nodejs:latest<\/code> \u955c\u50cf\uff0c\u4e0d\u9700\u8981\u4ece\u6e90\u4ee3\u7801\u6784\u5efa\u955c\u50cf\uff0c\u56e0\u6b64\u4e0d\u4f1a\u751f\u6210 <code>BuildConfig<\/code>\u3002\u5b83\u4f1a\u521b\u5efa\u4ee5\u4e0b\u8d44\u6e90\uff1a<\/p>\n\n\n\n<ol>\n<li>\u4e00\u4e2a <code>DeploymentConfig<\/code>\u3002<\/li>\n\n\n\n<li>\u4e00\u4e2a <code>Service<\/code>\u3002<\/li>\n\n\n\n<li>\u4e00\u4e2a <code>Route<\/code>\uff08\u5982\u679c\u9002\u7528\uff09\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong>\uff1a<\/p>\n\n\n\n<ul>\n<li><code>oc new-app<\/code> \u4f1a\u81ea\u52a8\u751f\u6210 <code>BuildConfig<\/code>\uff1a\u5982\u679c\u4f60\u6307\u5b9a\u4e86\u6e90\u4ee3\u7801\u4ed3\u5e93\uff0cOpenShift \u4f1a\u81ea\u52a8\u521b\u5efa\u4e00\u4e2a <code>BuildConfig<\/code>\uff0c\u4ece\u6e90\u4ee3\u7801\u6784\u5efa\u5bb9\u5668\u955c\u50cf\u3002<\/li>\n\n\n\n<li>\u4e0d\u4f1a\u751f\u6210 <code>BuildConfig<\/code> \u7684\u60c5\u51b5\uff1a\u5982\u679c\u4f60\u76f4\u63a5\u6307\u5b9a\u4e86\u5bb9\u5668\u955c\u50cf\uff0cOpenShift \u4e0d\u9700\u8981\u4ece\u6e90\u4ee3\u7801\u6784\u5efa\u955c\u50cf\uff0c\u56e0\u6b64\u4e0d\u4f1a\u751f\u6210 <code>BuildConfig<\/code>\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898: service \u548c route \u6709\u4ec0\u4e48\u5173\u7cfb<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Service\u63d0\u4f9b\u4e86\u4e00\u4e2a\u901a\u5f80\u540e\u7aefPod\u96c6\u7fa4\u7684\u7a33\u5b9a\u5165\u53e3\uff0c\u4f46\u662fService\u7684IP\u5730\u5740\u53ea\u662f\u96c6\u7fa4\u5185\u90e8\u8282\u70b9\u53ca\u5bb9\u5668\u53ef\u89c1\u3002\u5bf9\u4e8e\u5916\u90e8\u7684\u5e94\u7528\u6216\u8005\u7528\u6237\u6765\u8bf4\uff0c\u8fd9\u4e2a\u5730\u5740\u662f\u4e0d\u53ef\u8fbe\u7684\u3002<\/p>\n\n\n\n<p>\u90a3\u4e48\u5916\u9762\u7684\u7528\u6237\u60f3\u8981\u8bbf\u95eeService\u6307\u5411\u7684\u670d\u52a1\u8be5\u600e\u4e48\u529e\uff1f<\/p>\n\n\n\n<p>OpenShift\u63d0\u4f9b\u4e86Router(\u8def\u7531\u5668)\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002<\/p>\n\n\n\n<p><strong>Service<\/strong><\/p>\n\n\n\n<p><code>Service<\/code> \u662f Kubernetes \u548c OpenShift \u4e2d\u7684\u57fa\u672c\u6982\u5ff5\uff0c\u7528\u4e8e\u5b9a\u4e49\u4e00\u7ec4 Pod \u7684\u7f51\u7edc\u670d\u52a1\u3002\u5b83\u63d0\u4f9b\u4e86\u4e00\u79cd\u62bd\u8c61\u5c42\uff0c\u4f7f\u5ba2\u6237\u7aef\u80fd\u591f\u901a\u8fc7\u7edf\u4e00\u7684 IP \u5730\u5740\u548c\u7aef\u53e3\u8bbf\u95ee Pod\uff0c\u800c\u4e0d\u9700\u8981\u77e5\u9053 Pod \u7684\u5177\u4f53\u5b9e\u4f8b\u3002<\/p>\n\n\n\n<p>\u4e3b\u8981\u529f\u80fd\uff1a<\/p>\n\n\n\n<ol>\n<li>\u8d1f\u8f7d\u5747\u8861\uff1a\u5728\u591a\u4e2a Pod \u4e4b\u95f4\u5206\u53d1\u6d41\u91cf\uff0c\u5b9e\u73b0\u8d1f\u8f7d\u5747\u8861\u3002<\/li>\n\n\n\n<li>\u670d\u52a1\u53d1\u73b0\uff1a\u901a\u8fc7 DNS \u6216\u73af\u5883\u53d8\u91cf\uff0c\u4f7f\u5176\u4ed6\u670d\u52a1\u80fd\u591f\u53d1\u73b0\u5e76\u8bbf\u95ee\u5b83\u3002<\/li>\n\n\n\n<li>\u7f51\u7edc\u62bd\u8c61\uff1a\u63d0\u4f9b\u7edf\u4e00\u7684\u8bbf\u95ee\u5165\u53e3\uff0c\u4e0d\u7ba1 Pod \u5b9e\u4f8b\u5982\u4f55\u53d8\u5316\uff0cService IP \u5730\u5740\u548c\u7aef\u53e3\u4fdd\u6301\u4e0d\u53d8\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Service\nmetadata:\n  name: example-service\nspec:\n  selector:\n    app: example\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 8080\n<\/pre>\n\n\n\n<p><strong>Route<\/strong><\/p>\n\n\n\n<p><code>Route<\/code> \u662f OpenShift \u7279\u6709\u7684\u8d44\u6e90\uff0c\u7528\u4e8e\u5c06\u5916\u90e8\u6d41\u91cf\u8def\u7531\u5230\u96c6\u7fa4\u5185\u7684\u670d\u52a1\u3002\u5b83\u4e3a\u5916\u90e8\u5ba2\u6237\u7aef\uff08\u4f8b\u5982 Web \u6d4f\u89c8\u5668\uff09\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53ef\u4ee5\u8bbf\u95ee\u5e94\u7528\u7a0b\u5e8f\u7684 URL\u3002<\/p>\n\n\n\n<p>\u4e3b\u8981\u529f\u80fd\uff1a<\/p>\n\n\n\n<ol>\n<li>\u5916\u90e8\u8bbf\u95ee\uff1a\u4e3a\u5e94\u7528\u7a0b\u5e8f\u63d0\u4f9b\u4e00\u4e2a\u5916\u90e8\u53ef\u8bbf\u95ee\u7684 URL\u3002<\/li>\n\n\n\n<li>TLS \u7ec8\u6b62\uff1a\u53ef\u4ee5\u914d\u7f6e TLS \u7ec8\u6b62\uff0c\u4ee5\u63d0\u4f9b HTTPS \u8bbf\u95ee\u3002<\/li>\n\n\n\n<li>\u8def\u7531\u89c4\u5219\uff1a\u53ef\u4ee5\u57fa\u4e8e\u8def\u5f84\u6216\u4e3b\u673a\u540d\u7b49\u5b9a\u4e49\u590d\u6742\u7684\u8def\u7531\u89c4\u5219\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: route.openshift.io\/v1\nkind: Route\nmetadata:\n  name: example-route\nspec:\n  host: example.com\n  to:\n    kind: Service\n    name: example-service\n  port:\n    targetPort: 8080\n<\/pre>\n\n\n\n<p><strong>Service \u548c Route \u7684\u5173\u7cfb<\/strong>\uff1a<\/p>\n\n\n\n<ul>\n<li>Service \u4f5c\u4e3a Route \u7684\u76ee\u6807\uff1a<code>Route<\/code> \u9700\u8981\u4e00\u4e2a\u76ee\u6807 <code>Service<\/code> \u6765\u5c06\u5916\u90e8\u8bf7\u6c42\u8def\u7531\u5230\u96c6\u7fa4\u5185\u7684 Pod\u3002<code>Service<\/code> \u63d0\u4f9b\u4e86\u8d1f\u8f7d\u5747\u8861\u548c\u670d\u52a1\u53d1\u73b0\u529f\u80fd\uff0c\u5c06\u6d41\u91cf\u5206\u53d1\u5230\u540e\u7aef\u7684 Pod\u3002<\/li>\n\n\n\n<li>\u670d\u52a1\u66b4\u9732\u94fe\uff1a<code>Route<\/code> \u901a\u8fc7 <code>Service<\/code> \u5c06\u5916\u90e8\u6d41\u91cf\u5bfc\u5411\u5177\u4f53\u7684 Pod\u3002\u8fd9\u6837\uff0c<code>Route<\/code> \u63d0\u4f9b\u4e86\u4ece\u5916\u90e8\u4e16\u754c\u5230\u96c6\u7fa4\u5185\u90e8\u7684\u5165\u53e3\uff0c\u800c <code>Service<\/code> \u7ba1\u7406\u96c6\u7fa4\u5185\u90e8\u7684\u6d41\u91cf\u5206\u53d1\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5de5\u4f5c\u6d41\u7a0b\u793a\u4f8b<\/strong>\uff1a<\/p>\n\n\n\n<p><strong>\u521b\u5efa Service<\/strong>\uff1a\u9996\u5148\u521b\u5efa\u4e00\u4e2a <code>Service<\/code>\uff0c\u5b9a\u4e49\u5982\u4f55\u8bbf\u95ee\u4e00\u7ec4 Pod\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Service\nmetadata:\n  name: example-service\nspec:\n  selector:\n    app: example\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 8080\n<\/pre>\n\n\n\n<p><strong>\u521b\u5efa Route<\/strong>\uff1a\u7136\u540e\u521b\u5efa\u4e00\u4e2a <code>Route<\/code>\uff0c\u5c06\u5916\u90e8\u8bf7\u6c42\u8def\u7531\u5230\u8be5 <code>Service<\/code>\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: route.openshift.io\/v1\nkind: Route\nmetadata:\n  name: example-route\nspec:\n  host: example.com\n  to:\n    kind: Service\n    name: example-service\n  port:\n    targetPort: 8080\n<\/pre>\n\n\n\n<p><strong>\u8bbf\u95ee\u5e94\u7528<\/strong>\uff1a\u5916\u90e8\u7528\u6237\u901a\u8fc7 <code>http:\/\/example.com<\/code> \u8bbf\u95ee\u5e94\u7528\uff0c<code>Route<\/code> \u5c06\u8bf7\u6c42\u8f6c\u53d1\u5230 <code>example-service<\/code>\uff0c<code>Service<\/code> \u518d\u5c06\u8bf7\u6c42\u8d1f\u8f7d\u5747\u8861\u5230\u76f8\u5e94\u7684 Pod\u3002<\/p>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong>\uff1a<\/p>\n\n\n\n<p>\u5728 OpenShift \u4e2d\uff0c<code>Service<\/code> \u548c <code>Route<\/code> \u5171\u540c\u6784\u6210\u4e86\u5e94\u7528\u7a0b\u5e8f\u7f51\u7edc\u8bbf\u95ee\u7684\u6838\u5fc3\u673a\u5236\u3002<code>Service<\/code> \u7528\u4e8e\u5728\u96c6\u7fa4\u5185\u90e8\u63d0\u4f9b\u7a33\u5b9a\u7684\u7f51\u7edc\u8bbf\u95ee\u548c\u8d1f\u8f7d\u5747\u8861\uff0c\u800c <code>Route<\/code> \u7528\u4e8e\u5c06\u5916\u90e8\u6d41\u91cf\u5f15\u5165\u96c6\u7fa4\u5e76\u8def\u7531\u5230\u76f8\u5e94\u7684 <code>Service<\/code>\u3002\u901a\u8fc7\u8fd9\u4e24\u4e2a\u8d44\u6e90\u7684\u914d\u5408\uff0cOpenShift \u5b9e\u73b0\u4e86\u7075\u6d3b\u800c\u5f3a\u5927\u7684\u7f51\u7edc\u6d41\u91cf\u7ba1\u7406\u548c\u66b4\u9732\u673a\u5236\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898: \u5982\u4f55\u7ed1\u5b9a service \u548c pod<\/strong>\uff1f<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 Kubernetes \u548c OpenShift \u4e2d\uff0cService \u662f\u901a\u8fc7\u6807\u7b7e\u9009\u62e9\u5668\uff08label selector\uff09\u6765\u7ed1\u5b9a\u5230 Pod \u7684\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u6d89\u53ca\u4ee5\u4e0b\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ol>\n<li>\u4e3a Pod \u8bbe\u7f6e\u6807\u7b7e\u3002<\/li>\n\n\n\n<li>\u521b\u5efa\u4e00\u4e2a Service\uff0c\u5e76\u5b9a\u4e49\u6807\u7b7e\u9009\u62e9\u5668\u4ee5\u5339\u914d Pod \u7684\u6807\u7b7e\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>1. \u4e3a Pod \u8bbe\u7f6e\u6807\u7b7e<\/strong><\/p>\n\n\n\n<p>\u9996\u5148\uff0c\u786e\u4fdd\u4f60\u7684 Pod \u6709\u5408\u9002\u7684\u6807\u7b7e\u3002\u4f60\u53ef\u4ee5\u5728 Pod \u7684 YAML \u914d\u7f6e\u6587\u4ef6\u4e2d\u5b9a\u4e49\u6807\u7b7e\uff0c\u6216\u8005\u4f7f\u7528 <code>oc label<\/code> \u547d\u4ee4\u7ed9\u73b0\u6709\u7684 Pod \u6dfb\u52a0\u6807\u7b7e\u3002<\/p>\n\n\n\n<p>\u5728 Pod \u914d\u7f6e\u6587\u4ef6\u4e2d\u5b9a\u4e49\u6807\u7b7e<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Pod\nmetadata:\n  name: my-pod\n  labels:\n    app: my-app\nspec:\n  containers:\n  - name: my-container\n    image: my-image:latest\n<\/pre>\n\n\n\n<p>\u4f7f\u7528 <code>oc label<\/code> \u547d\u4ee4\u6dfb\u52a0\u6807\u7b7e<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc label pod my-pod app=my-app<\/pre>\n\n\n\n<p><strong>2. \u521b\u5efa Service \u5e76\u5b9a\u4e49\u6807\u7b7e\u9009\u62e9\u5668<\/strong><\/p>\n\n\n\n<p>\u521b\u5efa\u4e00\u4e2a Service\uff0c\u5e76\u5728\u5176\u914d\u7f6e\u6587\u4ef6\u4e2d\u5b9a\u4e49\u6807\u7b7e\u9009\u62e9\u5668\uff0c\u4f7f\u5176\u9009\u62e9\u5177\u6709\u76f8\u5e94\u6807\u7b7e\u7684 Pod\u3002<\/p>\n\n\n\n<p>Service \u914d\u7f6e\u6587\u4ef6\u793a\u4f8b<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Service\nmetadata:\n  name: my-service\nspec:\n  selector:\n    app: my-app\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 8080\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0cService \u4f7f\u7528\u6807\u7b7e\u9009\u62e9\u5668 <code>app: my-app<\/code> \u6765\u9009\u62e9\u6240\u6709\u5177\u6709\u8be5\u6807\u7b7e\u7684 Pod\uff0c\u5e76\u5c06\u6d41\u91cf\u8def\u7531\u5230\u8fd9\u4e9b Pod \u7684 <code>8080<\/code> \u7aef\u53e3\u3002<\/p>\n\n\n\n<p><strong>\u4f7f\u7528 <code>oc create<\/code> \u547d\u4ee4\u521b\u5efa Service<\/strong><\/p>\n\n\n\n<p>\u5c06\u4e0a\u9762\u7684 Service \u914d\u7f6e\u6587\u4ef6\u4fdd\u5b58\u4e3a <code>service.yaml<\/code>\uff0c\u7136\u540e\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa Service\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc create -f service.yaml<\/pre>\n\n\n\n<p><strong>\u9a8c\u8bc1\u7ed1\u5b9a<\/strong><\/p>\n\n\n\n<p>\u521b\u5efa Service \u540e\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b Service \u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u786e\u8ba4\u5b83\u662f\u5426\u6b63\u786e\u7ed1\u5b9a\u5230 Pod\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc get service my-service -o yaml<\/pre>\n\n\n\n<p>\u5e76\u67e5\u770b Endpoints\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc get endpoints my-service<\/pre>\n\n\n\n<p>\u8f93\u51fa\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">NAME         ENDPOINTS          AGE\nmy-service   10.1.1.1:8080,10.1.1.2:8080   5m<\/pre>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong><\/p>\n\n\n\n<p>\u901a\u8fc7\u4ee5\u4e0b\u6b65\u9aa4\u53ef\u4ee5\u5c06 Service \u7ed1\u5b9a\u5230 Pod\uff1a<\/p>\n\n\n\n<ol>\n<li>\u8bbe\u7f6e Pod \u6807\u7b7e\uff1a\u5728 Pod \u914d\u7f6e\u6587\u4ef6\u4e2d\u5b9a\u4e49\u6807\u7b7e\u6216\u4f7f\u7528 <code>oc label<\/code> \u547d\u4ee4\u6dfb\u52a0\u6807\u7b7e\u3002<\/li>\n\n\n\n<li>\u521b\u5efa Service\uff1a\u5728 Service \u914d\u7f6e\u6587\u4ef6\u4e2d\u5b9a\u4e49\u6807\u7b7e\u9009\u62e9\u5668\uff0c\u4f7f\u5176\u5339\u914d\u76f8\u5e94\u7684 Pod \u6807\u7b7e\u3002<\/li>\n\n\n\n<li>\u9a8c\u8bc1\u7ed1\u5b9a\uff1a\u4f7f\u7528 <code>oc get service<\/code> \u548c <code>oc get endpoints<\/code> \u547d\u4ee4\u9a8c\u8bc1 Service \u662f\u5426\u6b63\u786e\u7ed1\u5b9a\u5230 Pod\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u8fd9\u6837\uff0cService \u5c31\u53ef\u4ee5\u901a\u8fc7\u6807\u7b7e\u9009\u62e9\u5668\u5c06\u6d41\u91cf\u8def\u7531\u5230\u76f8\u5e94\u7684 Pod\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898: service yaml \u4e2d port: 80 targetPort: 8080 \u662f\u4ec0\u4e48\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 Kubernetes \u548c OpenShift \u4e2d\uff0cService \u7684 <code>port<\/code> \u548c <code>targetPort<\/code> \u662f\u7528\u6765\u5b9a\u4e49\u7f51\u7edc\u6d41\u91cf\u7684\u8def\u7531\u89c4\u5219\u7684\u3002\u5b83\u4eec\u5728 Service \u7684\u914d\u7f6e\u4e2d\u6307\u5b9a\u4e86\u5916\u90e8\u8bbf\u95ee\u7aef\u53e3\u548c\u76ee\u6807\u5bb9\u5668\u7aef\u53e3\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\u3002\u8ba9\u6211\u4eec\u8be6\u7ec6\u89e3\u91ca\u4e00\u4e0b\u8fd9\u4e24\u4e2a\u5b57\u6bb5\u7684\u4f5c\u7528\uff1a<\/p>\n\n\n\n<p><code>port<\/code> \u548c <code>targetPort<\/code> \u7684\u4f5c\u7528<\/p>\n\n\n\n<ul>\n<li><code>port<\/code>\uff1a\u8fd9\u662f Service \u66b4\u9732\u7ed9\u5916\u90e8\u7684\u7aef\u53e3\u3002\u5916\u90e8\u5ba2\u6237\u7aef\uff08\u5982\u5176\u4ed6 Pod \u6216\u7528\u6237\uff09\u901a\u8fc7\u8fd9\u4e2a\u7aef\u53e3\u8bbf\u95ee Service\u3002<\/li>\n\n\n\n<li><code>targetPort<\/code>\uff1a\u8fd9\u662f Service \u5c06\u6d41\u91cf\u8def\u7531\u5230\u540e\u7aef Pod \u7684\u7aef\u53e3\u3002\u4e5f\u5c31\u662f\u8bf4\uff0cService \u5c06\u63a5\u6536\u5230\u7684\u6d41\u91cf\u8f6c\u53d1\u5230\u6307\u5b9a\u7684 Pod \u4e0a\u7684\u8fd9\u4e2a\u7aef\u53e3\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u793a\u4f8b<\/p>\n\n\n\n<p>\u5047\u8bbe\u6709\u4e00\u4e2a Service \u914d\u7f6e\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Service\nmetadata:\n  name: my-service\nspec:\n  selector:\n    app: my-app\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 8080\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u793a\u4f8b\u4e2d\uff1a<\/p>\n\n\n\n<ul>\n<li><code>port: 80<\/code>\uff1a\u5ba2\u6237\u7aef\u5c06\u901a\u8fc7\u7aef\u53e3 <code>80<\/code> \u8bbf\u95ee\u8fd9\u4e2a Service\u3002<\/li>\n\n\n\n<li><code>targetPort: 8080<\/code>\uff1aService \u5c06\u6d41\u91cf\u8def\u7531\u5230\u5339\u914d\u6807\u7b7e <code>app: my-app<\/code> \u7684 Pod \u4e0a\u7684 <code>8080<\/code> \u7aef\u53e3\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5de5\u4f5c\u6d41\u7a0b<\/p>\n\n\n\n<ol>\n<li>\u5ba2\u6237\u7aef\u8bf7\u6c42\uff1a\u5ba2\u6237\u7aef\u53d1\u9001\u4e00\u4e2a\u8bf7\u6c42\u5230 <code>my-service<\/code> \u7684 IP \u5730\u5740\uff08<code>ClusterIP<\/code>\uff09\u4e0a\u7684 <code>80<\/code> \u7aef\u53e3\u3002<\/li>\n\n\n\n<li>Service \u8def\u7531\uff1aService \u63a5\u6536\u5230\u8bf7\u6c42\u540e\uff0c\u5c06\u6d41\u91cf\u8f6c\u53d1\u5230\u540e\u7aef Pod \u7684 <code>8080<\/code> \u7aef\u53e3\u3002<\/li>\n\n\n\n<li>Pod \u54cd\u5e94\uff1a\u8fd0\u884c\u5728 Pod \u4e0a\u7684\u5e94\u7528\u76d1\u542c <code>8080<\/code> \u7aef\u53e3\uff0c\u63a5\u6536\u8bf7\u6c42\u5e76\u8fdb\u884c\u5904\u7406\uff0c\u7136\u540e\u8fd4\u56de\u54cd\u5e94\u3002<\/li>\n<\/ol>\n\n\n\n<p><code>port<\/code>\uff1aService \u7684\u66b4\u9732\u7aef\u53e3\uff0c\u53ef\u4ee5\u662f\u4efb\u610f\u672a\u88ab\u5360\u7528\u7684\u7aef\u53e3\u53f7\u3002<\/p>\n\n\n\n<p><code>targetPort<\/code>\uff1a\u901a\u5e38\u662f\u5bb9\u5668\u5185\u5e94\u7528\u7a0b\u5e8f\u6b63\u5728\u76d1\u542c\u7684\u7aef\u53e3\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a\u8bbf\u95eeservice \u662f\u901a\u8fc7\u540d\u5b57 \u8fd8\u662fip\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 Kubernetes \u548c OpenShift \u4e2d\uff0c\u8bbf\u95ee Service \u53ef\u4ee5\u901a\u8fc7\u540d\u5b57\u6216 IP \u5730\u5740\u6765\u5b9e\u73b0\u3002\u4e24\u79cd\u65b9\u5f0f\u5404\u6709\u5176\u9002\u7528\u573a\u666f\u548c\u7279\u70b9\u3002<\/p>\n\n\n\n<p><strong>\u901a\u8fc7 Service \u540d\u79f0\u8bbf\u95ee<\/strong><\/p>\n\n\n\n<p>\u96c6\u7fa4\u5185\u90e8 DNS \u89e3\u6790<\/p>\n\n\n\n<p>Kubernetes \u5185\u90e8\u63d0\u4f9b\u4e86 DNS \u670d\u52a1\uff0c\u53ef\u4ee5\u901a\u8fc7 Service \u7684\u540d\u79f0\u5728\u96c6\u7fa4\u5185\u8fdb\u884c\u670d\u52a1\u53d1\u73b0\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cService \u540d\u79f0\u4f1a\u88ab\u89e3\u6790\u6210\u8be5 Service \u7684 Cluster IP \u5730\u5740\u3002\u8fd9\u79cd\u65b9\u5f0f\u66f4\u4e3a\u5e38\u7528\uff0c\u56e0\u4e3a\u5b83\u907f\u514d\u4e86\u786c\u7f16\u7801 IP \u5730\u5740\uff0c\u589e\u52a0\u4e86\u7075\u6d3b\u6027\u548c\u53ef\u79fb\u690d\u6027\u3002<\/p>\n\n\n\n<ul>\n<li>\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\uff1a \u5728\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\uff0c\u76f4\u63a5\u4f7f\u7528 Service \u540d\u79f0\u5373\u53ef\u3002\u4f8b\u5982\uff0c\u5982\u679c Service \u540d\u79f0\u662f <code>my-service<\/code>\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7 <code>my-service<\/code> \u8bbf\u95ee\u3002<\/li>\n<\/ul>\n\n\n\n<ol>\n<li><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl http:\/\/my-service<\/pre>\n\n\n\n<ul>\n<li>\u8de8\u547d\u540d\u7a7a\u95f4\uff1a \u5982\u679c\u9700\u8981\u8de8\u547d\u540d\u7a7a\u95f4\u8bbf\u95ee Service\uff0c\u9700\u8981\u4f7f\u7528\u5b8c\u6574\u7684 DNS \u540d\u79f0\uff1a<code>&lt;service-name&gt;.&lt;namespace&gt;.svc.cluster.local<\/code>\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl http:\/\/my-service.my-namespace.svc.cluster.local<\/pre>\n\n\n\n<p>\u793a\u4f8b<\/p>\n\n\n\n<p>\u5047\u8bbe\u6709\u4e00\u4e2a Service \u914d\u7f6e\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Service\nmetadata:\n  name: my-service\n  namespace: my-namespace\nspec:\n  selector:\n    app: my-app\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 8080\n<\/pre>\n\n\n\n<p>\u5728\u540c\u4e00\u547d\u540d\u7a7a\u95f4\u5185\u7684 Pod \u53ef\u4ee5\u901a\u8fc7 <code>my-service<\/code> \u8bbf\u95ee\uff0c\u800c\u5728\u5176\u4ed6\u547d\u540d\u7a7a\u95f4\u5185\u7684 Pod \u5219\u9700\u8981\u901a\u8fc7 <code>my-service.my-namespace.svc.cluster.local<\/code> \u8bbf\u95ee\u3002<\/p>\n\n\n\n<p><strong>\u901a\u8fc7 IP \u5730\u5740\u8bbf\u95ee<\/strong><\/p>\n\n\n\n<p>ClusterIP<\/p>\n\n\n\n<p>\u6bcf\u4e2a Service \u90fd\u6709\u4e00\u4e2a ClusterIP\uff0c\u8fd9\u662f\u96c6\u7fa4\u5185\u90e8\u53ef\u8bbf\u95ee\u7684 IP \u5730\u5740\u3002\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u4e2a IP \u5730\u5740\u6765\u8bbf\u95ee Service\uff0c\u4f46\u8fd9\u79cd\u65b9\u5f0f\u4e0d\u5982\u901a\u8fc7\u540d\u79f0\u8bbf\u95ee\u7075\u6d3b\uff0c\u56e0\u4e3a IP \u5730\u5740\u662f\u56fa\u5b9a\u7684\uff0c\u4ee3\u7801\u4e2d\u786c\u7f16\u7801 IP \u5730\u5740\u4f1a\u964d\u4f4e\u53ef\u79fb\u690d\u6027\u3002<\/p>\n\n\n\n<p>\u83b7\u53d6 ClusterIP\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc get service my-service -o wide<\/pre>\n\n\n\n<p>\u8f93\u51fa\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE\nmy-service   ClusterIP   10.217.5.54     &lt;none>        80\/TCP     1d\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<code>10.217.5.54<\/code> \u662f <code>my-service<\/code> \u7684 ClusterIP\u3002<\/p>\n\n\n\n<p>\u901a\u8fc7 ClusterIP \u8bbf\u95ee\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl http:\/\/10.217.5.54<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a<code>oc new-app<\/code> \u547d\u4ee4\u521b\u5efa\u4e00\u4e2a\u65b0\u5e94\u7528\u65f6\uff0c\u5982\u679c\u4e0d\u6307\u5b9a <code>--name<\/code> \u53c2\u6570\uff0c\u751f\u6210\u540d\u79f0\u662f\u4ec0\u4e48\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 OpenShift \u4e2d\uff0c\u4f7f\u7528 <code>oc new-app<\/code> \u547d\u4ee4\u521b\u5efa\u4e00\u4e2a\u65b0\u5e94\u7528\u65f6\uff0c\u5982\u679c\u4e0d\u6307\u5b9a <code>--name<\/code> \u53c2\u6570\uff0cOpenShift \u5c06\u81ea\u52a8\u751f\u6210\u5e94\u7528\u7684\u540d\u79f0\u3002\u8fd9\u4e2a\u540d\u79f0\u901a\u5e38\u57fa\u4e8e\u4f60\u63d0\u4f9b\u7684\u6e90\u4ee3\u7801\u3001\u955c\u50cf\u6216\u8005\u6a21\u677f\u7684\u540d\u79f0\uff0c\u4f46\u4e5f\u53ef\u80fd\u5728\u5fc5\u8981\u65f6\u6dfb\u52a0\u4e00\u4e9b\u968f\u673a\u5b57\u7b26\u4ee5\u786e\u4fdd\u540d\u79f0\u7684\u552f\u4e00\u6027\u3002<\/p>\n\n\n\n<p>\u793a\u4f8b\uff1a\u4e0d\u6307\u5b9a <code>--name<\/code> \u7684\u60c5\u51b5<\/p>\n\n\n\n<p>\u5047\u8bbe\u4f60\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa\u4e00\u4e2a\u65b0\u5e94\u7528\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc new-app https:\/\/github.com\/openshift\/nodejs-ex<\/pre>\n\n\n\n<p>OpenShift \u5c06\u6839\u636e\u63d0\u4f9b\u7684 Git \u4ed3\u5e93\u540d\u79f0\u751f\u6210\u5e94\u7528\u540d\u79f0\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u5e94\u7528\u540d\u79f0\u5c06\u53ef\u80fd\u662f <code>nodejs-ex<\/code>\u3002<\/p>\n\n\n\n<p>\u81ea\u52a8\u751f\u6210\u540d\u79f0\u7684\u89c4\u5219<\/p>\n\n\n\n<ul>\n<li>\u57fa\u4e8e\u6e90\u4ee3\u7801\u4ed3\u5e93\uff1a\u5982\u679c\u4f60\u63d0\u4f9b\u4e00\u4e2a Git \u4ed3\u5e93 URL\uff0c\u5e94\u7528\u7684\u540d\u79f0\u901a\u5e38\u57fa\u4e8e\u4ed3\u5e93\u540d\u79f0\u3002\u4f8b\u5982\uff0c<code>https:\/\/github.com\/openshift\/nodejs-ex<\/code> \u5c06\u751f\u6210 <code>nodejs-ex<\/code> \u4f5c\u4e3a\u5e94\u7528\u540d\u79f0\u3002<\/li>\n\n\n\n<li>\u57fa\u4e8e\u955c\u50cf\uff1a\u5982\u679c\u4f60\u4f7f\u7528\u955c\u50cf\u521b\u5efa\u5e94\u7528\uff0c\u5e94\u7528\u7684\u540d\u79f0\u901a\u5e38\u57fa\u4e8e\u955c\u50cf\u540d\u79f0\u3002\u4f8b\u5982\uff0c\u4f7f\u7528 <code>oc new-app openshift\/nodejs<\/code>\uff0c\u5e94\u7528\u540d\u79f0\u53ef\u80fd\u662f <code>nodejs<\/code>\u3002<\/li>\n\n\n\n<li>\u57fa\u4e8e\u6a21\u677f\uff1a\u5982\u679c\u4f60\u4f7f\u7528\u6a21\u677f\u521b\u5efa\u5e94\u7528\uff0c\u5e94\u7528\u540d\u79f0\u901a\u5e38\u57fa\u4e8e\u6a21\u677f\u4e2d\u5b9a\u4e49\u7684\u540d\u79f0\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5982\u4f55\u67e5\u770b\u751f\u6210\u7684\u540d\u79f0<\/p>\n\n\n\n<p>\u4f60\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u65b0\u5e94\u7528\u7684\u8d44\u6e90\u540d\u79f0\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc get all<\/pre>\n\n\n\n<p>\u8fd9\u5c06\u5217\u51fa\u5f53\u524d\u547d\u540d\u7a7a\u95f4\u4e2d\u7684\u6240\u6709\u8d44\u6e90\uff0c\u5305\u62ec\u65b0\u521b\u5efa\u7684\u5e94\u7528\u76f8\u5173\u8d44\u6e90\u3002<\/p>\n\n\n\n<p>\u793a\u4f8b\u64cd\u4f5c<\/p>\n\n\n\n<p>1.\u521b\u5efa\u4e00\u4e2a\u65b0\u5e94\u7528\uff0c\u4f46\u4e0d\u6307\u5b9a <code>--name<\/code>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc new-app https:\/\/github.com\/openshift\/nodejs-ex<\/pre>\n\n\n\n<p>2.\u67e5\u770b\u751f\u6210\u7684\u8d44\u6e90\u540d\u79f0\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc get all<\/pre>\n\n\n\n<p>\u793a\u4f8b\u8f93\u51fa\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">NAME                        READY     STATUS    RESTARTS   AGE\npod\/nodejs-ex-1-build       0\/1       Completed 0          2m\npod\/nodejs-ex-1-xxxxx       1\/1       Running   0          1m\n\nNAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE\nservice\/nodejs-ex  ClusterIP   172.30.0.1     &lt;none>        8080\/TCP   2m\n\nNAME                      READY     UP-TO-DATE   AVAILABLE   AGE\ndeployment\/nodejs-ex      1\/1       1            1           2m\n\nNAME                                 DESIRED    CURRENT     READY      AGE\nreplicaset.apps\/nodejs-ex-1          1          1           1          2m\n\nNAME                          REVISION   DESIRED   CURRENT   TRIGGERED BY\ndeploymentconfig.apps\/nodejs-ex     1          1         1       config,image(nodejs-ex:latest)\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u751f\u6210\u7684\u5e94\u7528\u540d\u79f0\u662f <code>nodejs-ex<\/code>\uff0c\u6240\u6709\u76f8\u5173\u8d44\u6e90\uff08\u5982 DeploymentConfig\u3001Service\u3001Pod \u7b49\uff09\u90fd\u4ee5\u8fd9\u4e2a\u540d\u79f0\u547d\u540d\u3002<\/p>\n\n\n\n<p>\u603b\u7ed3<\/p>\n\n\n\n<p>\u5f53\u4f60\u4f7f\u7528 <code>oc new-app<\/code> \u547d\u4ee4\u521b\u5efa\u5e94\u7528\u800c\u4e0d\u6307\u5b9a <code>--name<\/code> \u53c2\u6570\u65f6\uff0cOpenShift \u5c06\u6839\u636e\u8f93\u5165\u7684\u6e90\u4ee3\u7801\u3001\u955c\u50cf\u6216\u6a21\u677f\u81ea\u52a8\u751f\u6210\u5e94\u7528\u540d\u79f0\u3002\u4f60\u53ef\u4ee5\u901a\u8fc7 <code>oc get all<\/code> \u547d\u4ee4\u67e5\u770b\u751f\u6210\u7684\u8d44\u6e90\u540d\u79f0\u53ca\u5176\u72b6\u6001\u3002\u8fd9\u79cd\u81ea\u52a8\u547d\u540d\u673a\u5236\u7b80\u5316\u4e86\u5e94\u7528\u521b\u5efa\u8fc7\u7a0b\uff0c\u7279\u522b\u662f\u5bf9\u4e8e\u5feb\u901f\u5f00\u53d1\u548c\u6d4b\u8bd5\u573a\u666f\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a\u4e0a\u9762\u4f8b\u5b50 pod name \u4e3a\u4ec0\u4e48\u662f nodejs-ex-1-xxxxx\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 OpenShift \u4e2d\uff0c\u5f53\u4f60\u521b\u5efa\u4e00\u4e2a\u5e94\u7528\u65f6\uff0cPod \u7684\u540d\u79f0\u901a\u5e38\u7531\u4ee5\u4e0b\u51e0\u4e2a\u90e8\u5206\u7ec4\u6210\uff1a<\/p>\n\n\n\n<ol>\n<li><strong>\u5e94\u7528\u540d\u79f0<\/strong>\uff1a\u4f8b\u5982 <code>nodejs-ex<\/code>\uff0c\u8fd9\u662f\u4f60\u521b\u5efa\u5e94\u7528\u65f6\u6307\u5b9a\u7684\u540d\u79f0\u6216 OpenShift \u81ea\u52a8\u751f\u6210\u7684\u540d\u79f0\u3002<\/li>\n\n\n\n<li><strong>\u7248\u672c\u53f7<\/strong>\uff1a\u4f8b\u5982 <code>1<\/code>\uff0c\u8868\u793a DeploymentConfig \u7684\u5f53\u524d\u7248\u672c\u53f7\u3002<\/li>\n\n\n\n<li><strong>\u968f\u673a\u540e\u7f00<\/strong>\uff1a\u4f8b\u5982 <code>xxxxx<\/code>\uff0c\u662f\u4e00\u4e2a\u968f\u673a\u751f\u6210\u7684\u5b57\u7b26\u4e32\uff0c\u7528\u4e8e\u786e\u4fdd Pod \u540d\u79f0\u7684\u552f\u4e00\u6027\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5177\u4f53\u540d\u79f0\u6784\u6210<\/p>\n\n\n\n<p>\u8ba9\u6211\u4eec\u8be6\u7ec6\u89e3\u91ca\u8fd9\u4e2a\u540d\u79f0 <code>nodejs-ex-1-xxxxx<\/code>\uff1a<\/p>\n\n\n\n<ul>\n<li><code>nodejs-ex<\/code>\uff1a\u5e94\u7528\u540d\u79f0\u3002\u8fd9\u662f\u4f60\u5728\u521b\u5efa\u5e94\u7528\u65f6\u7531 <code>oc new-app<\/code> \u547d\u4ee4\u751f\u6210\u7684\u540d\u79f0\u3002<\/li>\n\n\n\n<li><code>1<\/code>\uff1a\u7248\u672c\u53f7\u3002\u8868\u793a\u8fd9\u662f DeploymentConfig \u7684\u7b2c\u4e00\u4e2a\u7248\u672c\u3002\u5f53\u4f60\u5bf9 DeploymentConfig \u8fdb\u884c\u4fee\u6539\uff08\u4f8b\u5982\u66f4\u65b0\u955c\u50cf\u3001\u4fee\u6539\u73af\u5883\u53d8\u91cf\u7b49\uff09\uff0c\u7248\u672c\u53f7\u4f1a\u9012\u589e\u3002<\/li>\n\n\n\n<li><code>xxxxx<\/code>\uff1a\u968f\u673a\u540e\u7f00\u3002\u8fd9\u662f\u4e00\u4e2a\u968f\u673a\u751f\u6210\u7684\u5b57\u7b26\u4e32\uff0c\u7528\u4e8e\u786e\u4fdd Pod \u540d\u79f0\u7684\u552f\u4e00\u6027\u3002\u8fd9\u6837\u53ef\u4ee5\u907f\u514d\u547d\u540d\u51b2\u7a81\uff0c\u7279\u522b\u662f\u5728\u6eda\u52a8\u66f4\u65b0\u6216\u6269\u5c55 Pod \u7684\u65f6\u5019\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5047\u8bbe\u4f60\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa\u4e00\u4e2a\u5e94\u7528\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc new-app https:\/\/github.com\/openshift\/nodejs-ex<\/pre>\n\n\n\n<p>OpenShift \u5c06\u521b\u5efa\u76f8\u5173\u8d44\u6e90\uff0c\u5e76\u751f\u6210 DeploymentConfig \u540d\u79f0\u4e3a <code>nodejs-ex<\/code>\u3002\u7b2c\u4e00\u6b21\u521b\u5efa\u65f6\uff0c\u7248\u672c\u53f7\u4e3a <code>1<\/code>\u3002\u751f\u6210\u7684 Pod \u540d\u79f0\u53ef\u80fd\u7c7b\u4f3c\u4e8e <code>nodejs-ex-1-xxxxx<\/code>\uff0c\u5176\u4e2d <code>xxxxx<\/code> \u662f\u968f\u673a\u751f\u6210\u7684\u5b57\u7b26\u4e32\u3002<\/p>\n\n\n\n<p>DeploymentConfig \u548c Pod \u540d\u79f0<\/p>\n\n\n\n<p>\u6bcf\u6b21\u4f60\u5bf9 DeploymentConfig \u8fdb\u884c\u4fee\u6539\u65f6\uff0c\u4f8b\u5982\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc set env dc\/nodejs-ex MY_VAR=my_value<\/pre>\n\n\n\n<p>DeploymentConfig \u7684\u7248\u672c\u53f7\u5c06\u9012\u589e\u3002\u4f8b\u5982\uff0c\u4ece <code>1<\/code> \u9012\u589e\u5230 <code>2<\/code>\u3002\u65b0\u521b\u5efa\u7684 Pod \u540d\u79f0\u5c06\u53d8\u4e3a <code>nodejs-ex-2-yyyyy<\/code>\uff0c\u5176\u4e2d <code>yyyyy<\/code> \u662f\u53e6\u4e00\u4e2a\u968f\u673a\u751f\u6210\u7684\u5b57\u7b26\u4e32\u3002<\/p>\n\n\n\n<p>\u793a\u4f8b<\/p>\n\n\n\n<p>1.\u521d\u59cb\u521b\u5efa\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc new-app https:\/\/github.com\/openshift\/nodejs-ex<\/pre>\n\n\n\n<ol>\n<li><\/li>\n<\/ol>\n\n\n\n<p>\u521b\u5efa\u7684\u8d44\u6e90\u548c Pod\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">NAME                             READY     STATUS    RESTARTS   AGE\npod\/nodejs-ex-1-abcde            1\/1       Running   0          1m\n<\/pre>\n\n\n\n<p>2.\u4fee\u6539 DeploymentConfig\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc set env dc\/nodejs-ex MY_VAR=my_value<\/pre>\n\n\n\n<p>\u65b0\u7248\u672c\u7684 Pod\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">NAME                             READY     STATUS    RESTARTS   AGE\npod\/nodejs-ex-2-fghij            1\/1       Running   0          1m<\/pre>\n\n\n\n<p>\u5728 OpenShift \u4e2d\uff0cPod \u7684\u540d\u79f0\u7531\u5e94\u7528\u540d\u79f0\u3001\u7248\u672c\u53f7\u548c\u968f\u673a\u540e\u7f00\u7ec4\u6210\u3002\u5e94\u7528\u540d\u79f0\u662f\u4f60\u5728\u521b\u5efa\u5e94\u7528\u65f6\u6307\u5b9a\u7684\uff0c\u7248\u672c\u53f7\u8868\u793a DeploymentConfig \u7684\u5f53\u524d\u7248\u672c\uff0c\u6bcf\u6b21\u4fee\u6539 DeploymentConfig \u65f6\u4f1a\u9012\u589e\uff0c\u968f\u673a\u540e\u7f00\u786e\u4fdd Pod \u540d\u79f0\u7684\u552f\u4e00\u6027\u3002\u901a\u8fc7\u8fd9\u79cd\u547d\u540d\u673a\u5236\uff0c\u53ef\u4ee5\u6709\u6548\u5730\u7ba1\u7406\u548c\u533a\u5206\u540c\u4e00\u4e2a\u5e94\u7528\u7684\u4e0d\u540c\u7248\u672c\u53ca\u5176\u5bf9\u5e94\u7684 Pod\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a\u4e3a\u4ec0\u4e48\u4fee\u6539\u5b8c\u63a2\u9488\uff0c\u4f1a\u591a\u4e00\u4e2apod\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u4e0b\u9762\u7684nodejs\u4ee3\u7801\uff0c\u901a\u8fc7oc\u547d\u4ee4\u521b\u5efaapp<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const express = require('express');\n\nconst app = express();\nconst port = 3000;\n\napp.get('\/test', (req, res) => {\n  return res.status(200).send('hello world');\n});\n\n\/\/ \u542f\u52a8\u670d\u52a1\u5668\napp.listen(port, () => {\n  console.log(`\u670d\u52a1\u5668\u8fd0\u884c\u5728 http:\/\/localhost:${port}`);\n});<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc new-app --name demo http:\/\/xxxxxx\/demo<\/pre>\n\n\n\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u63a7\u5236\u53f0\uff0c\u4fee\u6539deployment\u6dfb\u52a0\u63a2\u9488probe<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-1024x551.png\" alt=\"\" class=\"wp-image-15477\" style=\"width:488px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-1024x551.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-300x162.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-768x414.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-1536x827.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-2048x1103.png 2048w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-830x447.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-230x124.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-350x188.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-5-480x258.png 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>\u6dfb\u52a0\u4e00\u4e2areadiness \u63a2\u9488\uff0c\u6545\u610f\u628aurl\u5199\u9519\u6210test1\uff08\u6b63\u786e\u5e94\u8be5\u662ftest\uff09<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"805\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-1024x805.png\" alt=\"\" class=\"wp-image-15478\" style=\"width:504px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-1024x805.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-300x236.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-768x603.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-1536x1207.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-2048x1609.png 2048w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-830x652.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-230x181.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-350x275.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-6-480x377.png 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>\u4fdd\u5b58\u63a2\u9488\u4ee5\u540e\uff0c\u4f1a\u53d1\u73b0\u591a\u4e86\u4e00\u4e2apod<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"387\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-1024x387.png\" alt=\"\" class=\"wp-image-15479\" style=\"width:522px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-1024x387.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-300x114.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-768x291.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-1536x581.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-2048x775.png 2048w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-830x314.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-230x87.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-350x132.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-7-480x182.png 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>\u8fd9\u662f\u56e0\u4e3a\uff0c\u5f53\u4f60\u4fee\u6539\u4e0e deployment \u76f8\u5173\u7684\u914d\u7f6e\uff08\u4f8b\u5982\u63a2\u9488\u914d\u7f6e\uff09\u65f6\uff0c\u63a7\u5236\u5668\u4f1a\u89e6\u53d1\u6eda\u52a8\u66f4\u65b0\u8fc7\u7a0b\u3002\u8fd9\u79cd\u673a\u5236\u4f1a\u521b\u5efa\u65b0\u7684 Pod \u6765\u5e94\u7528\u65b0\u7684\u914d\u7f6e\uff0c\u5e76\u9010\u6b65\u66ff\u6362\u65e7\u7684 Pod\u3002<\/p>\n\n\n\n<p>\u5982\u679c\u65b0 Pod \u7684\u63a2\u9488\u914d\u7f6e\u4e0d\u6b63\u786e\uff0c\u53ef\u80fd\u5bfc\u81f4\u65b0 Pod \u4e0d\u80fd\u8fdb\u5165 Running \u72b6\u6001\uff0c\u4ece\u800c\u963b\u6b62\u65e7 Pod \u7684\u7ec8\u6b62\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u67e5\u770b\u4e00\u4e0b\u65b0pod\u72b6\u6001<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc describe pod demo-75c47bd8c9-fdhjn<\/pre>\n\n\n\n<p>\u53ef\u4ee5\u770b\u5230\u5728pod events\u91cc\u9762\uff0c\u63a2\u9488\u68c0\u6d4b\u662f\u5931\u8d25\u7684\uff0c\u5bfc\u81f4\u65b0pod\u6ca1\u6709\u5c31\u7eea\uff0c\u65e7pod\u6ca1\u6709\u88ab\u5220\u9664<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"467\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-1024x467.png\" alt=\"\" class=\"wp-image-15480\" style=\"width:482px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-1024x467.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-300x137.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-768x350.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-1536x701.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-2048x934.png 2048w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-830x379.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-230x105.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-350x160.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-8-480x219.png 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>\u628a\u63a2\u9488path\u6539\u6210\u6b63\u786e\u7684\uff0c\u5e76\u4e14\u4fdd\u5b58\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"626\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-1024x626.png\" alt=\"\" class=\"wp-image-15481\" style=\"width:496px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-1024x626.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-300x183.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-768x469.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-1536x939.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-2048x1252.png 2048w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-830x507.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-230x141.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-350x214.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-9-480x293.png 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>\u5c31\u5269\u4e00\u4e2a\u65b0pod\u4e86\uff0c\u65e7pod\u88ab\u5220\u9664\u6389\u4e86\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"452\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-1024x452.png\" alt=\"\" class=\"wp-image-15482\" style=\"width:500px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-1024x452.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-300x132.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-768x339.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-1536x677.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-2048x903.png 2048w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-830x366.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-230x101.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-350x154.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/06\/\u56fe\u7247-10-480x212.png 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1aopenshift \u53ef\u4ee5\u53ea\u521b\u5efapod\u5417\uff1f \u4e5f\u5c31\u662f\u4e0d\u521b\u5efaDeployment \u6216\u8005 DeploymentConfig \u7b49\u7b49\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 OpenShift \u548c Kubernetes \u4e2d\uff0c\u867d\u7136\u76f4\u63a5\u521b\u5efa\u72ec\u7acb\u7684 Pod \u662f\u6280\u672f\u4e0a\u53ef\u884c\u7684\uff0c\u4f46\u8fd9\u4e0d\u662f\u63a8\u8350\u7684\u505a\u6cd5\u3002\u539f\u56e0\u662f\u76f4\u63a5\u521b\u5efa\u7684 Pod \u6ca1\u6709\u81ea\u6211\u4fee\u590d\u80fd\u529b\uff0c\u5373\u5982\u679c Pod \u56e0\u67d0\u79cd\u539f\u56e0\u5d29\u6e83\u6216\u88ab\u5220\u9664\uff0c\u5b83\u4e0d\u4f1a\u81ea\u52a8\u91cd\u65b0\u521b\u5efa\u3002\u56e0\u6b64\uff0c\u901a\u5e38\u4f1a\u4f7f\u7528 Deployment \u6216 DeploymentConfig \u6765\u7ba1\u7406 Pod\uff0c\u4ece\u800c\u5b9e\u73b0\u81ea\u52a8\u91cd\u542f\u3001\u6269\u5c55\u548c\u6eda\u52a8\u66f4\u65b0\u7b49\u529f\u80fd\u3002<\/p>\n\n\n\n<p>\u4e0d\u8fc7\uff0c\u5982\u679c\u4f60\u786e\u5b9e\u9700\u8981\u76f4\u63a5\u521b\u5efa\u4e00\u4e2a\u72ec\u7acb\u7684 Pod\uff0c\u53ef\u4ee5\u4f7f\u7528 <code>oc run<\/code> \u6216 <code>oc create<\/code> \u547d\u4ee4\u6765\u5b9e\u73b0\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<p><strong>\u4f7f\u7528 <code>oc run<\/code> \u547d\u4ee4\u521b\u5efa Pod<\/strong><\/p>\n\n\n\n<p><code>oc run<\/code> \u662f\u4e00\u4e2a\u5feb\u6377\u65b9\u5f0f\u547d\u4ee4\uff0c\u65e2\u53ef\u4ee5\u7528\u6765\u521b\u5efa Deployment\uff0c\u4e5f\u53ef\u4ee5\u7528\u6765\u521b\u5efa Pod\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc run mypod --image=nginx --restart=Never<\/pre>\n\n\n\n<ul>\n<li><code>mypod<\/code> \u662f Pod \u7684\u540d\u79f0\u3002<\/li>\n\n\n\n<li><code>--image=nginx<\/code> \u6307\u5b9a\u4f7f\u7528\u7684\u955c\u50cf\u3002<\/li>\n\n\n\n<li><code>--restart=Never<\/code> \u8868\u793a\u4e0d\u4f7f\u7528\u63a7\u5236\u5668\u6765\u7ba1\u7406 Pod\uff0c\u4ece\u800c\u521b\u5efa\u4e00\u4e2a\u72ec\u7acb\u7684 Pod\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528 <code>oc create<\/code> \u547d\u4ee4\u521b\u5efa Pod<\/strong><\/p>\n\n\n\n<p>\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7 YAML \u6587\u4ef6\u5b9a\u4e49 Pod \u5e76\u4f7f\u7528 <code>oc create<\/code> \u547d\u4ee4\u521b\u5efa\u3002<\/p>\n\n\n\n<p>\u793a\u4f8b YAML \u6587\u4ef6 <code>mypod.yaml<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Pod\nmetadata:\n  name: mypod\nspec:\n  containers:\n    - name: mycontainer\n      image: nginx\n      ports:\n        - containerPort: 80\n<\/pre>\n\n\n\n<p><strong>\u521b\u5efa Pod<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc create -f mypod.yaml<\/pre>\n\n\n\n<p><strong>\u67e5\u770b\u548c\u7ba1\u7406 Pod<\/strong><\/p>\n\n\n\n<p>\u521b\u5efa Pod \u540e\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b Pod \u7684\u72b6\u6001\u548c\u65e5\u5fd7\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc get pods\noc describe pod mypod\noc logs mypod<\/pre>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong><\/p>\n\n\n\n<ul>\n<li>\u76f4\u63a5\u521b\u5efa Pod\uff1a\u867d\u7136\u53ef\u4ee5\u901a\u8fc7 <code>oc run<\/code> \u548c <code>oc create<\/code> \u547d\u4ee4\u76f4\u63a5\u521b\u5efa Pod\uff0c\u4f46\u4e0d\u63a8\u8350\u8fd9\u79cd\u65b9\u5f0f\u7528\u4e8e\u751f\u4ea7\u73af\u5883\uff0c\u56e0\u4e3a\u5b83\u7f3a\u4e4f\u81ea\u6211\u4fee\u590d\u548c\u7ba1\u7406\u80fd\u529b\u3002<\/li>\n\n\n\n<li>\u63a8\u8350\u65b9\u5f0f\uff1a\u4f7f\u7528 Deployment \u6216 DeploymentConfig \u6765\u521b\u5efa\u548c\u7ba1\u7406 Pod\uff0c\u63d0\u4f9b\u81ea\u52a8\u91cd\u542f\u3001\u6269\u5c55\u548c\u6eda\u52a8\u66f4\u65b0\u7b49\u529f\u80fd\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u76f4\u63a5\u521b\u5efa Pod \u9002\u7528\u4e8e\u6d4b\u8bd5\u548c\u5b9e\u9a8c\u73af\u5883\uff0c\u4f46\u5728\u5b9e\u9645\u751f\u4ea7\u73af\u5883\u4e2d\uff0c\u4f7f\u7528\u66f4\u9ad8\u5c42\u6b21\u7684\u63a7\u5236\u5668\u6765\u7ba1\u7406 Pod \u662f\u66f4\u4e3a\u5b89\u5168\u548c\u53ef\u9760\u7684\u505a\u6cd5\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1aopenshift\u4e2d\uff0cpipeline\u7684 Trigger,  TriggerBinding, TriggerTemplate\u533a\u522b<\/strong>?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 OpenShift Pipelines\uff08\u57fa\u4e8e Tekton\uff09\u7684\u4e0a\u4e0b\u6587\u4e2d\uff0c<code>Trigger<\/code>, <code>TriggerBinding<\/code>, \u548c <code>TriggerTemplate<\/code> \u662f\u7528\u4e8e\u81ea\u52a8\u89e6\u53d1 CI\/CD \u7ba1\u9053\u7684\u7ec4\u4ef6\u3002\u5b83\u4eec\u5404\u81ea\u6709\u4e0d\u540c\u7684\u529f\u80fd\uff0c\u4f46\u5171\u540c\u4f5c\u7528\u4ee5\u54cd\u5e94\u67d0\u4e9b\u4e8b\u4ef6\u6765\u542f\u52a8\u4e00\u4e2a Pipeline\u3002<\/p>\n\n\n\n<p>1. <strong>Trigger<\/strong><\/p>\n\n\n\n<p><code>Trigger<\/code> \u662f\u7528\u6765\u7ec4\u5408 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code> \u7684\u7ec4\u4ef6\u3002\u5b83\u5b9a\u4e49\u4e86\u5728\u89e6\u53d1\u4e8b\u4ef6\u53d1\u751f\u65f6\u5982\u4f55\u4f7f\u7528\u7ed1\u5b9a\u7684\u53c2\u6570\u548c\u6a21\u677f\u6765\u521b\u5efa\u8d44\u6e90\uff08\u5982 PipelineRun\uff09\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u529f\u80fd<\/strong>\uff1a\u51b3\u5b9a\u4f55\u65f6\u4ee5\u53ca\u5982\u4f55\u89e6\u53d1 Pipeline \u8fd0\u884c\u3002<\/li>\n\n\n\n<li><strong>\u4f5c\u7528<\/strong>\uff1a\u4e0e <code>EventListener<\/code> \u914d\u5408\u4f7f\u7528\uff0c\u4ee5\u4fbf\u5728\u63a5\u6536\u5230\u67d0\u4e2a\u4e8b\u4ef6\u65f6\u89e6\u53d1\u4e00\u4e2a\u7279\u5b9a\u7684 Pipeline \u8fd0\u884c\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: Trigger\nmetadata:\n  name: example-trigger\nspec:\n  bindings:\n    - ref: example-binding\n  template:\n    ref: example-template<\/pre>\n\n\n\n<p>2. <strong>TriggerBinding<\/strong><\/p>\n\n\n\n<p><code>TriggerBinding<\/code> \u662f\u7528\u6765\u5b9a\u4e49\u5982\u4f55\u4ece\u4e8b\u4ef6\u8d1f\u8f7d\u4e2d\u63d0\u53d6\u4fe1\u606f\u5e76\u5c06\u5176\u6620\u5c04\u5230 Pipeline \u7684\u53c2\u6570\u3002\u5b83\u63d0\u53d6\u4e8b\u4ef6\u4e2d\u7684\u4fe1\u606f\uff0c\u5e76\u5c06\u8fd9\u4e9b\u4fe1\u606f\u4e0e <code>TriggerTemplate<\/code> \u4e2d\u5b9a\u4e49\u7684\u53c2\u6570\u76f8\u5bf9\u5e94\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u529f\u80fd<\/strong>\uff1a\u5c06\u4e8b\u4ef6\u4e2d\u7684\u6570\u636e\u7ed1\u5b9a\u5230\u6a21\u677f\u4e2d\u7684\u53c2\u6570\u3002<\/li>\n\n\n\n<li><strong>\u4f5c\u7528<\/strong>\uff1a\u5141\u8bb8\u4ece\u4e8b\u4ef6\u4e2d\u63d0\u53d6\u503c\u5e76\u4f20\u9012\u7ed9 Pipeline\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u793a\u4f8b<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: TriggerBinding\nmetadata:\n  name: example-binding\nspec:\n  params:\n    - name: git-repo-url\n      value: $(body.repository.url)\n    - name: git-revision\n      value: $(body.head_commit.id)<\/pre>\n\n\n\n<p>3. <strong>TriggerTemplate<\/strong><\/p>\n\n\n\n<p><code>TriggerTemplate<\/code> \u5b9a\u4e49\u4e86\u5728 Pipeline \u88ab\u89e6\u53d1\u65f6\u5e94\u8be5\u521b\u5efa\u7684\u8d44\u6e90\u3002\u5b83\u901a\u5e38\u5305\u62ec <code>PipelineRun<\/code> \u7684\u5b9a\u4e49\uff0c\u5e76\u4f7f\u7528\u6765\u81ea <code>TriggerBinding<\/code> \u7684\u53c2\u6570\u6765\u586b\u5145\u5b57\u6bb5\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u529f\u80fd<\/strong>\uff1a\u5b9a\u4e49\u4e8b\u4ef6\u89e6\u53d1\u65f6\u521b\u5efa\u7684\u8d44\u6e90\uff0c\u5982 <code>PipelineRun<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u4f5c\u7528<\/strong>\uff1a\u6a21\u677f\u5316 Pipeline \u8fd0\u884c\u7684\u5b9a\u4e49\uff0c\u4f7f\u7528\u7ed1\u5b9a\u7684\u53c2\u6570\u6765\u52a8\u6001\u751f\u6210\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u793a\u4f8b<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: TriggerTemplate\nmetadata:\n  name: example-template\nspec:\n  params:\n    - name: git-repo-url\n    - name: git-revision\n  resourcetemplates:\n    - apiVersion: tekton.dev\/v1beta1\n      kind: PipelineRun\n      metadata:\n        generateName: example-pipeline-run-\n      spec:\n        pipelineRef:\n          name: example-pipeline\n        params:\n          - name: git-repo-url\n            value: $(params.git-repo-url)\n          - name: git-revision\n            value: $(params.git-revision)<\/pre>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>Trigger<\/strong>: \u5b9a\u4e49\u4e86\u4e8b\u4ef6\u89e6\u53d1\u65f6\u5982\u4f55\u7ec4\u5408 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code>\uff0c\u4ee5\u53ca\u89e6\u53d1\u7684\u6761\u4ef6\u3002<\/li>\n\n\n\n<li><strong>TriggerBinding<\/strong>: \u4ece\u4e8b\u4ef6\u4e2d\u63d0\u53d6\u6570\u636e\uff0c\u5e76\u5c06\u5176\u6620\u5c04\u5230 <code>TriggerTemplate<\/code> \u7684\u53c2\u6570\u3002<\/li>\n\n\n\n<li><strong>TriggerTemplate<\/strong>: \u4f7f\u7528 <code>TriggerBinding<\/code> \u4e2d\u7684\u53c2\u6570\uff0c\u5b9a\u4e49\u4e8b\u4ef6\u89e6\u53d1\u65f6\u9700\u8981\u521b\u5efa\u7684\u8d44\u6e90\uff08\u5982 <code>PipelineRun<\/code>\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5b83\u4eec\u4e00\u8d77\u5de5\u4f5c\uff0c\u80fd\u591f\u52a8\u6001\u54cd\u5e94\u4e8b\u4ef6\u5e76\u81ea\u52a8\u89e6\u53d1 CI\/CD \u7ba1\u9053\u3002<\/p>\n\n\n\n<p>\u8865\u5145\uff1a<\/p>\n\n\n\n<p>OpenShift\u8fd0\u884c\u73af\u5883\u4e2dEventListener\u3002<br>EventListener\u8fd0\u884c\u5728Pod\u4e2d\uff0c\u5176Service\u5bf9\u5e94\u7684Route\u5730\u5740\u5c31\u662fGithub\u4e2d\u4f7f\u7528\u7684Webhook URL\u5730\u5740\u3002<br>EventListener\u4f1a\u5c06\u56de\u8c03\u53c2\u6570\u901a\u8fc7TriggerBinding\u4f20\u7ed9TriggerTemplate\uff0cTriggerTemplate\u518d\u4f7f\u7528\u81ea\u5df1\u5b9a\u4e49\u7684Pipeline\u8fd0\u884cCI\/CD\u8fc7\u7a0b\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"344\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-1024x344.png\" alt=\"\" class=\"wp-image-16155\" style=\"width:562px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-1024x344.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-300x101.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-768x258.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-1536x515.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-830x279.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-230x77.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-350x117.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4-480x161.png 480w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-4.png 1800w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a\u5728 OpenShift Pipelines\uff08\u57fa\u4e8e Tekton\uff09\u7684\u73af\u5883\u4e2d\uff0c<code>Trigger<\/code> \u548c <code>Pipeline<\/code> \u5173\u7cfb<\/strong>\uff1f<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 OpenShift Pipelines\uff08\u57fa\u4e8e Tekton\uff09\u7684\u73af\u5883\u4e2d\uff0c<code>Trigger<\/code> \u548c <code>Pipeline<\/code> \u662f\u4e24\u4e2a\u6838\u5fc3\u7ec4\u4ef6\uff0c\u4f46\u5b83\u4eec\u7684\u4f5c\u7528\u548c\u7528\u9014\u662f\u4e0d\u540c\u7684\u3002\u4ee5\u4e0b\u662f\u5b83\u4eec\u7684\u533a\u522b\u548c\u76f8\u4e92\u5173\u7cfb\uff1a<\/p>\n\n\n\n<p>1. <strong>Pipeline<\/strong><\/p>\n\n\n\n<p><code>Pipeline<\/code> \u662f\u4e00\u4e2a\u5b9a\u4e49\u4e86\u4e00\u7cfb\u5217\u4efb\u52a1\uff08Tasks\uff09\u548c\u6b65\u9aa4\uff08Steps\uff09\u7684\u7ec4\u4ef6\uff0c\u7528\u4e8e\u6784\u5efa\u3001\u6d4b\u8bd5\u3001\u90e8\u7f72\u5e94\u7528\u7a0b\u5e8f\u6216\u6267\u884c\u5176\u4ed6\u81ea\u52a8\u5316\u6d41\u7a0b\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u529f\u80fd<\/strong>\uff1a\u5b9a\u4e49\u4e86\u4e00\u4e2a CI\/CD \u5de5\u4f5c\u6d41\uff0c\u5b83\u7531\u591a\u4e2a\u4efb\u52a1\u7ec4\u6210\uff0c\u8fd9\u4e9b\u4efb\u52a1\u53ef\u4ee5\u6309\u987a\u5e8f\u6216\u5e76\u884c\u6267\u884c\u3002<\/li>\n\n\n\n<li><strong>\u4f5c\u7528<\/strong>\uff1a<code>Pipeline<\/code> \u662f\u5b9e\u9645\u6267\u884c\u5de5\u4f5c\u6d41\u7684\u4e3b\u4f53\u3002\u6bcf\u4e2a <code>Task<\/code> \u53ef\u4ee5\u6267\u884c\u4e00\u9879\u7279\u5b9a\u7684\u64cd\u4f5c\uff0c\u5982\u6784\u5efa\u955c\u50cf\u3001\u8fd0\u884c\u6d4b\u8bd5\u3001\u90e8\u7f72\u5e94\u7528\u7b49\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u793a\u4f8b<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: tekton.dev\/v1beta1\nkind: Pipeline\nmetadata:\n  name: example-pipeline\nspec:\n  tasks:\n  - name: build-task\n    taskRef:\n      name: build-task\n  - name: test-task\n    taskRef:\n      name: test-task\n  - name: deploy-task\n    taskRef:\n      name: deploy-task\n    runAfter:\n    - test-task<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<code>Pipeline<\/code> \u5b9a\u4e49\u4e86\u4e00\u4e2a\u5305\u542b\u4e09\u4e2a\u4efb\u52a1\u7684\u5de5\u4f5c\u6d41\uff0c\u5206\u522b\u7528\u4e8e\u6784\u5efa\u3001\u6d4b\u8bd5\u548c\u90e8\u7f72\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"544\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-1024x544.png\" alt=\"\" class=\"wp-image-16161\" style=\"width:454px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-1024x544.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-300x159.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-768x408.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-1536x816.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-830x441.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-230x122.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-350x186.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8-480x255.png 480w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-8.png 1746w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>2. <strong>Trigger<\/strong><\/p>\n\n\n\n<p><code>Trigger<\/code> \u662f\u4e00\u79cd\u673a\u5236\uff0c\u7528\u4e8e\u6839\u636e\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Git \u63d0\u4ea4\u3001Webhook \u89e6\u53d1\u7b49\uff09\u81ea\u52a8\u542f\u52a8 <code>Pipeline<\/code>\u3002\u5b83\u8d1f\u8d23\u76d1\u542c\u4e8b\u4ef6\uff0c\u5e76\u51b3\u5b9a\u4f55\u65f6\u3001\u5982\u4f55\u89e6\u53d1 <code>Pipeline<\/code> \u8fd0\u884c\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u529f\u80fd<\/strong>\uff1a<code>Trigger<\/code> \u901a\u8fc7\u7ed1\u5b9a\u4e8b\u4ef6\u548c <code>Pipeline<\/code>\uff0c\u4f7f\u5f97 <code>Pipeline<\/code> \u53ef\u4ee5\u5728\u6ee1\u8db3\u7279\u5b9a\u6761\u4ef6\u65f6\u81ea\u52a8\u8fd0\u884c\uff0c\u800c\u4e0d\u9700\u8981\u624b\u52a8\u89e6\u53d1\u3002<\/li>\n\n\n\n<li><strong>\u4f5c\u7528<\/strong>\uff1a<code>Trigger<\/code> \u914d\u5408 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code>\uff0c\u76d1\u542c\u5916\u90e8\u4e8b\u4ef6\u5e76\u81ea\u52a8\u89e6\u53d1 <code>Pipeline<\/code> \u8fd0\u884c\u3002\u5b83\u5c06\u4e8b\u4ef6\u6570\u636e\u4f20\u9012\u7ed9 <code>Pipeline<\/code> \u4f5c\u4e3a\u53c2\u6570\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5de5\u4f5c\u6d41\u7a0b<\/strong>\uff1a<\/p>\n\n\n\n<ol>\n<li><strong>\u4e8b\u4ef6\u53d1\u751f<\/strong>\uff1a\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Git \u63a8\u9001\uff09\u89e6\u53d1 <code>Trigger<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u6570\u636e\u7ed1\u5b9a<\/strong>\uff1a<code>TriggerBinding<\/code> \u4ece\u4e8b\u4ef6\u4e2d\u63d0\u53d6\u76f8\u5173\u6570\u636e\u3002<\/li>\n\n\n\n<li><strong>\u6a21\u677f\u586b\u5145<\/strong>\uff1a<code>TriggerTemplate<\/code> \u4f7f\u7528\u8fd9\u4e9b\u6570\u636e\u751f\u6210 <code>PipelineRun<\/code> \u7684\u5b9a\u4e49\u3002<\/li>\n\n\n\n<li><strong>\u89e6\u53d1 Pipeline<\/strong>\uff1a\u6700\u7ec8\uff0c<code>Trigger<\/code> \u521b\u5efa\u5e76\u8fd0\u884c <code>PipelineRun<\/code>\uff0c\u542f\u52a8 <code>Pipeline<\/code> \u7684\u6267\u884c\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>Pipeline<\/strong> \u662f\u5b9a\u4e49 CI\/CD \u5de5\u4f5c\u6d41\u7684\u7ec4\u4ef6\uff0c\u5305\u542b\u4e86\u5177\u4f53\u7684\u6784\u5efa\u3001\u6d4b\u8bd5\u3001\u90e8\u7f72\u4efb\u52a1\u3002\u5b83\u662f\u5b9e\u9645\u6267\u884c\u5de5\u4f5c\u7684\u4e3b\u4f53\u3002<\/li>\n\n\n\n<li><strong>Trigger<\/strong> \u662f\u4e00\u4e2a\u89e6\u53d1\u673a\u5236\uff0c\u7528\u4e8e\u6839\u636e\u5916\u90e8\u4e8b\u4ef6\u81ea\u52a8\u542f\u52a8 <code>Pipeline<\/code>\uff0c\u4ece\u800c\u5b9e\u73b0\u81ea\u52a8\u5316\u7684 CI\/CD \u6d41\u7a0b\u3002<\/li>\n<\/ul>\n\n\n\n<p><code>Trigger<\/code> \u901a\u8fc7 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code> \u4f7f\u5f97 <code>Pipeline<\/code> \u53ef\u4ee5\u5728\u7279\u5b9a\u4e8b\u4ef6\u53d1\u751f\u65f6\u81ea\u52a8\u8fd0\u884c\uff0c\u800c <code>Pipeline<\/code> \u5219\u8d1f\u8d23\u5b9a\u4e49\u5177\u4f53\u7684\u5de5\u4f5c\u6d41\u6b65\u9aa4\u548c\u4efb\u52a1\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"541\" src=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-1024x541.png\" alt=\"\" class=\"wp-image-16159\" style=\"width:538px;height:auto\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-1024x541.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-300x158.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-768x406.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-1536x811.png 1536w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-830x438.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-230x121.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-350x185.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6-480x253.png 480w, https:\/\/92it.top\/wp-content\/uploads\/2024\/08\/image-6.png 1886w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1aTrigger \u548c Pipeline \u5982\u4f55\u4f20\u9012\u53c2\u6570<\/strong>\uff1f<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 OpenShift Pipelines\uff08\u57fa\u4e8e Tekton\uff09\u4e2d\uff0c<code>Trigger<\/code> \u548c <code>Pipeline<\/code> \u7684\u53c2\u6570\u4f20\u9012\u662f\u4e00\u4e2a\u5173\u952e\u7684\u673a\u5236\uff0c\u7528\u4e8e\u5c06\u6765\u81ea\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Git \u63d0\u4ea4\uff09\u4e2d\u7684\u4fe1\u606f\u4f20\u9012\u7ed9 <code>Pipeline<\/code>\uff0c\u4ee5\u4fbf\u5728\u8fd0\u884c\u65f6\u8fdb\u884c\u52a8\u6001\u914d\u7f6e\u3002\u4ee5\u4e0b\u662f\u53c2\u6570\u4f20\u9012\u7684\u8be6\u7ec6\u6d41\u7a0b\u548c\u793a\u4f8b\uff1a<\/p>\n\n\n\n<p>1. <strong>Pipeline \u5b9a\u4e49\u53c2\u6570<\/strong><\/p>\n\n\n\n<p>\u9996\u5148\uff0c\u5728 <code>Pipeline<\/code> \u4e2d\u5b9a\u4e49\u53c2\u6570\u3002\u8fd9\u4e9b\u53c2\u6570\u53ef\u4ee5\u5728 <code>PipelineRun<\/code> \u8fd0\u884c\u65f6\u52a8\u6001\u4f20\u5165\u3002<\/p>\n\n\n\n<p><strong>\u793a\u4f8b\uff1a\u5b9a\u4e49\u4e00\u4e2a <code>Pipeline<\/code> \u5e76\u6dfb\u52a0\u53c2\u6570<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: tekton.dev\/v1beta1\nkind: Pipeline\nmetadata:\n  name: example-pipeline\nspec:\n  params:\n    - name: git-repo-url\n      type: string\n      description: The URL of the Git repository\n    - name: git-revision\n      type: string\n      description: The Git revision to build\n      default: main\n  tasks:\n    - name: build\n      taskRef:\n        name: build-task\n      params:\n        - name: repo-url\n          value: $(params.git-repo-url)\n        - name: revision\n          value: $(params.git-revision)\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<code>Pipeline<\/code> \u5b9a\u4e49\u4e86\u4e24\u4e2a\u53c2\u6570 <code>git-repo-url<\/code> \u548c <code>git-revision<\/code>\uff0c\u8fd9\u4e9b\u53c2\u6570\u5c06\u7528\u4e8e <code>Task<\/code> \u4e2d\u3002<\/p>\n\n\n\n<p>2. <strong>TriggerBinding \u4f20\u9012\u53c2\u6570<\/strong><\/p>\n\n\n\n<p><code>TriggerBinding<\/code> \u7528\u4e8e\u4ece\u4e8b\u4ef6\u8d1f\u8f7d\uff08\u4f8b\u5982 GitHub Webhook \u4e8b\u4ef6\uff09\u4e2d\u63d0\u53d6\u6570\u636e\uff0c\u5e76\u5c06\u5176\u6620\u5c04\u5230 <code>Pipeline<\/code> \u7684\u53c2\u6570\u3002<\/p>\n\n\n\n<p><strong>\u793a\u4f8b\uff1a\u5b9a\u4e49\u4e00\u4e2a <code>TriggerBinding<\/code><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: TriggerBinding\nmetadata:\n  name: example-binding\nspec:\n  params:\n    - name: git-repo-url\n      value: $(body.repository.url)\n    - name: git-revision\n      value: $(body.head_commit.id)\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u793a\u4f8b\u4e2d\uff0c<code>TriggerBinding<\/code> \u4ece\u4e8b\u4ef6\u8d1f\u8f7d\u4e2d\u63d0\u53d6 <code>repository.url<\/code> \u548c <code>head_commit.id<\/code>\uff0c\u5e76\u5c06\u5b83\u4eec\u6620\u5c04\u5230 <code>Pipeline<\/code> \u7684\u53c2\u6570 <code>git-repo-url<\/code> \u548c <code>git-revision<\/code>\u3002<\/p>\n\n\n\n<p>3. <strong>TriggerTemplate \u4f7f\u7528\u53c2\u6570<\/strong><\/p>\n\n\n\n<p><code>TriggerTemplate<\/code> \u5b9a\u4e49\u4e86\u89e6\u53d1\u4e8b\u4ef6\u65f6\u521b\u5efa\u7684\u8d44\u6e90\uff0c\u5e76\u4f7f\u7528 <code>TriggerBinding<\/code> \u63d0\u4f9b\u7684\u53c2\u6570\u503c\u3002<\/p>\n\n\n\n<p><strong>\u793a\u4f8b\uff1a\u5b9a\u4e49\u4e00\u4e2a <code>TriggerTemplate<\/code><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: TriggerTemplate\nmetadata:\n  name: example-template\nspec:\n  params:\n    - name: git-repo-url\n    - name: git-revision\n  resourcetemplates:\n    - apiVersion: tekton.dev\/v1beta1\n      kind: PipelineRun\n      metadata:\n        generateName: example-pipeline-run-\n      spec:\n        pipelineRef:\n          name: example-pipeline\n        params:\n          - name: git-repo-url\n            value: $(params.git-repo-url)\n          - name: git-revision\n            value: $(params.git-revision)\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a <code>TriggerTemplate<\/code> \u4e2d\uff0c<code>TriggerBinding<\/code> \u63d0\u4f9b\u7684\u53c2\u6570 <code>git-repo-url<\/code> \u548c <code>git-revision<\/code> \u88ab\u4f20\u9012\u5230 <code>PipelineRun<\/code> \u7684\u53c2\u6570\u4e2d\uff0c\u4ece\u800c\u542f\u52a8\u5bf9\u5e94\u7684 <code>Pipeline<\/code>\u3002<\/p>\n\n\n\n<p>4. <strong>Trigger \u7ec4\u5408\u6240\u6709\u90e8\u5206<\/strong><\/p>\n\n\n\n<p><code>Trigger<\/code> \u5c06 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code> \u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u4ee5\u4fbf\u5728\u4e8b\u4ef6\u53d1\u751f\u65f6\u81ea\u52a8\u521b\u5efa <code>PipelineRun<\/code> \u5e76\u4f20\u9012\u53c2\u6570\u3002<\/p>\n\n\n\n<p><strong>\u793a\u4f8b\uff1a\u5b9a\u4e49\u4e00\u4e2a <code>Trigger<\/code><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: Trigger\nmetadata:\n  name: example-trigger\nspec:\n  bindings:\n    - ref: example-binding\n  template:\n    ref: example-template\n  interceptors:\n    - ref:\n        name: github\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a <code>Trigger<\/code> \u4e2d\uff0c\u5f53 GitHub \u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c<code>TriggerBinding<\/code> \u63d0\u53d6\u7684\u6570\u636e\u5c06\u901a\u8fc7 <code>TriggerTemplate<\/code> \u4f20\u9012\u7ed9 <code>PipelineRun<\/code>\uff0c\u4ece\u800c\u542f\u52a8 <code>Pipeline<\/code>\u3002<\/p>\n\n\n\n<p>\u603b\u7ed3<\/p>\n\n\n\n<ol>\n<li><strong>Pipeline<\/strong> \u5b9a\u4e49\u53c2\u6570\uff0c\u8fd9\u4e9b\u53c2\u6570\u5c06\u5728\u8fd0\u884c\u65f6\u63a5\u6536\u503c\u3002<\/li>\n\n\n\n<li><strong>TriggerBinding<\/strong> \u4ece\u4e8b\u4ef6\u8d1f\u8f7d\u4e2d\u63d0\u53d6\u503c\uff0c\u5e76\u5c06\u5176\u6620\u5c04\u5230 <code>Pipeline<\/code> \u7684\u53c2\u6570\u3002<\/li>\n\n\n\n<li><strong>TriggerTemplate<\/strong> \u4f7f\u7528 <code>TriggerBinding<\/code> \u7684\u53c2\u6570\u503c\u6765\u521b\u5efa <code>PipelineRun<\/code>\u3002<\/li>\n\n\n\n<li><strong>Trigger<\/strong> \u7ec4\u5408 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code>\uff0c\u5e76\u5728\u4e8b\u4ef6\u53d1\u751f\u65f6\u81ea\u52a8\u4f20\u9012\u53c2\u6570\u548c\u89e6\u53d1 <code>Pipeline<\/code>\u3002<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a<code>pipeline.yaml<\/code> \u548c <code>pipelinerun.yaml<\/code> \u5173\u7cfb\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5728 OpenShift Pipelines\uff08\u57fa\u4e8e Tekton\uff09\u4e2d\uff0c<code>pipeline.yaml<\/code> \u548c <code>pipelinerun.yaml<\/code> \u662f\u4e24\u79cd\u4e0d\u540c\u7684 YAML \u6587\u4ef6\uff0c\u5206\u522b\u7528\u4e8e\u5b9a\u4e49\u548c\u6267\u884c CI\/CD \u6d41\u7a0b\u3002\u4ee5\u4e0b\u662f\u5b83\u4eec\u7684\u533a\u522b\u548c\u7528\u9014\uff1a<\/p>\n\n\n\n<p>1. <strong>Pipeline (<code>pipeline.yaml<\/code>)<\/strong><\/p>\n\n\n\n<p><code>Pipeline<\/code> \u662f\u4e00\u4e2a\u5b9a\u4e49 CI\/CD \u5de5\u4f5c\u6d41\u7684 YAML \u6587\u4ef6\u3002\u5b83\u63cf\u8ff0\u4e86\u4e00\u4e2a\u5de5\u4f5c\u6d41\u7684\u7ed3\u6784\uff0c\u5305\u62ec\u9700\u8981\u6267\u884c\u7684\u4efb\u52a1\u3001\u4efb\u52a1\u4e4b\u95f4\u7684\u987a\u5e8f\u4ee5\u53ca\u6240\u9700\u7684\u53c2\u6570\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u529f\u80fd<\/strong>\uff1a\u5b9a\u4e49\u4e00\u7cfb\u5217\u6309\u987a\u5e8f\u6216\u5e76\u884c\u6267\u884c\u7684\u4efb\u52a1\uff08Tasks\uff09\uff0c\u8fd9\u4e9b\u4efb\u52a1\u5171\u540c\u6784\u6210\u4e86\u4e00\u4e2a CI\/CD \u6d41\u7a0b\u3002<\/li>\n\n\n\n<li><strong>\u4f5c\u7528<\/strong>\uff1a<code>Pipeline<\/code> \u6587\u4ef6\u4e3b\u8981\u7528\u4e8e\u63cf\u8ff0\u7ba1\u9053\u7684\u6574\u4f53\u7ed3\u6784\uff0c\u5e76\u4e0d\u4f1a\u81ea\u52a8\u6267\u884c\uff0c\u800c\u662f\u4f5c\u4e3a\u4e00\u79cd\u6a21\u677f\uff0c\u7b49\u5f85\u89e6\u53d1\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u793a\u4f8b\uff1a<code>pipeline.yaml<\/code><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: tekton.dev\/v1beta1\nkind: Pipeline\nmetadata:\n  name: example-pipeline\nspec:\n  params:\n    - name: git-repo-url\n      type: string\n      description: The URL of the Git repository\n    - name: git-revision\n      type: string\n      description: The Git revision to build\n      default: main\n  tasks:\n    - name: build-task\n      taskRef:\n        name: build\n      params:\n        - name: repo-url\n          value: $(params.git-repo-url)\n        - name: revision\n          value: $(params.git-revision)\n    - name: deploy-task\n      taskRef:\n        name: deploy\n      runAfter:\n        - build-task\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<code>Pipeline<\/code> \u5b9a\u4e49\u4e86\u4e00\u4e2a\u5305\u542b\u6784\u5efa\u548c\u90e8\u7f72\u4efb\u52a1\u7684 CI\/CD \u5de5\u4f5c\u6d41\u3002\u5b83\u4e0d\u4f1a\u76f4\u63a5\u8fd0\u884c\uff0c\u800c\u662f\u9700\u8981\u901a\u8fc7 <code>PipelineRun<\/code> \u6765\u542f\u52a8\u3002<\/p>\n\n\n\n<p>2. <strong>PipelineRun (<code>pipelinerun.yaml<\/code>)<\/strong><\/p>\n\n\n\n<p><code>PipelineRun<\/code> \u662f\u4e00\u4e2a\u7528\u4e8e\u6267\u884c <code>Pipeline<\/code> \u7684 YAML \u6587\u4ef6\u3002\u5b83\u5f15\u7528\u4e86\u4e00\u4e2a\u7279\u5b9a\u7684 <code>Pipeline<\/code>\uff0c\u5e76\u4e3a\u5176\u63d0\u4f9b\u8fd0\u884c\u65f6\u6240\u9700\u7684\u53c2\u6570\u3002\u6bcf\u6b21\u8fd0\u884c <code>Pipeline<\/code> \u90fd\u4f1a\u521b\u5efa\u4e00\u4e2a <code>PipelineRun<\/code> \u5b9e\u4f8b\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u529f\u80fd<\/strong>\uff1a\u542f\u52a8\u5e76\u6267\u884c\u4e00\u4e2a <code>Pipeline<\/code>\uff0c\u5c06\u53c2\u6570\u4f20\u9012\u7ed9 <code>Pipeline<\/code> \u5e76\u521b\u5efa\u4e00\u4e2a\u5177\u4f53\u7684\u8fd0\u884c\u5b9e\u4f8b\u3002<\/li>\n\n\n\n<li><strong>\u4f5c\u7528<\/strong>\uff1a<code>PipelineRun<\/code> \u6587\u4ef6\u7528\u4e8e\u5b9e\u9645\u89e6\u53d1\u548c\u6267\u884c\u7ba1\u9053\u4e2d\u7684\u4efb\u52a1\uff0c\u5e76\u5728\u6bcf\u6b21\u6267\u884c\u65f6\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u8fd0\u884c\u5b9e\u4f8b\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u793a\u4f8b\uff1a<code>pipelinerun.yaml<\/code><\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: tekton.dev\/v1beta1\nkind: PipelineRun\nmetadata:\n  name: example-pipelinerun\nspec:\n  pipelineRef:\n    name: example-pipeline\n  params:\n    - name: git-repo-url\n      value: https:\/\/github.com\/example\/repo.git\n    - name: git-revision\n      value: main\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<code>PipelineRun<\/code> \u5f15\u7528\u4e86 <code>example-pipeline<\/code>\uff0c\u5e76\u4e3a\u5b83\u63d0\u4f9b\u4e86\u8fd0\u884c\u65f6\u7684\u53c2\u6570 <code>git-repo-url<\/code> \u548c <code>git-revision<\/code>\u3002\u8fd0\u884c\u8fd9\u4e2a <code>PipelineRun<\/code> \u4f1a\u5b9e\u9645\u6267\u884c <code>example-pipeline<\/code> \u4e2d\u5b9a\u4e49\u7684\u5de5\u4f5c\u6d41\u3002<\/p>\n\n\n\n<p>\u603b\u7ed3<\/p>\n\n\n\n<ul>\n<li><strong>Pipeline (<code>pipeline.yaml<\/code>)<\/strong>: \u5b9a\u4e49\u4e86\u4e00\u4e2a CI\/CD \u6d41\u7a0b\u7684\u7ed3\u6784\uff0c\u5305\u62ec\u4efb\u52a1\u3001\u987a\u5e8f\u3001\u53c2\u6570\u7b49\u3002\u5b83\u662f\u4e00\u4e2a\u6a21\u677f\uff0c\u4e0d\u4f1a\u81ea\u52a8\u6267\u884c\u3002<\/li>\n\n\n\n<li><strong>PipelineRun (<code>pipelinerun.yaml<\/code>)<\/strong>: \u7528\u4e8e\u542f\u52a8\u548c\u6267\u884c <code>Pipeline<\/code>\u3002\u6bcf\u6b21\u8fd0\u884c <code>Pipeline<\/code> \u65f6\uff0c\u90fd\u9700\u8981\u901a\u8fc7 <code>PipelineRun<\/code> \u6765\u542f\u52a8\uff0c\u4f20\u9012\u5fc5\u8981\u7684\u53c2\u6570\uff0c\u5e76\u751f\u6210\u4e00\u4e2a\u8fd0\u884c\u5b9e\u4f8b\u3002<\/li>\n<\/ul>\n\n\n\n<p><code>PipelineRun<\/code> \u662f\u5b9e\u9645\u6267\u884c <code>Pipeline<\/code> \u7684\u89e6\u53d1\u5668\uff0c\u800c <code>Pipeline<\/code> \u5219\u662f\u5b9a\u4e49\u4e86\u5de5\u4f5c\u6d41\u7684\u84dd\u56fe\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a<code>PipelineRun<\/code> \u548c Trigger\u7684\u5173\u7cfb\uff0cTrigger\u4e0d\u662f\u4e5f\u80fd\u89e6\u53d1Pipeline \u5e76\u4e14\u4f20\u9012\u53c2\u6570\u5417\uff1f<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u662f\u7684\uff0c<code>Trigger<\/code> \u548c <code>PipelineRun<\/code> \u90fd\u80fd\u89e6\u53d1 <code>Pipeline<\/code> \u5e76\u4f20\u9012\u53c2\u6570\uff0c\u4f46\u5b83\u4eec\u7684\u7528\u9014\u548c\u4f7f\u7528\u573a\u666f\u7565\u6709\u4e0d\u540c\u3002\u4ee5\u4e0b\u662f\u4e24\u8005\u7684\u5173\u7cfb\u548c\u533a\u522b\uff1a<\/p>\n\n\n\n<p><code>PipelineRun<\/code> \u662f\u76f4\u63a5\u6267\u884c <code>Pipeline<\/code> \u7684\u5b9e\u4f53\uff0c\u5b83\u5305\u542b\u4e86 <code>Pipeline<\/code> \u7684\u5f15\u7528\u548c\u53c2\u6570\uff0c\u5e76\u4e14\u6bcf\u6b21\u8fd0\u884c <code>Pipeline<\/code> \u65f6\u90fd\u4f1a\u751f\u6210\u4e00\u4e2a\u65b0\u7684 <code>PipelineRun<\/code> \u5b9e\u4f8b\u3002<code>PipelineRun<\/code> \u901a\u5e38\u662f\u624b\u52a8\u521b\u5efa\u7684\uff0c\u6216\u8005\u7531\u67d0\u79cd\u81ea\u52a8\u5316\u5de5\u5177\u89e6\u53d1\uff0c\u7528\u4e8e\u6267\u884c\u5b9a\u4e49\u597d\u7684 CI\/CD \u6d41\u7a0b\u3002<\/p>\n\n\n\n<p>1.<strong>PipelineRun<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>\u624b\u52a8\u89e6\u53d1<\/strong>: \u901a\u5e38\u662f\u76f4\u63a5\u901a\u8fc7\u547d\u4ee4\u884c\u6216 YAML \u6587\u4ef6\u6765\u624b\u52a8\u89e6\u53d1 <code>Pipeline<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u53c2\u6570\u4f20\u9012<\/strong>: \u53ef\u4ee5\u5728 <code>PipelineRun<\/code> \u4e2d\u6307\u5b9a\u53c2\u6570\u503c\uff0c\u4ee5\u4fbf\u5728\u8fd0\u884c\u65f6\u4f20\u9012\u7ed9 <code>Pipeline<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u4f7f\u7528\u573a\u666f<\/strong>: \u9002\u7528\u4e8e\u5728\u7279\u5b9a\u65f6\u95f4\u6216\u6761\u4ef6\u4e0b\u624b\u52a8\u89e6\u53d1 <code>Pipeline<\/code>\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u793a\u4f8b<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: tekton.dev\/v1beta1\nkind: PipelineRun\nmetadata:\n  name: example-pipelinerun\nspec:\n  pipelineRef:\n    name: example-pipeline\n  params:\n    - name: git-repo-url\n      value: https:\/\/github.com\/example\/repo.git\n    - name: git-revision\n      value: main\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<code>PipelineRun<\/code> \u624b\u52a8\u89e6\u53d1\u4e86 <code>example-pipeline<\/code>\uff0c\u5e76\u4f20\u9012\u4e86 <code>git-repo-url<\/code> \u548c <code>git-revision<\/code> \u53c2\u6570\u3002<\/p>\n\n\n\n<p>2. <strong>Trigger<\/strong><\/p>\n\n\n\n<p><code>Trigger<\/code> \u662f\u4e00\u79cd\u673a\u5236\uff0c\u7528\u4e8e\u81ea\u52a8\u5316 <code>Pipeline<\/code> \u7684\u6267\u884c\u3002\u5b83\u57fa\u4e8e\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Webhook\uff09\u6765\u52a8\u6001\u521b\u5efa\u548c\u89e6\u53d1 <code>PipelineRun<\/code>\u3002\u901a\u8fc7 <code>Trigger<\/code>\uff0c\u53ef\u4ee5\u5b9e\u73b0\u4e8b\u4ef6\u9a71\u52a8\u7684 CI\/CD \u6d41\u7a0b\u3002<\/p>\n\n\n\n<ul>\n<li><strong>\u81ea\u52a8\u89e6\u53d1<\/strong>: \u7531\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 GitHub \u63d0\u4ea4\u3001Webhook\uff09\u89e6\u53d1 <code>Pipeline<\/code>\u3002\u5f53\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c<code>Trigger<\/code> \u4f1a\u81ea\u52a8\u521b\u5efa\u4e00\u4e2a <code>PipelineRun<\/code> \u5b9e\u4f8b\u5e76\u6267\u884c\u3002<\/li>\n\n\n\n<li><strong>\u53c2\u6570\u4f20\u9012<\/strong>: \u901a\u8fc7 <code>TriggerBinding<\/code> \u4ece\u4e8b\u4ef6\u8d1f\u8f7d\u4e2d\u63d0\u53d6\u53c2\u6570\uff0c\u5e76\u901a\u8fc7 <code>TriggerTemplate<\/code> \u5c06\u8fd9\u4e9b\u53c2\u6570\u4f20\u9012\u7ed9 <code>PipelineRun<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u4f7f\u7528\u573a\u666f<\/strong>: \u9002\u7528\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u7684\u81ea\u52a8\u5316 CI\/CD \u6d41\u7a0b\uff0c\u5982\u5728\u6bcf\u6b21\u4ee3\u7801\u63d0\u4ea4\u65f6\u81ea\u52a8\u6784\u5efa\u548c\u90e8\u7f72\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5de5\u4f5c\u6d41\u7a0b<\/strong>:<\/p>\n\n\n\n<ol>\n<li><strong>\u4e8b\u4ef6\u53d1\u751f<\/strong>: \u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Git \u63d0\u4ea4\uff09\u89e6\u53d1 <code>Trigger<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u6570\u636e\u63d0\u53d6<\/strong>: <code>TriggerBinding<\/code> \u4ece\u4e8b\u4ef6\u8d1f\u8f7d\u4e2d\u63d0\u53d6\u6570\u636e\uff08\u5982 Git \u4ed3\u5e93 URL\u3001\u63d0\u4ea4 ID\uff09\u3002<\/li>\n\n\n\n<li><strong>\u521b\u5efa PipelineRun<\/strong>: <code>TriggerTemplate<\/code> \u4f7f\u7528\u63d0\u53d6\u7684\u6570\u636e\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 <code>PipelineRun<\/code> \u5b9e\u4f8b\u3002<\/li>\n\n\n\n<li><strong>\u81ea\u52a8\u6267\u884c<\/strong>: \u751f\u6210\u7684 <code>PipelineRun<\/code> \u81ea\u52a8\u6267\u884c <code>Pipeline<\/code>\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u793a\u4f8b<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: Trigger\nmetadata:\n  name: example-trigger\nspec:\n  bindings:\n    - ref: example-binding\n  template:\n    ref: example-template\n  interceptors:\n    - ref:\n        name: github\n<\/pre>\n\n\n\n<p>\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c<code>Trigger<\/code> \u76d1\u542c GitHub \u7684 Webhook \u4e8b\u4ef6\uff0c\u5e76\u81ea\u52a8\u521b\u5efa\u4e00\u4e2a <code>PipelineRun<\/code> \u6765\u6267\u884c <code>example-pipeline<\/code>\uff0c\u65e0\u9700\u4eba\u5de5\u5e72\u9884\u3002<\/p>\n\n\n\n<p>3. <strong>Trigger \u548c PipelineRun \u7684\u5173\u7cfb<\/strong><\/p>\n\n\n\n<ul>\n<li><strong><code>Trigger<\/code> \u81ea\u52a8\u521b\u5efa <code>PipelineRun<\/code><\/strong>: <code>Trigger<\/code> \u662f\u4e00\u79cd\u81ea\u52a8\u5316\u673a\u5236\uff0c\u5f53\u67d0\u4e2a\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c\u5b83\u4f1a\u81ea\u52a8\u521b\u5efa\u5e76\u6267\u884c\u4e00\u4e2a <code>PipelineRun<\/code>\uff0c\u4ece\u800c\u89e6\u53d1 <code>Pipeline<\/code>\u3002<code>Trigger<\/code> \u662f <code>PipelineRun<\/code> \u7684\u4e00\u79cd\u81ea\u52a8\u751f\u6210\u5668\uff0c\u5e2e\u52a9\u5b9e\u73b0\u4e8b\u4ef6\u9a71\u52a8\u7684 CI\/CD \u6d41\u7a0b\u3002<\/li>\n\n\n\n<li><strong><code>PipelineRun<\/code> \u662f\u89e6\u53d1\u7684\u5177\u4f53\u5b9e\u4f8b<\/strong>: \u65e0\u8bba\u662f\u624b\u52a8\u521b\u5efa\u8fd8\u662f\u901a\u8fc7 <code>Trigger<\/code> \u81ea\u52a8\u521b\u5efa\uff0c<code>PipelineRun<\/code> \u90fd\u662f\u5b9e\u9645\u6267\u884c <code>Pipeline<\/code> \u7684\u5b9e\u4f8b\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u603b\u7ed3<\/p>\n\n\n\n<ul>\n<li><strong><code>PipelineRun<\/code><\/strong>: \u76f4\u63a5\u7528\u4e8e\u624b\u52a8\u6216\u7f16\u7a0b\u65b9\u5f0f\u89e6\u53d1 <code>Pipeline<\/code>\uff0c\u9002\u5408\u9700\u8981\u660e\u786e\u63a7\u5236\u4f55\u65f6\u8fd0\u884c <code>Pipeline<\/code> \u7684\u573a\u666f\u3002<\/li>\n\n\n\n<li><strong><code>Trigger<\/code><\/strong>: \u7528\u4e8e\u81ea\u52a8\u5316 <code>Pipeline<\/code> \u7684\u89e6\u53d1\uff0c\u57fa\u4e8e\u5916\u90e8\u4e8b\u4ef6\u52a8\u6001\u521b\u5efa <code>PipelineRun<\/code>\uff0c\u9002\u5408\u4e8b\u4ef6\u9a71\u52a8\u7684 CI\/CD \u6d41\u7a0b\u3002<\/li>\n<\/ul>\n\n\n\n<p><code>Trigger<\/code> \u662f\u901a\u8fc7\u4e8b\u4ef6\u81ea\u52a8\u521b\u5efa\u548c\u6267\u884c <code>PipelineRun<\/code> \u7684\u673a\u5236\uff0c\u4ece\u800c\u4f7f\u5f97 <code>Pipeline<\/code> \u53ef\u4ee5\u5728\u4e8b\u4ef6\u53d1\u751f\u65f6\u81ea\u52a8\u542f\u52a8\u548c\u8fd0\u884c\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1aEventListener \u662f\u4ec0\u4e48\uff0c\u548cTrigger \u548cpipeline\u6709\u4ec0\u4e48\u5173\u7cfb\u5417<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><code>EventListener<\/code> \u662f OpenShift Pipelines\uff08\u57fa\u4e8e Tekton\uff09\u7684\u4e00\u4e2a\u91cd\u8981\u7ec4\u4ef6\uff0c\u7528\u4e8e\u5904\u7406\u5916\u90e8\u4e8b\u4ef6\u5e76\u89e6\u53d1\u76f8\u5e94\u7684 CI\/CD \u6d41\u7a0b\u3002\u5b83\u5728\u6574\u4e2a Pipeline \u89e6\u53d1\u673a\u5236\u4e2d\u626e\u6f14\u7740\u5173\u952e\u89d2\u8272\uff0c\u548c <code>Trigger<\/code> \u4ee5\u53ca <code>Pipeline<\/code> \u5173\u7cfb\u5bc6\u5207\u3002\u4ee5\u4e0b\u662f\u5b83\u4eec\u4e4b\u95f4\u7684\u5173\u7cfb\u548c\u5177\u4f53\u529f\u80fd\u89e3\u91ca\uff1a<\/p>\n\n\n\n<p>1. <strong>Pipeline<\/strong><\/p>\n\n\n\n<p><code>Pipeline<\/code> \u662f\u4e00\u4e2a CI\/CD \u5de5\u4f5c\u6d41\u7684\u5b9a\u4e49\u3002\u5b83\u7531\u4e00\u7cfb\u5217\u6309\u987a\u5e8f\u6216\u5e76\u884c\u6267\u884c\u7684\u4efb\u52a1\uff08Tasks\uff09\u7ec4\u6210\uff0c\u8fd9\u4e9b\u4efb\u52a1\u5171\u540c\u5b8c\u6210\u6784\u5efa\u3001\u6d4b\u8bd5\u3001\u90e8\u7f72\u7b49\u64cd\u4f5c\u3002<code>Pipeline<\/code> \u5b9a\u4e49\u4e86\u5de5\u4f5c\u6d41\u7684\u7ed3\u6784\u548c\u903b\u8f91\uff0c\u4f46\u4e0d\u4f1a\u81ea\u52a8\u8fd0\u884c\uff0c\u901a\u5e38\u9700\u8981\u901a\u8fc7 <code>PipelineRun<\/code> \u6765\u6267\u884c\u3002<\/p>\n\n\n\n<p>2. <strong>Trigger<\/strong><\/p>\n\n\n\n<p><code>Trigger<\/code> \u662f\u4e00\u7ec4\u8d44\u6e90\u7684\u96c6\u5408\uff0c\u7528\u4e8e\u54cd\u5e94\u5916\u90e8\u4e8b\u4ef6\u5e76\u81ea\u52a8\u89e6\u53d1 <code>Pipeline<\/code>\u3002\u5b83\u5305\u62ec\u4ee5\u4e0b\u4e3b\u8981\u7ec4\u4ef6\uff1a<\/p>\n\n\n\n<ul>\n<li><strong>TriggerBinding<\/strong>\uff1a\u5b9a\u4e49\u4ece\u5916\u90e8\u4e8b\u4ef6\u8d1f\u8f7d\u4e2d\u63d0\u53d6\u6570\u636e\u7684\u89c4\u5219\u3002\u5b83\u51b3\u5b9a\u4e86\u54ea\u4e9b\u4fe1\u606f\uff08\u5982 Git \u4ed3\u5e93 URL\u3001\u63d0\u4ea4 SHA \u7b49\uff09\u5c06\u4ece\u4e8b\u4ef6\u4e2d\u63d0\u53d6\u51fa\u6765\u3002<\/li>\n\n\n\n<li><strong>TriggerTemplate<\/strong>\uff1a\u5b9a\u4e49\u4e86\u5982\u4f55\u4f7f\u7528\u4ece\u4e8b\u4ef6\u4e2d\u63d0\u53d6\u7684\u6570\u636e\u6765\u521b\u5efa <code>PipelineRun<\/code> \u6216\u5176\u4ed6 Kubernetes \u8d44\u6e90\u3002\u5b83\u57fa\u672c\u4e0a\u662f\u4e00\u4e2a\u6a21\u677f\uff0c\u63cf\u8ff0\u4e86\u89e6\u53d1\u540e\u7684 <code>PipelineRun<\/code> \u6216\u8d44\u6e90\u5e94\u8be5\u662f\u4ec0\u4e48\u6837\u5b50\u3002<\/li>\n\n\n\n<li><strong>Trigger<\/strong>\uff1a\u5c06 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code> \u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u5b9a\u4e49\u4e86\u5728\u67d0\u4e2a\u4e8b\u4ef6\u53d1\u751f\u65f6\u5e94\u5982\u4f55\u5904\u7406\u3002<\/li>\n<\/ul>\n\n\n\n<p>3. <strong>EventListener<\/strong><\/p>\n\n\n\n<p><code>EventListener<\/code> \u662f\u4e00\u4e2a\u63a5\u6536\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Webhook \u8bf7\u6c42\uff09\u7684\u7ec4\u4ef6\u3002\u5b83\u76d1\u542c\u6765\u81ea\u5916\u90e8\u7684 HTTP \u8bf7\u6c42\uff0c\u5e76\u5c06\u8fd9\u4e9b\u8bf7\u6c42\u6620\u5c04\u5230\u4e00\u4e2a\u6216\u591a\u4e2a <code>Trigger<\/code> \u4e0a\u3002<code>EventListener<\/code> \u662f <code>Trigger<\/code> \u7684\u5165\u53e3\u70b9\uff0c\u662f\u5c06\u5916\u90e8\u4e8b\u4ef6\u4e0e\u5185\u90e8 Tekton \u89e6\u53d1\u673a\u5236\u8fde\u63a5\u8d77\u6765\u7684\u6865\u6881\u3002<\/p>\n\n\n\n<p><strong>\u5de5\u4f5c\u6d41\u7a0b\uff1a<\/strong><\/p>\n\n\n\n<ol>\n<li><strong>\u5916\u90e8\u4e8b\u4ef6<\/strong>\uff1a\u5982 GitHub \u63d0\u4ea4\u6216\u62c9\u53d6\u8bf7\u6c42\u89e6\u53d1\u4e00\u4e2a Webhook\u3002<\/li>\n\n\n\n<li><strong>EventListener<\/strong>\uff1a\u63a5\u6536\u8fd9\u4e2a Webhook \u8bf7\u6c42\uff0c\u89e3\u6790\u5176\u4e2d\u7684\u6570\u636e\u3002<\/li>\n\n\n\n<li><strong>Trigger<\/strong>\uff1a<code>EventListener<\/code> \u5c06\u8bf7\u6c42\u7684\u6570\u636e\u4f20\u9012\u7ed9\u5173\u8054\u7684 <code>Trigger<\/code>\u3002<code>TriggerBinding<\/code> \u63d0\u53d6\u6709\u7528\u7684\u6570\u636e\uff0c<code>TriggerTemplate<\/code> \u751f\u6210\u4e00\u4e2a <code>PipelineRun<\/code>\u3002<\/li>\n\n\n\n<li><strong>PipelineRun<\/strong>\uff1a\u751f\u6210\u7684 <code>PipelineRun<\/code> \u5b9e\u4f8b\u542f\u52a8\u5e76\u6267\u884c <code>Pipeline<\/code> \u4e2d\u5b9a\u4e49\u7684\u5de5\u4f5c\u6d41\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong><\/p>\n\n\n\n<ul>\n<li><strong><code>EventListener<\/code><\/strong>\uff1a\u8d1f\u8d23\u63a5\u6536\u5916\u90e8\u4e8b\u4ef6\uff0c\u5e76\u5c06\u8fd9\u4e9b\u4e8b\u4ef6\u4f20\u9012\u7ed9 <code>Trigger<\/code>\uff0c\u4ece\u800c\u89e6\u53d1 <code>Pipeline<\/code> \u7684\u6267\u884c\u3002<\/li>\n\n\n\n<li><strong><code>Trigger<\/code><\/strong>\uff1a\u5904\u7406\u4ece <code>EventListener<\/code> \u4f20\u9012\u7684\u6570\u636e\uff0c\u5e76\u6839\u636e\u9700\u8981\u751f\u6210 <code>PipelineRun<\/code>\u3002<\/li>\n\n\n\n<li><strong><code>Pipeline<\/code><\/strong>\uff1a\u662f\u5b9e\u9645\u6267\u884c\u7684 CI\/CD \u6d41\u7a0b\uff0c\u7531 <code>PipelineRun<\/code> \u6765\u542f\u52a8\u548c\u8fd0\u884c\u3002<\/li>\n<\/ul>\n\n\n\n<p><code>EventListener<\/code>\u3001<code>Trigger<\/code> \u548c <code>Pipeline<\/code> \u5171\u540c\u7ec4\u6210\u4e86\u4e00\u4e2a\u81ea\u52a8\u5316\u7684 CI\/CD \u89e6\u53d1\u7cfb\u7edf\uff0c\u5141\u8bb8\u5916\u90e8\u4e8b\u4ef6\uff08\u5982\u4ee3\u7801\u63d0\u4ea4\u3001\u62c9\u53d6\u8bf7\u6c42\u7b49\uff09\u81ea\u52a8\u89e6\u53d1\u6784\u5efa\u3001\u6d4b\u8bd5\u548c\u90e8\u7f72\u6d41\u7a0b\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1aEventListener \u5982\u4f55\u5173\u8054Trigger<\/strong>\uff1f<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><code>EventListener<\/code> \u901a\u8fc7\u5f15\u7528\u4e00\u4e2a\u6216\u591a\u4e2a <code>Trigger<\/code> \u6765\u4e0e\u5b83\u4eec\u5efa\u7acb\u5173\u8054\u3002\u5f53 <code>EventListener<\/code> \u63a5\u6536\u5230\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Webhook \u8bf7\u6c42\uff09\u65f6\uff0c\u5b83\u4f1a\u6839\u636e\u914d\u7f6e\u5c06\u4e8b\u4ef6\u4f20\u9012\u7ed9\u5173\u8054\u7684 <code>Trigger<\/code>\uff0c\u4ece\u800c\u89e6\u53d1\u76f8\u5e94\u7684\u64cd\u4f5c\uff0c\u5982\u521b\u5efa <code>PipelineRun<\/code> \u5e76\u6267\u884c Pipeline\u3002<\/p>\n\n\n\n<p><strong>\u5173\u8054 <code>Trigger<\/code> \u7684\u65b9\u5f0f<\/strong><\/p>\n\n\n\n<p><code>EventListener<\/code> \u901a\u8fc7\u5176 <code>spec.triggers<\/code> \u5b57\u6bb5\u6765\u5f15\u7528\u4e00\u4e2a\u6216\u591a\u4e2a <code>Trigger<\/code>\u3002\u6bcf\u4e2a <code>Trigger<\/code> \u53ef\u4ee5\u6307\u5b9a\u8981\u4f7f\u7528\u7684 <code>TriggerBinding<\/code> \u548c <code>TriggerTemplate<\/code>\uff0c\u4ece\u800c\u51b3\u5b9a\u5982\u4f55\u5904\u7406\u4e8b\u4ef6\u6570\u636e\u4ee5\u53ca\u5982\u4f55\u751f\u6210\u548c\u6267\u884c <code>PipelineRun<\/code>\u3002<\/p>\n\n\n\n<p><strong>\u793a\u4f8b\u914d\u7f6e<\/strong><\/p>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u4e00\u4e2a <code>EventListener<\/code> \u5173\u8054 <code>Trigger<\/code> \u7684\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: triggers.tekton.dev\/v1alpha1\nkind: EventListener\nmetadata:\n  name: example-listener\nspec:\n  serviceAccountName: pipeline\n  triggers:\n    - name: example-trigger\n      bindings:\n        - ref: example-triggerbinding\n      template:\n        ref: example-triggertemplate\n<\/pre>\n\n\n\n<p><strong>\u8be6\u7ec6\u8bf4\u660e<\/strong><\/p>\n\n\n\n<ol>\n<li><strong><code>EventListener<\/code><\/strong>\uff1a\n<ul>\n<li>\u5b9a\u4e49\u4e86\u4e00\u4e2a\u540d\u79f0\u4e3a <code>example-listener<\/code> \u7684 <code>EventListener<\/code>\uff0c\u7528\u4e8e\u76d1\u542c\u5916\u90e8\u4e8b\u4ef6\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>triggers<\/code> \u5b57\u6bb5<\/strong>\uff1a\n<ul>\n<li><code>triggers<\/code> \u662f\u4e00\u4e2a\u5217\u8868\uff0c\u6bcf\u4e2a\u5143\u7d20\u90fd\u662f\u4e00\u4e2a <code>Trigger<\/code> \u914d\u7f6e\u3002\u5728\u8fd9\u4e2a\u793a\u4f8b\u4e2d\uff0c<code>EventListener<\/code> \u5173\u8054\u4e86\u4e00\u4e2a\u540d\u4e3a <code>example-trigger<\/code> \u7684 <code>Trigger<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>bindings<\/code> \u5b57\u6bb5<\/strong>\uff1a\n<ul>\n<li><code>bindings<\/code> \u6307\u5b9a\u4e86\u4e0e\u8fd9\u4e2a <code>Trigger<\/code> \u5173\u8054\u7684 <code>TriggerBinding<\/code>\uff0c\u4f8b\u5982 <code>example-triggerbinding<\/code>\u3002<code>TriggerBinding<\/code> \u7528\u4e8e\u4ece\u4e8b\u4ef6\u8d1f\u8f7d\u4e2d\u63d0\u53d6\u6570\u636e\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code>template<\/code> \u5b57\u6bb5<\/strong>\uff1a\n<ul>\n<li><code>template<\/code> \u6307\u5b9a\u4e86\u4e00\u4e2a <code>TriggerTemplate<\/code>\uff0c\u4f8b\u5982 <code>example-triggertemplate<\/code>\uff0c\u5b83\u5b9a\u4e49\u4e86\u5982\u4f55\u4f7f\u7528\u63d0\u53d6\u7684\u6570\u636e\u751f\u6210 <code>PipelineRun<\/code> \u6216\u5176\u4ed6\u8d44\u6e90\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>\u5982\u4f55\u5de5\u4f5c<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>\u4e8b\u4ef6\u63a5\u6536<\/strong>\uff1a\u5f53 <code>EventListener<\/code> \u63a5\u6536\u5230\u4e00\u4e2a\u5916\u90e8\u4e8b\u4ef6\uff08\u5982 Webhook\uff09\u65f6\uff0c\u5b83\u4f1a\u5c06\u8be5\u4e8b\u4ef6\u4f20\u9012\u7ed9\u5b83\u6240\u5173\u8054\u7684\u6240\u6709 <code>Trigger<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u6570\u636e\u63d0\u53d6<\/strong>\uff1a\u6bcf\u4e2a <code>Trigger<\/code> \u4f1a\u4f7f\u7528\u5b83\u7684 <code>TriggerBinding<\/code> \u4ece\u4e8b\u4ef6\u4e2d\u63d0\u53d6\u6709\u7528\u7684\u6570\u636e\uff08\u5982 Git \u4ed3\u5e93 URL\u3001\u63d0\u4ea4 SHA \u7b49\uff09\u3002<\/li>\n\n\n\n<li><strong>\u8d44\u6e90\u751f\u6210<\/strong>\uff1a\u63d0\u53d6\u7684\u6570\u636e\u4f1a\u88ab\u4f20\u9012\u7ed9 <code>TriggerTemplate<\/code>\uff0c<code>TriggerTemplate<\/code> \u6839\u636e\u8fd9\u4e9b\u6570\u636e\u751f\u6210\u4e00\u4e2a\u65b0\u7684\u8d44\u6e90\uff08\u901a\u5e38\u662f <code>PipelineRun<\/code>\uff09\u3002<\/li>\n\n\n\n<li><strong>\u6267\u884c <code>Pipeline<\/code><\/strong>\uff1a\u6700\u7ec8\u751f\u6210\u7684 <code>PipelineRun<\/code> \u4f1a\u542f\u52a8\u5e76\u6267\u884c <code>Pipeline<\/code> \u4e2d\u5b9a\u4e49\u7684\u4efb\u52a1\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong><\/p>\n\n\n\n<p><code>EventListener<\/code> \u901a\u8fc7 <code>triggers<\/code> \u5b57\u6bb5\u6765\u5173\u8054\u4e00\u4e2a\u6216\u591a\u4e2a <code>Trigger<\/code>\u3002\u5f53\u4e8b\u4ef6\u53d1\u751f\u65f6\uff0c<code>EventListener<\/code> \u4f1a\u5c06\u4e8b\u4ef6\u6570\u636e\u4f20\u9012\u7ed9\u8fd9\u4e9b <code>Trigger<\/code>\uff0c\u4ece\u800c\u89e6\u53d1\u76f8\u5e94\u7684\u64cd\u4f5c\uff08\u5982\u542f\u52a8 <code>PipelineRun<\/code>\uff09\u3002\u8fd9\u4e00\u673a\u5236\u4f7f\u5f97 OpenShift Pipelines \u53ef\u4ee5\u6839\u636e\u5916\u90e8\u4e8b\u4ef6\u52a8\u6001\u89e6\u53d1 CI\/CD \u6d41\u7a0b\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u95ee\u9898\uff1a\u4e3a EventListener \u521b\u5efa Edge \u8def\u7531<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>1.<strong>\u786e\u4fdd EventListener \u5df2\u7ecf\u90e8\u7f72<\/strong>\uff1a \u60a8\u9700\u8981\u5148\u786e\u4fdd <code>EventListener<\/code> \u5df2\u7ecf\u5728\u60a8\u7684 OpenShift \u96c6\u7fa4\u4e2d\u90e8\u7f72\u5e76\u8fd0\u884c\u3002<\/p>\n\n\n\n<p>2.<strong>\u4e3a EventListener \u521b\u5efa Service<\/strong>\uff1a \u901a\u5e38\uff0c<code>EventListener<\/code> \u4f1a\u81ea\u52a8\u521b\u5efa\u4e00\u4e2a\u5bf9\u5e94\u7684 Service\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u8be5 Service \u540d\u79f0\u6765\u521b\u5efa\u8def\u7531\u3002\u5982\u679c\u6ca1\u6709\uff0c\u60a8\u9700\u8981\u624b\u52a8\u521b\u5efa\u4e00\u4e2a Service \u6765\u66b4\u9732 <code>EventListener<\/code>\u3002<\/p>\n\n\n\n<p><strong>\u793a\u4f8b<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">apiVersion: v1\nkind: Service\nmetadata:\n  name: eventlistener-service\nspec:\n  selector:\n    app: my-eventlistener\n  ports:\n    - protocol: TCP\n      port: 8080\n      targetPort: 8080\n<\/pre>\n\n\n\n<p>3.<strong>\u4f7f\u7528 <code>oc create route edge<\/code> \u521b\u5efa\u8def\u7531<\/strong>\uff1a \u4e00\u65e6\u6709\u4e86 Service\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u4e3a\u8be5 <code>EventListener<\/code> \u521b\u5efa\u4e00\u4e2a\u8fb9\u7f18\u7ec8\u6b62\u7684 TLS \u8def\u7531\u3002<\/p>\n\n\n\n<p><strong>\u547d\u4ee4<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc create route edge --service=eventlistener-service<\/pre>\n\n\n\n<p>\u8fd9\u4f1a\u521b\u5efa\u4e00\u4e2a\u57fa\u4e8e HTTPS \u7684\u8def\u7531\uff0c\u5916\u90e8\u8bf7\u6c42\u5c06\u901a\u8fc7\u8be5\u8def\u7531\u8fdb\u5165\uff0c\u5e76\u6700\u7ec8\u88ab\u8f6c\u53d1\u5230 <code>EventListener<\/code> \u5173\u8054\u7684 Service\u3002<\/p>\n\n\n\n<p>4.<strong>\u83b7\u53d6\u8def\u7531\u7684 URL<\/strong>\uff1a \u521b\u5efa\u8def\u7531\u540e\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u67e5\u770b\u8def\u7531\u7684\u5916\u90e8 URL\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">oc get route<\/pre>\n\n\n\n<ol>\n<li>\u60a8\u4f1a\u770b\u5230\u4e00\u4e2a\u751f\u6210\u7684 URL\uff0c\u60a8\u53ef\u4ee5\u5c06\u5176\u7528\u4f5c Webhook URL\uff0c\u5c06\u5916\u90e8\u8bf7\u6c42\uff08\u5982 GitHub Webhook\uff09\u53d1\u9001\u5230\u8fd9\u4e2a URL\u3002<\/li>\n<\/ol>\n\n\n\n<p><strong>\u603b\u7ed3<\/strong><\/p>\n\n\n\n<p>\u901a\u8fc7\u4f7f\u7528 <code>oc create route edge --service=&lt;EventListener\u7684Service\u540d\u79f0&gt;<\/code>\uff0c\u60a8\u53ef\u4ee5\u4e3a <code>EventListener<\/code> \u521b\u5efa\u4e00\u4e2a\u5916\u90e8\u8def\u7531\uff0c\u4f7f\u5176\u80fd\u591f\u63a5\u6536\u6765\u81ea\u5916\u90e8\u7cfb\u7edf\uff08\u5982 GitHub\u3001GitLab \u7b49\uff09\u7684 Webhook \u8bf7\u6c42\u3002\u8fd9\u79cd\u65b9\u5f0f\u4f7f\u60a8\u7684 CI\/CD \u6d41\u7a0b\u80fd\u591f\u54cd\u5e94\u5916\u90e8\u4e8b\u4ef6\u5e76\u81ea\u52a8\u89e6\u53d1 Pipeline\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u95ee\u9898: BuildConfig (bc)\u662f\u4ec0\u4e48\uff1f BuildConfig \u662f OpenShift \u7279\u6709\u7684\u8d44\u6e90\uff0c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/15458"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15458"}],"version-history":[{"count":28,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/15458\/revisions"}],"predecessor-version":[{"id":16170,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/15458\/revisions\/16170"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}