0808-OSSによるCI_CD環境構築.pdf

3218b28de1401d518a2fdfa198bec1b5?s=47 cheng
August 08, 2019

 0808-OSSによるCI_CD環境構築.pdf

3218b28de1401d518a2fdfa198bec1b5?s=128

cheng

August 08, 2019
Tweet

Transcript

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

  2. About me Jianqiang Cheng(ͪΜ) Field Engineer at Rancher Labs. cheng@rancher.com

    slack.rancher.jp ▪Favorite technologies: Rancher, Kubernetes, AWS, Jenkins. ▪Certifications:
  3. 3 ໨࣍ • CI/CDͱ͸ • RancherʹΑΔCI/CD؀ڥߏங • Rancher PipelineʹΑΔCI/CD •

    ·ͱΊ
  4. 4 CIͱ͸ CIͱ͸「Continuous Integration(ܧଓతΠϯςΟάϨʔγϣϯ)」ͷུͰ͢ɻ • ։ൃऀ͕ιʔείʔυΛසൟʹιʔεϦϙδτϦʹϚʔδ͠ɺͦͷ౓ʹࣗಈԽ͞ΕͨϏϧυɺ୯ମςετͱ੩త ίʔυղੳΛ࣮ߦ͠·͢ɻ Compile & Package

    Run Unit Tests Static Code Analysis Committer: jdoe Story:25 Commit ID: 113 CODE UNIT TEST ˙ϙΠϯτ • සൟʹίʔυΛڞ༗ϦϙδτϦʹίϛοτ͢Δ • ίϛοτΛτϦΨʔʹࣗಈϏϧυͱςετ͕࣮ߦ͞ΕΔ • Ϗϧυͱςετ͕ࣦഊͨ࣌͠ͷϑΟʔυόοΫ ໰୊ͷૣظൃݟ
  5. 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
  6. Build Environments Artifacts Manager Code Quality Code Review Pipeline Tool

    SCM Test Automation CI/CDͷίϯϙωʔτߏ੒ਤ
  7. 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ͷπʔϧߏ੒ྫ
  8. CI/CDͷπʔϧͷ࿈ܞྫ CICD環境 ① Gitリポジトリに資 源をプッシュ ② ・チェックアウト ・ビルド ・単体テスト ・コード解析を実施

    ⑥アーティファクト リポジトリに資源 (Jar,Docker Image) を登録 開発者 /リーダ Ansible デプロイ対象 ⑧DB資源をマイグ レーション ③ ・単体テスト、 カバレッジレ ポートを表示 リーダ ④ ・QAチェック ・リリースブラン チへのマージ ⑨Slack通知・ ChatOps ⑦アーティファクトリポジトリの 資源をデプロイ ⑤ Dokcerビルド、プッ シュ
  9. 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
  10. 10 RancherʹΑΔCI/CD؀ڥߏங - Rancherͱ͸ ▪Rancherͱ͸ • Rancher Kubernetes Engine(RKE)ܦ༝Ͱɺ ͋ΒΏΔΠϯϑϥ؀ڥ্ʹKubernetesΫϥε

    λΛߏஙͱ؅ཧ • Amazon EKS、Azure AKS、Google GKEͳ ͲͷϚωδϝϯτͷΫϥελΛߏஙͱ؅ཧ • طଘͷΫϥελΛΠϯϙʔτͯ͠RancherͰ ؅ཧ
  11. 11 RancherʹΑΔCI/CD؀ڥߏங - RancherΧλϩάػೳͱ͸ ˙RancherΧλϩάػೳͱ͸ HelmϕʔεͷΞϓϦέʔγϣϯΛɺը໘͔Β؆୯ઃఆͯ͠ɺσϓϩΠ͢Δػೳ ˞Helm͸、KubernetesͷύοέʔδϚωʔδϟʔͰ͢

  12. 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 役割 ツール
  13. 13 RancherʹΑΔCI/CD؀ڥߏங - Jenkins ˙RancherΧλϩάը໘͔ΒJenkinsΛબ୒͠ɺJenkinsઃఆը໘͔ΒඞཁͳύϥϝʔλʔΛೖྗͯ͠σϓϩΠ

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

    • σʔλόοΫΞοϓઌ • LDAP࿈ܞ • ͳͲ
  15. 15 RancherʹΑΔCI/CD؀ڥߏங - Jenkins ˙JenkinsΠϯετʔϧ݁Ռ֬ೝ ▪参考:Jenkinsの初期ユーザーアカウント情報をクラスターのsecretsから参照

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

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

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

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

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

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

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

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

  24. Rancher Pipelineには、下記の5種類のPipelineのステップを 事前に⽤意されています。 Pipelinesͷઃఆ εςοϓछྨ ༻్ Run Script ࣮ߦ؀ڥͷϕʔεΠϝʔδΛࢦఆͯ͠ɺεΫϦϓτ Λ࣮ߦ͢ΔλΠϓ

    Build and Publish Images DockerΠϝʔδͷϏϧυͱύογϡ Publish Catalog Template ΧλϩάͷHelm Chartͷߋ৽ όʔδϣϯΞοϓ Deploy YAML ϚχϑΣετϑΝΠϧʹΔσϓϩΠ Deploy Catalog App ΧλϩάػೳʹΑΔσϓϩΠ ▪参考:Nexus、Sonarqubeと連携するビルドのステップの設定例↓
  25. Pipelineͷฤू͸ɺyamlϑΝΠϧʹରͯ͠௚઀ฤू΋Ͱ͖·͢ɻ Pipelinesͷઃఆ

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

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