Slide 1

Slide 1 text

1 OSSʹΑΔCI/CD؀ڥߏங Cheng ͪΜ 2019/08/08

Slide 2

Slide 2 text

About me Jianqiang Cheng(ͪΜ) Field Engineer at Rancher Labs. [email protected] slack.rancher.jp ■Favorite technologies: Rancher, Kubernetes, AWS, Jenkins. ■Certifications:

Slide 3

Slide 3 text

3 ໨࣍ • CI/CDͱ͸ • RancherʹΑΔCI/CD؀ڥߏங • Rancher PipelineʹΑΔCI/CD • ·ͱΊ

Slide 4

Slide 4 text

4 CIͱ͸ CIͱ͸「Continuous Integration(ܧଓతΠϯςΟάϨʔγϣϯ)」ͷུͰ͢ɻ • ։ൃऀ͕ιʔείʔυΛසൟʹιʔεϦϙδτϦʹϚʔδ͠ɺͦͷ౓ʹࣗಈԽ͞ΕͨϏϧυɺ୯ମςετͱ੩త ίʔυղੳΛ࣮ߦ͠·͢ɻ Compile & Package Run Unit Tests Static Code Analysis Committer: jdoe Story:25 Commit ID: 113 CODE UNIT TEST ˙ϙΠϯτ • සൟʹίʔυΛڞ༗ϦϙδτϦʹίϛοτ͢Δ • ίϛοτΛτϦΨʔʹࣗಈϏϧυͱςετ͕࣮ߦ͞ΕΔ • Ϗϧυͱςετ͕ࣦഊͨ࣌͠ͷϑΟʔυόοΫ ໰୊ͷૣظൃݟ

Slide 5

Slide 5 text

5 CDͱ͸ CDͱ͸「Continuous Delivery(ܧଓతσϦόϦʔ)」ͷུͰ͢ɻ • $*ͷϏϧυ΍ςετ͚ͩͰͳ͘ɺͦͷޙͷςετ؀ڥͳͲ΁ͷσϓϩΠɺςετɺϦϦʔεͳͲͷϓϩηεΛࣗ ಈԽ͠·͢ɻ ˙ϙΠϯτ • Πϯϑϥ(Ϋϥ΢υ,Docker,k8s)ߏஙͷࣗಈԽ • ςετͷࣗಈԽ • σϓϩΠͷࣗಈԽ • ΞδϟΠϧ։ൃ ૣ͘ςετʗϦϦʔεͯ͠ϑΟʔυόοΫΛಘ ΔͷαΠΫϧ Create clustered env Tear down ST env Deploy Code Run Perf Test Run Security Test Run Ops Test Prod deploy Run Tests Create ST env Deploy Code Load Test Data Compile & Package Run Unit Tests Static Code Analysis Committer: jdoe Story:25 Commit ID: 113 CODE UNIT TEST LINK TEST ASSEMBLY TEST BUSINESS PROCESS TEST USER ACCEPTANCE TEST

Slide 6

Slide 6 text

Build Environments Artifacts Manager Code Quality Code Review Pipeline Tool SCM Test Automation CI/CDͷίϯϙωʔτߏ੒ਤ

Slide 7

Slide 7 text

Projects Projects-A Projects-B(K8S) Projects-C(AWS) Pipeline Jenkins Jenkins Jenkins SCM Gitlab Github Bitbucket Build Gradle, Grunt Maven AWS CodeBuild Static Code Analysis SonarQube SonarQube SonarQube Artifacts Nexus, Docker registry Harbor Nexus, S3 Test Selenium, Jmeter Selenium Selenium Deploy Jenkins Plugin, Ansible kubectl, helmCLI AWS CloudFormation AWS CodeDeploy CI/CDͷπʔϧߏ੒ྫ

Slide 8

Slide 8 text

CI/CDͷπʔϧͷ࿈ܞྫ CICD環境 ① Gitリポジトリに資 源をプッシュ ② ・チェックアウト ・ビルド ・単体テスト ・コード解析を実施 ⑥アーティファクト リポジトリに資源 (Jar,Docker Image) を登録 開発者 /リーダ Ansible デプロイ対象 ⑧DB資源をマイグ レーション ③ ・単体テスト、 カバレッジレ ポートを表示 リーダ ④ ・QAチェック ・リリースブラン チへのマージ ⑨Slack通知・ ChatOps ⑦アーティファクトリポジトリの 資源をデプロイ ⑤ Dokcerビルド、プッ シュ

Slide 9

Slide 9 text

