Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ベンチャー入社後の3年間でDevOps実践して開発・運用体験を劇的に改善した話

 ベンチャー入社後の3年間でDevOps実践して開発・運用体験を劇的に改善した話

Tomohiko Ozawa

June 22, 2023
Tweet

More Decks by Tomohiko Ozawa

Other Decks in Programming

Transcript

  1. © 2023 SRE Holdings Corporation • (@kota65535) • • ⁃

    ⁃ ⁃ ⁃ CI/CD ⁃ • AWS ⁃ AWS Certified Solution Architect Professional 3
  2. © 2023 SRE Holdings Corporation • Continuous Integration ⁃ •

    Continuous Delivery ⁃ • Microservices ⁃ IF ⾒ • Infrastructure as Code ⁃ • Monitoring and Logging ⁃ • Communication and Collaboration ⁃ DevOps by AWS 6
  3. © 2023 SRE Holdings Corporation 8 Backend Java Spring Boot

    MySQL OpenAPI Docker AWS ECS Python FastAPI Frontend Infra/Monitoring TypeScript React Material UI Emotion AWS S3 AWS CloudFront Vitest Cypress AWS Terraform Ansible GitHub GitHub Actions Envoy CloudWatch CI/CD X-Ray SonarCloud Trivy Vite
  4. © 2023 SRE Holdings Corporation • CI/CD : GitHub Actions

    ⁃ GitHub ⾒ ⁃ Action • setup-java: Java • github-openvpn-connect-action: OpenVPN • : GitHub Flow ⁃ main Feature ⁃ vs. Git Flow • Web • • ⁃ ⁃ CI/CD 10
  5. © 2023 SRE Holdings Corporation • App Repo ⁃ ⁃

    ⁃ • : foo-front, foo-back ⁃ CI • Infra Repo ⁃ (Terraform) ⁃ App Repo ⁃ • : dev, stg, prod ⁃ CD 11 foo ├── build.gradle ├── foo-back └── foo-front foo-infra ├── envs │ ├── dev │ ├── prod │ └── stg ├── files └── modules
  6. © 2023 SRE Holdings Corporation • 1 2 • •

    Pros. ⁃ ⁃ ⁃ • Cons. ⁃ CI ⁃ ⾒ • : ⁃ 1 ~8 ⁃ ⁃ ⾒ 頻 App Repo - vs 13
  7. © 2023 SRE Holdings Corporation • • • GNU Make

    ⁃ ⁃ ⾒ • Bazel ⁃ ⁃ • Gradle ⁃ ⁃ Java 頻 ⁃ App Repo - 14
  8. © 2023 SRE Holdings Corporation • Pros. ⁃ ⁃ Java

    ⁃ ⁃ ⁃ Gradle Wrapper ⁃ Groovy • Cons. ⁃ • • IntelliJ App Repo - Gradle 15
  9. © 2023 SRE Holdings Corporation • Language-agnostic • clean ⁃

    • check ⁃ • assemble ⁃ • build ⁃ check, assemble App Repo - Gradle 16
  10. © 2023 SRE Holdings Corporation • App Repo - Gradle

    (1/3) 17 assemble jar dockerBuild (Java) assemble npmBuild (Node) zip check test checkstyle check npmTest eslint
  11. © 2023 SRE Holdings Corporation • App Repo - Gradle

    (2/3) 18 assemble check assemble npmBuild (Node) zip check npmTest eslint assemble jar dockerBuild (Java) check test checkstyle
  12. © 2023 SRE Holdings Corporation • App Repo - Gradle

    (3/3) 19 assemble check assemble npmBuild (Node) zip check npmTest eslint assemble jar dockerBuild (Java) check test checkstyle
  13. © 2023 SRE Holdings Corporation • • ⁃ ⁃ build

    • ⁃ ⁃ check App Repo - (1/4) 20 Backend Frontend Build Check 📝
  14. © 2023 SRE Holdings Corporation 1. ⁃ paths- lter ⁃

    • • 2. ⁃ Gradle Project ⁃ App Repo - (2/4) 21 foo-back: - foo-back/** - * foo-front: - foo-front/** - * $ cd foo-back $ gradle dependentProjects –q :foo-front
  15. © 2023 SRE Holdings Corporation • Composite Action • App

    Repo - (3/4) 22 prepare-build: runs-on: ubuntu-latest outputs: changed: ${{ steps.services.outputs.changed }} # 変更されたサービスのリスト affected: ${{ steps.services.outputs.affected }} # 影響のあるサービスのリスト steps: - name: Checkout uses: actions/checkout@v3 - name: Get services uses: ./.github/actions/get-services id: services
  16. © 2023 SRE Holdings Corporation • Matrix App Repo -

    (4/4) 23 build-changed: needs: - prepare-build if: ${{ needs.prepare-build.outputs.changed != '[]' }} strategy: matrix: service: ${{ fromJSON(needs.prepare-build.outputs.changed) }} uses: ./.github/workflows/build-service.yml with: service: ${{ matrix.service }} check-affected: needs: - prepare-build if: ${{ needs.prepare-build.outputs.affected != '[]' }} strategy: matrix: service: ${{ fromJSON(needs.prepare-build.outputs.affected) }} uses: ./.github/workflows/check-service.yml with: service: ${{ matrix.service }}
  17. © 2023 SRE Holdings Corporation • PR / PR Push

    • Gradle build / check App Repo - CI: Build (2/4) 26
  18. © 2023 SRE Holdings Corporation • (Sonar Scanner) ⁃ ⁃

    SonarCloud • PR App Repo - CI: Build (3/4) 27
  19. © 2023 SRE Holdings Corporation • PR / PR Push

    • Gradle build / check App Repo - CI: Release (2/6) 30
  20. © 2023 SRE Holdings Corporation • CodeArtifact Publish ⁃ Bundle

    (Jar) ⁃ OpenAPI Document (YAML) • ECR Push ⁃ Docker Image • API & Publish ⁃ OpenAPI YAML HTML ⁃ Redoc ⁃ S3 App Repo - CI: Release (4/6) 32
  21. © 2023 SRE Holdings Corporation • Infra Repo Release ⁃

    Repository Dispatch ⁃ • • • App Repo - CI: Release (5/6) 33 { "services": [ { "name": "foo-back", "version": "1.2.3", "island": "01" } ] }
  22. © 2023 SRE Holdings Corporation • Slack • @here ⁃

    Release App Repo - CI: Release (6/6) 34
  23. © 2023 SRE Holdings Corporation Infra Repo CD: Plan (3/4)

    40 • PR PR Plan ⁃ [Click here] Plan
  24. © 2023 SRE Holdings Corporation Infra Repo CD: Apply (2/4)

    43 • Apply OK ⁃ • Terraform Apply ⁃ Plan Plan
  25. © 2023 SRE Holdings Corporation Infra Repo CD: Apply (4/4)

    45 • ⁃ CodeArtifact Bundle ⁃ Hosting S3 ⁃ CloudFront
  26. © 2023 SRE Holdings Corporation • Terraform Providers ⁃ terraform-provider-maven

    ⁃ terraform-provider-unarchive ⁃ terraform-provider-temporary • Terraform Modules ⁃ terraform-aws-github-work ow-dispatch ⁃ terraform-aws-github-work ow-dispatch-slack ⁃ terraform-aws-s3-deployment CI/CD OSS 47 • GitHub Actions ⁃ github-terraform-plan-comment-action ⁃ github-terraform-plan-slack-action ⁃ github-workflow-dispatch-action ⁃ github-workflow-dispatch-slack-action ⁃ github-openvpn-connect-action ⁃ github-asdf-parse-action ⁃ github-git-config-action ⁃ github-template-sync-action ⁃ github-template-rename-action
  27. © 2023 SRE Holdings Corporation • ⁃ PR 10 Dev

    ⁃ ⁃ • ⁃ ⁃ • ⁃ ChatOps Apply ⁃ 築 CI/CD 48