{"id":1130,"date":"2019-05-25T16:52:44","date_gmt":"2019-05-25T13:52:44","guid":{"rendered":"https:\/\/artem.services\/?p=1130"},"modified":"2019-05-25T16:54:15","modified_gmt":"2019-05-25T13:54:15","slug":"aws-codebuild-%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d1%8f%d0%b5%d0%bc-%d0%b8%d0%bd%d0%ba%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d1%82%d0%bd%d1%8b%d0%b9-%d0%bd%d0%be%d0%bc%d0%b5%d1%80-%d1%81%d0%b1%d0%be","status":"publish","type":"post","link":"https:\/\/artem.services\/?p=1130","title":{"rendered":"AWS &#8212; CodeBuild:  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0431\u043e\u0440\u043a\u0438"},"content":{"rendered":"<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-214\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo.png\" alt=\"\" width=\"975\" height=\"450\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo.png 975w, https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo-300x138.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo-768x354.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2018\/11\/AWS-Logo-954x440.png 954w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/p>\n<p>\u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c <strong>CodeBuild<\/strong> \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0431\u043e\u0440\u043a\u0438, \u043a\u0430\u043a \u0432 \u0442\u043e\u043c \u0436\u0435 <strong>Jenkins<\/strong>&#39;\u0435 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443.<\/p>\n<p><img loading=\"lazy\" class=\"aligncenter wp-image-1131 size-full\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Facepalm.jpg\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Facepalm.jpg 640w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Facepalm-300x169.jpg 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0430 <a href=\"https:\/\/medium.com\/faun\/build-numbers-for-aws-codebuild-5f91f41e5ebd\" target=\"_blank\" rel=\"noopener noreferrer\">medium.com<\/a><\/p>\n<p>\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b:<\/p>\n<ul>\n<li>AWS SSM (Systems Manager Parameter Store)<\/li>\n<li>AWS Lambda<\/li>\n<li>AWS CloudWatch<\/li>\n<li>AWS IAM<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0435\u043c Parameter Store<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 <strong>AWS Systems Manager<\/strong> <strong>&#8212;<\/strong>&gt; <strong>Parameter Store<\/strong><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &quot;<strong>\/build-number\/artem-test<\/strong>&quot;<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-1132 aligncenter\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.33-PM.png\" alt=\"\" width=\"1018\" height=\"890\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.33-PM.png 1018w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.33-PM-300x262.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.33-PM-768x671.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.33-PM-954x834.png 954w\" sizes=\"(max-width: 1018px) 100vw, 1018px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u0417\u0430\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li>Type: String<\/li>\n<li>Value: 1<\/li>\n<\/ul>\n<p><img loading=\"lazy\" class=\"size-full wp-image-1133 aligncenter\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.54-PM.png\" alt=\"\" width=\"964\" height=\"606\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.54-PM.png 964w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.54-PM-300x189.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.54-PM-768x483.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.21.54-PM-954x600.png 954w\" sizes=\"(max-width: 964px) 100vw, 964px\" \/><\/p>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043d\u0430\u0448 &quot;<strong>Parameter store<\/strong>&quot;<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>AIM<\/strong> -&gt; <strong>Policy<\/strong><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e <strong>Policy<\/strong> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &quot;<strong>codebuild-buildnumber-ssm<\/strong>&quot; \u0434\u043b\u044f &quot;<strong>CodeBild<\/strong>&quot; \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n    &quot;Version&quot;: &quot;2012-10-17&quot;,\r\n    &quot;Statement&quot;: [\r\n        {\r\n            &quot;Effect&quot;: &quot;Allow&quot;,\r\n            &quot;Action&quot;: [\r\n                &quot;ssm:GetParameter&quot;,\r\n                &quot;ssm:GetParameters&quot;\r\n            ],\r\n            &quot;Resource&quot;: &quot;arn:aws:ssm:us-east-1:XXXXXXXXXXXX:parameter\/build-number\/*&quot;\r\n        }\r\n    ]\r\n<\/pre>\n<p>&nbsp;<\/p>\n<blockquote><p>XXXXXXXXXXXX &#8212; \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0439 AWS ID. \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u0439 \u0440\u0435\u0433\u0438\u043e\u043d.<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>AIM<\/strong> -&gt; <strong>Roles<\/strong> \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0440\u043e\u043b\u044c <strong>CodeBuild<\/strong> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0435\u043c\u0443 &quot;<strong>Attach<\/strong>&quot; \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e <strong>Policy<\/strong>.<\/p>\n<p><!--more--><\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0435\u043c Lambda \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 <strong>Lambda<\/strong> -&gt; &quot;<strong>Create function<\/strong>&quot;<\/p>\n<p>\u0417\u0430\u0434\u0430\u0435\u043c \u0438\u043c\u044f &quot;<strong>update-codebuild-build-number<\/strong>&quot; \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c &quot;<strong>Node.js 8.10<\/strong>&quot;<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-1134 aligncenter\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.30.44-PM.png\" alt=\"\" width=\"1918\" height=\"728\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.30.44-PM.png 1918w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.30.44-PM-300x114.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.30.44-PM-768x292.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.30.44-PM-1024x389.png 1024w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.30.44-PM-954x362.png 954w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.30.44-PM-1354x514.png 1354w\" sizes=\"(max-width: 1918px) 100vw, 1918px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nconst AWS = require('aws-sdk');\r\n\r\nconst ssm = new AWS.SSM();\r\n\r\nexports.handler = async (event) =&amp;gt; {\r\n    \r\n    const parameterName = '\/build-number\/' + event['detail']['project-name'];\r\n    \r\n    const getBuildNumberParams = {\r\n        Name: parameterName\r\n    };\r\n    \r\n    const getBuildNumberResponse = await ssm.getParameter(getBuildNumberParams).promise();\r\n    \r\n    const buildNumber = parseInt(getBuildNumberResponse.Parameter.Value);\r\n    \r\n    const setBuildNumberParams = {\r\n        Name: parameterName,\r\n        Type: 'String',\r\n        Value: (buildNumber + 1).toString(),\r\n        Overwrite: true\r\n    };\r\n    \r\n    const setBuildNumberResponse = await ssm.putParameter(setBuildNumberParams).promise();\r\n};\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>&nbsp;<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>AIM<\/strong> -&gt; <strong>Policy<\/strong><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e <strong>Policy<\/strong> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c &quot;<strong>lambda-buildnumber-ssm<\/strong>&quot; \u0434\u043b\u044f &quot;<strong>Lambda<\/strong>&quot; \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n{\r\n    &quot;Version&quot;: &quot;2012-10-17&quot;,\r\n    &quot;Statement&quot;: [        \r\n        {\r\n            &quot;Effect&quot;: &quot;Allow&quot;,\r\n            &quot;Action&quot;: [\r\n                &quot;ssm:GetParameter&quot;,\r\n                &quot;ssm:GetParameters&quot;,\r\n                &quot;ssm:PutParameter&quot;\r\n            ],\r\n            &quot;Resource&quot;: &quot;arn:aws:ssm:us-east-1:XXXXXXXXXXXX:parameter\/build-number\/*&quot;\r\n\t\t}\r\n\t]\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<blockquote><p>XXXXXXXXXXXX &#8212; \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0439 AWS ID. \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0432\u043e\u0439 \u0440\u0435\u0433\u0438\u043e\u043d.<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <strong>AIM<\/strong> -&gt; <strong>Roles<\/strong> \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0440\u043e\u043b\u044c <strong>Lambda<\/strong> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0435\u043c\u0443 &quot;<strong>Attach<\/strong>&quot; \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e <strong>Policy<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e CloudWatch<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 <strong>CloudWatch<\/strong> -&gt; &quot;<strong>Create rule<\/strong>&quot; -&gt; &quot;<strong>Event Pattern<\/strong>&quot;<\/p>\n<p>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 &#8212; <strong>CodeBuild<\/strong><\/p>\n<p>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c <strong>Event Type<\/strong> -&gt; &quot;<strong>CodeBuild Build State Change<\/strong>&quot;<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-1135 aligncenter\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.38.51-PM.png\" alt=\"\" width=\"1092\" height=\"908\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.38.51-PM.png 1092w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.38.51-PM-300x249.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.38.51-PM-768x639.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.38.51-PM-1024x851.png 1024w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.38.51-PM-954x793.png 954w\" sizes=\"(max-width: 1092px) 100vw, 1092px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c &quot;<strong>Specific state(s)<\/strong>&quot; \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f &quot;<strong>SUCCESS<\/strong>&quot; \u0438 &quot;<strong>FAILED<\/strong>&quot;<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-1136 aligncenter\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.49.01-PM.png\" alt=\"\" width=\"1018\" height=\"808\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.49.01-PM.png 1018w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.49.01-PM-300x238.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.49.01-PM-768x610.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-3.49.01-PM-954x757.png 954w\" sizes=\"(max-width: 1018px) 100vw, 1018px\" \/><\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a &quot;<strong>Targets<\/strong>&quot; \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432 &quot;<strong>Function<\/strong>&quot; &quot;<strong>update-codebuild-build-number<\/strong>&quot;<\/p>\n<p>\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c &quot;<strong>Create rule&quot;<\/strong>, \u0437\u0430\u0434\u0430\u0435\u043c \u0438\u043c\u044f &quot;<strong>update-codebuild-build-number<\/strong>&quot; \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c.<\/p>\n<p>&nbsp;<\/p>\n<h4>CodeBuild<\/h4>\n<p>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c &quot;<strong>buildspec.yml<\/strong>&quot;<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0431\u043b\u043e\u043a &quot;<strong>parameter-store<\/strong>&quot; \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nenv:\r\n  parameter-store:\r\n     BUILD_NUMBER: &quot;\/build-number\/artem-test&quot;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0441\u0431\u043e\u0440\u043a\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e &quot;<strong>BUILD_NUMBER<\/strong>&quot; \u043a\u043e\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0442\u0441\u044f.<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-1137 aligncenter\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-4.44.41-PM.png\" alt=\"\" width=\"1868\" height=\"744\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-4.44.41-PM.png 1868w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-4.44.41-PM-300x119.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-4.44.41-PM-768x306.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-4.44.41-PM-1024x408.png 1024w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-4.44.41-PM-954x380.png 954w, https:\/\/artem.services\/wp-content\/uploads\/2019\/05\/Screen-Shot-2019-05-25-at-4.44.41-PM-1354x539.png 1354w\" sizes=\"(max-width: 1868px) 100vw, 1868px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <strong>CodeCommit<\/strong> \u0438 <strong>Codebuild<\/strong> \u043c\u043e\u0436\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/artem.services\/?p=1121\" target=\"_blank\" rel=\"noopener noreferrer\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c CodeBuild \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0431\u043e\u0440\u043a\u0438, \u043a\u0430\u043a \u0432 \u0442\u043e\u043c \u0436\u0435 Jenkins&#39;\u0435 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0430 medium.com \u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b: AWS SSM (Systems Manager Parameter Store) AWS Lambda AWS CloudWatch AWS IAM &nbsp; \u0421\u043e\u0437\u0434\u0430\u0435\u043c Parameter Store \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u0435\u0440\u0432\u0438\u0441 AWS Systems Manager &#8212;&gt; Parameter Store &hellip; <a href=\"https:\/\/artem.services\/?p=1130\" class=\"more-link\">\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c<span class=\"screen-reader-text\"> &quot;AWS &#8212; CodeBuild:  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0431\u043e\u0440\u043a\u0438&quot;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24,37],"tags":[25,889,867,891,865,643,893,895],"_links":{"self":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1130"}],"collection":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1130"}],"version-history":[{"count":2,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1130\/revisions"}],"predecessor-version":[{"id":1139,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1130\/revisions\/1139"}],"wp:attachment":[{"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}