9 RancherʹΑΔCI/CD؀ڥߏங - Rancherͱ͸ ■Rancherͱ͸ ΦϯϓϨϛε΍ɺ͋ΒΏΔΫϥ΢υαʔϏε্ʹKubernetesΫϥελͷߏஙٴͼ؅ཧ͕Ͱ͖Δίϯς φʔ؅ཧϓϥοτϑΥʔϜ Unified Cluster Operations Self Service Kubernetes Environments Infrastructure GKE AKS EKS Any RKE RKE - User Interface - Service Catalog - CI/CD - Monitoring - Logging - Alerting - Global DNS - Backups & DR ITOps DevOps - Provisioning - Auth/RBAC - Policy - Security - Capacity - Cost

Slide 10

Slide 10 text

10 RancherʹΑΔCI/CD؀ڥߏங - Rancherͱ͸ ■Rancherͱ͸ • Rancher Kubernetes Engine(RKE)ܦ༝Ͱɺ ͋ΒΏΔΠϯϑϥ؀ڥ্ʹKubernetesΫϥε λΛߏஙͱ؅ཧ • Amazon EKS、Azure AKS、Google GKEͳ ͲͷϚωδϝϯτͷΫϥελΛߏஙͱ؅ཧ • طଘͷΫϥελΛΠϯϙʔτͯ͠RancherͰ ؅ཧ

Slide 11

Slide 11 text

11 RancherʹΑΔCI/CD؀ڥߏங - RancherΧλϩάػೳͱ͸ ˙RancherΧλϩάػೳͱ͸ HelmϕʔεͷΞϓϦέʔγϣϯΛɺը໘͔Β؆୯ઃఆͯ͠ɺσϓϩΠ͢Δػೳ ˞Helm͸、KubernetesͷύοέʔδϚωʔδϟʔͰ͢

Slide 12

Slide 12 text

12 RancherʹΑΔCI/CD؀ڥߏங ˙લఏ৚݅ɿ Rancher্ʹCI/CD؀ڥ༻ͷΫϥελʔΛ࡞੒ࡁ ˙ߏஙखॱ RancherΧλϩάػೳ͔ΒɺԼهͷCI/CDͷπʔϧΛΠϯετʔϧ͠·͢ɻ ※ Rancher͕ͳͯ͘΋ɺHelm CLI͚ͩͰ΋ɺߏஙͰ͖·͢ɻ ・アプリのソースコードを管理 ・アプリのHelm Chartを管理 ・CI/CDのPipeline管理 ・Master /Slave構成でPipeline実行毎に、Slaveを起動 ・コンテナイメージを管理 ・プライベートライブラリ管理 ・リモートリポジトリをローカルキャッシュ ・ソースコードの静的解析 GitLab Jenkins Nexus SonarQube 役割 ツール

Slide 13

Slide 13 text

13 RancherʹΑΔCI/CD؀ڥߏங - Jenkins ˙RancherΧλϩάը໘͔ΒJenkinsΛબ୒͠ɺJenkinsઃఆը໘͔ΒඞཁͳύϥϝʔλʔΛೖྗͯ͠σϓϩΠ

Slide 14

Slide 14 text

14 RancherʹΑΔCI/CD؀ڥߏங - Jenkins ˙Jenkinsઃఆը໘্ͷ߲໨આ໌(100߲໨͙Β͍)ʹैͬͯɺઃఆ߲໨ Λࢦఆ • ֎෦͔ΒͷΞΫηε(LB,Ingress,NodePort) • ӬଓԽϘϦϡʔϜPVC • σʔλόοΫΞοϓઌ • LDAP࿈ܞ • ͳͲ

Slide 15

Slide 15 text

15 RancherʹΑΔCI/CD؀ڥߏங - Jenkins ˙JenkinsΠϯετʔϧ݁Ռ֬ೝ ■参考:Jenkinsの初期ユーザーアカウント情報をクラスターのsecretsから参照

Slide 16

Slide 16 text

16 RancherʹΑΔCI/CD؀ڥߏங - Jenkins ˙Jenkins-kubernetesϓϥάΠϯ͕σϑΥϧτͰઃఆ͞Ε͍ͯ·͢ҝɺ ௥Ճઃఆͳ͠ͰɺJenkins εϨʔϒ(Pod)ͷࣗಈ࡞੒͕ରԠ ■参考:複数なJenkinsジョブが同時実行時に、必要な数のスレーブ(Pod)が自動に作成でされています。

Slide 17

Slide 17 text

17 RancherʹΑΔCI/CD؀ڥߏங - SonarQube ˙ಉ༷ͳ΍ΓํͰɺSonarQubeΛσϓϩΠ

Slide 18

Slide 18 text

18 RancherʹΑΔCI/CD؀ڥߏங - Nexus ˙ಉ༷ͳ΍ΓํͰɺNexusΛσϓϩΠ

