{"id":1594,"date":"2025-06-17T06:05:20","date_gmt":"2025-06-16T21:05:20","guid":{"rendered":"https:\/\/itstudy365.com\/blog\/?p=1594"},"modified":"2025-06-17T06:05:20","modified_gmt":"2025-06-16T21:05:20","slug":"kubernetes-learning-%e7%ac%ac37%e7%ab%a0%ef%bc%9ajenkins%e3%82%84github-actions%e3%81%8b%e3%82%89%e3%81%aekubernetes%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4%e4%be%8b-%ef%bd%9eci-cd%e3%83%84%e3%83%bc","status":"publish","type":"post","link":"https:\/\/itstudy365.com\/blog\/2025\/06\/17\/kubernetes-learning-%e7%ac%ac37%e7%ab%a0%ef%bc%9ajenkins%e3%82%84github-actions%e3%81%8b%e3%82%89%e3%81%aekubernetes%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4%e4%be%8b-%ef%bd%9eci-cd%e3%83%84%e3%83%bc\/","title":{"rendered":"Kubernetes Learning \u7b2c37\u7ae0\uff1aJenkins\u3084GitHub Actions\u304b\u3089\u306eKubernetes\u30c7\u30d7\u30ed\u30a4\u4f8b \uff5eCI\/CD\u30c4\u30fc\u30eb\u3068Kubernetes\u3092\u3064\u306a\u3052\u3066\u307f\u3088\u3046\uff5e"},"content":{"rendered":"\n<button id=\"bb1\" type=\"button\" value=\"Play\" class=\"responsivevoice-button\" title=\"ResponsiveVoice Tap to Start\/Stop Speech\"><span>&#128266; Play<\/span><\/button>\n        <script>\n            bb1.onclick = function(){\n                if(responsiveVoice.isPlaying()){\n                    responsiveVoice.cancel();\n                }else{\n                    responsiveVoice.speak(\"\u2705 \u306f\u3058\u3081\u306b\uff1aCI\/CD\u3068Kubernetes\u306e\u95a2\u4fc2 CI\/CD\uff08\u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\uff0f\u7d99\u7d9a\u7684\u30c7\u30ea\u30d0\u30ea\u30fc\uff09\u30c4\u30fc\u30eb\u3092\u4f7f\u3046\u3068\u3001\u30b3\u30fc\u30c9\u306e\u5909\u66f4\u304b\u3089Kubernetes\u3078\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u3092\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u884c\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 \u305f\u3068\u3048\u3070\u3001\u6b21\u306e\u3088\u3046\u306a\u6d41\u308c\u3067\u3059\uff1a 1. Git \u306b Push 2. Jenkins \u307e\u305f\u306f GitHub Actions \u304c\u30d3\u30eb\u30c9\uff06Docker\u30a4\u30e1\u30fc\u30b8\u4f5c\u6210 3. \u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u306b push 4. kubectl apply \u306a\u3069\u3067 Kubernetes \u306b\u30c7\u30d7\u30ed\u30a4 \ud83d\ude80 Jenkins \u304b\u3089\u306e\u30c7\u30d7\u30ed\u30a4\u4f8b Jenkinsfile\uff08\u4f8b\uff09 pipeline { agent any stages { stage(&#39;Build Docker Image&#39;) { steps { script { dockerImage = docker.build(\\\"my-app:${BUILD_NUMBER}\\\") } } } stage(&#39;Push to Registry&#39;) { steps { script { docker.withRegistry(&#39;https:\/\/registry.example.com&#39;, &#39;docker-creds&#39;) { dockerImage.push() } } } } stage(&#39;Deploy to Kubernetes&#39;) { steps { sh &#39;kubectl apply -f k8s\/deployment.yaml&#39; } } } } \u30dd\u30a4\u30f3\u30c8 Jenkins \u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067 Docker \u3092\u30d3\u30eb\u30c9 \u30ec\u30b8\u30b9\u30c8\u30ea\u306b push\uff08\u4e8b\u524d\u306b\u8a8d\u8a3c\u8a2d\u5b9a\u304c\u5fc5\u8981\uff09 kubectl apply \u3067 Kubernetes \u306b\u53cd\u6620 \ud83e\udded GitHub Actions \u304b\u3089\u306e\u30c7\u30d7\u30ed\u30a4\u4f8b .github\/workflows\/deploy.yaml name: Deploy to Kubernetes on: push: branches: - main jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions\/checkout@v3 - name: Set up Docker uses: docker\/setup-buildx-action@v2 - name: Build Docker image run: docker build -t my-app:${{ github.sha }} . - name: Login to DockerHub run: echo \\\"${{ secrets.DOCKER_PASSWORD }}\\\" | docker login -u \\\"${{ secrets.DOCKER_USERNAME }}\\\" --password-stdin - name: Push image run: docker push my-app:${{ github.sha }} - name: Set up kubectl uses: azure\/setup-kubectl@v3 - name: Deploy to Kubernetes run: | kubectl apply -f k8s\/deployment.yaml \u30dd\u30a4\u30f3\u30c8 GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u306b Push \u3055\u308c\u308b\u3068\u81ea\u52d5\u30c8\u30ea\u30ac\u30fc secrets \u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u8a8d\u8a3c\u60c5\u5831\u3092\u5b89\u5168\u306b\u7ba1\u7406 kubectl \u3092\u4f7f\u3063\u3066\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u3092\u9069\u7528 \ud83d\udca1 \u3069\u3061\u3089\u3092\u9078\u3076\uff1f \u89b3\u70b9JenkinsGitHub Actions\u5c0e\u5165\u306e\u624b\u8efd\u3055\u81ea\u524d\u3067\u30b5\u30fc\u30d0\u69cb\u7bc9\u304c\u5fc5\u8981GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3068\u9023\u643a\u3059\u308b\u3060\u3051\u67d4\u8edf\u6027\u9ad8\u3044\uff08\u30d7\u30e9\u30b0\u30a4\u30f3\u8c4a\u5bcc\uff09\u6a19\u6e96\u69cb\u6210\u3067\u5341\u5206\u306a\u3053\u3068\u304c\u591a\u3044\u904b\u7528\u30b3\u30b9\u30c8\u3084\u3084\u91cd\u3044\u8efd\u91cf\u3001GitHub\u4e0a\u3067\u5b8c\u7d50 \ud83d\udccc \u5b9f\u969b\u306e\u6ce8\u610f\u70b9 kubectl \u3092\u4f7f\u3046\u306b\u306f kubeconfig \u306e\u7528\u610f\u304c\u5fc5\u8981 \u30ec\u30b8\u30b9\u30c8\u30ea\u3084\u30af\u30e9\u30b9\u30bf\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306b\u306f Secrets\u306e\u8a2d\u5b9a \u304c\u4e0d\u53ef\u6b20 \u30c7\u30d7\u30ed\u30a4\u524d\u306b kubectl diff \u3067\u5dee\u5206\u78ba\u8a8d\u3092\u81ea\u52d5\u5316\u3059\u308b\u306e\u3082\u304a\u3059\u3059\u3081 \ud83c\udfc1 \u307e\u3068\u3081 CI\/CD\u30c4\u30fc\u30eb\u3092\u4f7f\u3048\u3070\u3001\u6b21\u306e\u3088\u3046\u306a\u81ea\u52d5\u5316\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a\", \"Japanese Female\");\n                }\n            };\n        <\/script>\n    <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 \u306f\u3058\u3081\u306b\uff1aCI\/CD\u3068Kubernetes\u306e\u95a2\u4fc2<\/h3>\n\n\n\n<p>CI\/CD\uff08\u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\uff0f\u7d99\u7d9a\u7684\u30c7\u30ea\u30d0\u30ea\u30fc\uff09\u30c4\u30fc\u30eb\u3092\u4f7f\u3046\u3068\u3001<strong>\u30b3\u30fc\u30c9\u306e\u5909\u66f4\u304b\u3089Kubernetes\u3078\u306e\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4<\/strong>\u307e\u3067\u3092\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u884c\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305f\u3068\u3048\u3070\u3001\u6b21\u306e\u3088\u3046\u306a\u6d41\u308c\u3067\u3059\uff1a<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-css\" data-lang=\"CSS\"><code>1. Git \u306b Push\n2. Jenkins \u307e\u305f\u306f GitHub Actions \u304c\u30d3\u30eb\u30c9\uff06Docker\u30a4\u30e1\u30fc\u30b8\u4f5c\u6210\n3. \u30a4\u30e1\u30fc\u30b8\u3092\u30b3\u30f3\u30c6\u30ca\u30ec\u30b8\u30b9\u30c8\u30ea\u306b push\n4. kubectl apply \u306a\u3069\u3067 Kubernetes \u306b\u30c7\u30d7\u30ed\u30a4<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\ude80 Jenkins \u304b\u3089\u306e\u30c7\u30d7\u30ed\u30a4\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Jenkinsfile\uff08\u4f8b\uff09<\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-css\" data-lang=\"CSS\"><code>pipeline {\n  agent any\n\n  stages {\n    stage(&#39;Build Docker Image&#39;) {\n      steps {\n        script {\n          dockerImage = docker.build(&quot;my-app:${BUILD_NUMBER}&quot;)\n        }\n      }\n    }\n\n    stage(&#39;Push to Registry&#39;) {\n      steps {\n        script {\n          docker.withRegistry(&#39;https:\/\/registry.example.com&#39;, &#39;docker-creds&#39;) {\n            dockerImage.push()\n          }\n        }\n      }\n    }\n\n    stage(&#39;Deploy to Kubernetes&#39;) {\n      steps {\n        sh &#39;kubectl apply -f k8s\/deployment.yaml&#39;\n      }\n    }\n  }\n}<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul>\n<li>Jenkins \u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067 Docker \u3092\u30d3\u30eb\u30c9<\/li>\n\n\n\n<li>\u30ec\u30b8\u30b9\u30c8\u30ea\u306b push\uff08\u4e8b\u524d\u306b\u8a8d\u8a3c\u8a2d\u5b9a\u304c\u5fc5\u8981\uff09<\/li>\n\n\n\n<li><code>kubectl apply<\/code> \u3067 Kubernetes \u306b\u53cd\u6620<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udded GitHub Actions \u304b\u3089\u306e\u30c7\u30d7\u30ed\u30a4\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><code>.github\/workflows\/deploy.yaml<\/code><\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-css\" data-lang=\"CSS\"><code>name: Deploy to Kubernetes\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  build-and-deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout code\n      uses: actions\/checkout@v3\n\n    - name: Set up Docker\n      uses: docker\/setup-buildx-action@v2\n\n    - name: Build Docker image\n      run: docker build -t my-app:${{ github.sha }} .\n\n    - name: Login to DockerHub\n      run: echo &quot;${{ secrets.DOCKER_PASSWORD }}&quot; | docker login -u &quot;${{ secrets.DOCKER_USERNAME }}&quot; --password-stdin\n\n    - name: Push image\n      run: docker push my-app:${{ github.sha }}\n\n    - name: Set up kubectl\n      uses: azure\/setup-kubectl@v3\n\n    - name: Deploy to Kubernetes\n      run: |\n        kubectl apply -f k8s\/deployment.yaml<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul>\n<li>GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u306b Push \u3055\u308c\u308b\u3068\u81ea\u52d5\u30c8\u30ea\u30ac\u30fc<\/li>\n\n\n\n<li>secrets \u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u8a8d\u8a3c\u60c5\u5831\u3092\u5b89\u5168\u306b\u7ba1\u7406<\/li>\n\n\n\n<li><code>kubectl<\/code> \u3092\u4f7f\u3063\u3066\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u3092\u9069\u7528<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udca1 \u3069\u3061\u3089\u3092\u9078\u3076\uff1f<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u89b3\u70b9<\/th><th>Jenkins<\/th><th>GitHub Actions<\/th><\/tr><\/thead><tbody><tr><td>\u5c0e\u5165\u306e\u624b\u8efd\u3055<\/td><td>\u81ea\u524d\u3067\u30b5\u30fc\u30d0\u69cb\u7bc9\u304c\u5fc5\u8981<\/td><td>GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3068\u9023\u643a\u3059\u308b\u3060\u3051<\/td><\/tr><tr><td>\u67d4\u8edf\u6027<\/td><td>\u9ad8\u3044\uff08\u30d7\u30e9\u30b0\u30a4\u30f3\u8c4a\u5bcc\uff09<\/td><td>\u6a19\u6e96\u69cb\u6210\u3067\u5341\u5206\u306a\u3053\u3068\u304c\u591a\u3044<\/td><\/tr><tr><td>\u904b\u7528\u30b3\u30b9\u30c8<\/td><td>\u3084\u3084\u91cd\u3044<\/td><td>\u8efd\u91cf\u3001GitHub\u4e0a\u3067\u5b8c\u7d50<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc \u5b9f\u969b\u306e\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<ul>\n<li><code>kubectl<\/code> \u3092\u4f7f\u3046\u306b\u306f kubeconfig \u306e\u7528\u610f\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u30ec\u30b8\u30b9\u30c8\u30ea\u3084\u30af\u30e9\u30b9\u30bf\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306b\u306f <strong>Secrets\u306e\u8a2d\u5b9a<\/strong> \u304c\u4e0d\u53ef\u6b20<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\u524d\u306b <code>kubectl diff<\/code> \u3067\u5dee\u5206\u78ba\u8a8d\u3092\u81ea\u52d5\u5316\u3059\u308b\u306e\u3082\u304a\u3059\u3059\u3081<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfc1 \u307e\u3068\u3081<\/h3>\n\n\n\n<p>CI\/CD\u30c4\u30fc\u30eb\u3092\u4f7f\u3048\u3070\u3001\u6b21\u306e\u3088\u3046\u306a<strong>\u81ea\u52d5\u5316\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3<\/strong>\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"92\" src=\"https:\/\/itstudy365.com\/blog\/wp-content\/uploads\/2025\/06\/image-2-1024x92.png\" alt=\"\" class=\"wp-image-1595\" srcset=\"https:\/\/itstudy365.com\/blog\/wp-content\/uploads\/2025\/06\/image-2-1024x92.png 1024w, https:\/\/itstudy365.com\/blog\/wp-content\/uploads\/2025\/06\/image-2-300x27.png 300w, https:\/\/itstudy365.com\/blog\/wp-content\/uploads\/2025\/06\/image-2-768x69.png 768w, https:\/\/itstudy365.com\/blog\/wp-content\/uploads\/2025\/06\/image-2.png 1042w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[56],"_links":{"self":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts\/1594"}],"collection":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/comments?post=1594"}],"version-history":[{"count":1,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts\/1594\/revisions"}],"predecessor-version":[{"id":1596,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts\/1594\/revisions\/1596"}],"wp:attachment":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/media?parent=1594"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/categories?post=1594"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/tags?post=1594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}