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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Tomohiko Ozawa

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