Slide 19

Slide 19 text

19 RancherʹΑΔCI/CD؀ڥߏங - Gitlab ˙HelmͷެࣜͷϦϙδτϦʹ͸ɺ࠷৽൛Gitlab͕ͳ͍ҝɺGitlabͷެࣜͷHelm ChartϦϙδτϦΛΧλϩά ʹ௥Ճ

Slide 20

Slide 20 text

20 RancherʹΑΔCI/CD؀ڥߏங - Gitlab ˙ಉ༷ͳ΍ΓํͰɺGitlabΛσϓϩΠ͠·͢ɻ

Slide 21

Slide 21 text

21 RancherʹΑΔCI/CD؀ڥߏங – ͦͷͨ ˙ಉ༷ͳ΍ΓํͰɺͦͷଞͷඞཁͳOSS΋σϓϩΠͰ͖Δ Helm chart͕ଘࡏ͢Ε͹ɺΧλϩάը໘͔Β؆୯ʹσϓϩΠͰ͖Δ

Slide 22

Slide 22 text

Rancher Pipelinesͱ͸ Rancherʹ౷߹͞ΕͨCI/CDػೳͰ͢ɻPipelineͷฤू͸ը໘UI͔Βɺߦ͑·͢ɻ Rancher Pipelinesʹ͍ͭͯ ■参考:Pipelinesの各ステージの作成変更画面 ■参考:Pipelinesのステップの作成変更画面

Slide 23

Slide 23 text

CI/CDͷPipelineͷ࣮ߦ݁Ռ͸ɺը໘͔Β֬ೝͰ͖·͢ɻ Rancher Pipelinesʹ͍ͭͯ ■参考:Pipelinesの各ステージの実行結果やログの確認画面 ■参考:通知設定がありの場合、Pipelinesの実行結果をSlackに通知

Slide 24

Slide 24 text

Rancher Pipelineには、下記の5種類のPipelineのステップを 事前に⽤意されています。 Pipelinesͷઃఆ εςοϓछྨ ༻్ Run Script ࣮ߦ؀ڥͷϕʔεΠϝʔδΛࢦఆͯ͠ɺεΫϦϓτ Λ࣮ߦ͢ΔλΠϓ Build and Publish Images DockerΠϝʔδͷϏϧυͱύογϡ Publish Catalog Template ΧλϩάͷHelm Chartͷߋ৽ όʔδϣϯΞοϓ Deploy YAML ϚχϑΣετϑΝΠϧʹΔσϓϩΠ Deploy Catalog App ΧλϩάػೳʹΑΔσϓϩΠ ■参考:Nexus、Sonarqubeと連携するビルドのステップの設定例↓

Slide 25

Slide 25 text

Pipelineͷฤू͸ɺyamlϑΝΠϧʹରͯ͠௚઀ฤू΋Ͱ͖·͢ɻ Pipelinesͷઃఆ

Slide 26

Slide 26 text

26 SonarQube Nexus ・静的コード解析 GitLab ライブラリ管理: ・サードパーティlib ・プライベートlib Push 開発者 Jenkins Jenkins Jenkins 各種自動通知 Slaveが動的に拡張 テスト環境、ステージング環境、本番環境 APP ・ソース管理 ・Helm Chart管理 Helm CLIやRancherカタログ機能による デプロイ ・Helm ChartがGitlabから取得 ・DockerイメージがGitlabから取得 APP APP Rancher Pipeline機能 Kubernetesクラスター Rancher PipelineʹΑΔCICD؀ڥͷߏ੒ྫ Rancher Catalogs機能

Slide 27

Slide 27 text

• Rancher ΧλϩάػೳͰɺGUI͔ΒOSSͷCICDπʔϧΛ؆୯ʹσϓϩΠͰ͖·͢ɻ • Rancher Pipelinesͷ෼ذ੍ޚ͸·ͩऑ͍Ͱ͕͢ɺRancher্ʹγϯϓϧͳPipelinesΛ࡞੒ ͢Δࡍʹ͸͓קΊͰ͢ɻ • ࠓճ͸ɺCICDπʔϧͷσϓϩΠϨϕϧͷઆ໌ʹཹ·͓ͬͯΓ·͕͢ɺ࣮ࡍʹπʔϧؒͷ ࿈ܞͳͲͷπʔϧϨϕϧͷઃఆʹ΋ɺ৭ʑϋϚΔͱ͜Ζ͕͋Γ·͢ɻ ·ͱΊ

Slide 28

Slide 28 text

Thanks ͝੩ௌɺ͋Γ͕ͱ͏͍͟͝·͢。