$30 off During Our Annual Pro Sale. View Details »

10x deployment frequency using GitLab Flow and GitHub Actions on AWS ECS

10x deployment frequency using GitLab Flow and GitHub Actions on AWS ECS

English version of this slide
https://speakerdeck.com/tadashi0713/depuroipin-du-wo10bei-nisita-burantizhan-lue-togithub-actions-on-aws-ecs

#githubactions #devops #awsecs #cicd #gitlabflow

Tadashi Nemoto

May 10, 2021
Tweet

More Decks by Tadashi Nemoto

Other Decks in Technology

Transcript

  1. 10x deployment frequency
    using GitLab Flow and
    GitHub Actions on AWS ECS
    Tadashi Nemoto

    View Slide

  2. Introduction
    ● Tadashi Nemoto
    ● Exawizards, Inc.
    ● Platform Engineer (DevOps Engineer)
    ○ Introduce and improve CI / CD pipelines
    ○ Maintain production / develop environments
    ○ Introduce Test Automation

    View Slide

  3. Have you introduced CI / CD ?

    View Slide

  4. Are these CI / CD pipelines
    optimized for current
    product / organization?

    View Slide

  5. State of DevOps Report 2019

    View Slide

  6. State of DevOps Report 2018

    View Slide

  7. State of DevOps Report 2018

    View Slide

  8. Startup companies need speed to market

    View Slide

  9. View Slide

  10. Deployment Frequency(27 deploys / 2 weeks)
    10x Deployment Frequency

    View Slide

  11. Outlines
    ● Previous CI /CD pipelines and deployment flows
    ● What I improved
    ○ Jenkins → GitHub Actions on AWS ECS
    ○ Git Flow → GitLab Flow
    ● Effect of improvements
    ● Challenges

    View Slide

  12. Previous CI / CD pipelines
    and deployment flows

    View Slide

  13. Previous CI / CD・Deployment flows
    ● Hashicorp Nomad on AWS
    ○ develop, staging, production environments
    ○ Difficult to create multiple development environments
    ● Git Flow as branching strategy
    ○ Usages are slightly different depending on teams
    ● Jenkins on AWS
    ○ Some deployments to production depend on us

    View Slide

  14. Enable small, autonomous
    deployments

    View Slide

  15. Increase deployment
    frequency

    View Slide

  16. Improvement ①
    Jenkins → GitHub Actions on AWS ECS

    View Slide

  17. Jenkins
    ● Maintenance cost
    ○ Update versions, plugins
    ○ Add machines, scale
    ○ Authority management, Security, etc.
    ● Need dedicated members or teams
    ● Not suitable for autonomous deployments

    View Slide

  18. SaaS CI / CD tools

    View Slide

  19. Limitation of deployment

    View Slide

  20. GitHub Actions self-hosted runners

    View Slide

  21. GitHub Actions self-hosted runners
    ● GitHub Actions provides self-hosted runners
    ● No additional charge
    ● Compatible both self-hosted and
    GitHub-hosted runners
    ○ Deploy → self-hosted runners
    ○ Test → GitHub-hosted runners
    ● No need to maintain the management part of a
    CI / CD workflow (like a Jenkins master instance)

    View Slide

  22. GitHub Actions self-hosted runners on AWS ECS

    View Slide

  23. https://techblog.exawizards.com/entry/2020/11/04/100000

    View Slide

  24. Improvement ②
    Git Flow → GitLab Flow

    View Slide

  25. Git Flow

    View Slide

  26. Git Flow
    ● Works well for projects with fixed release timing
    ○ Mobile apps(1 release / 1~2 weeks)
    ● Less beneficial for projects API / Frontend projects
    ● More complex branch management, and not
    suitable for deploying to production frequently
    ○ Creating release branches, Hotfix branches, Tags

    View Slide

  27. GitHub Flow

    View Slide

  28. GitHub Flow
    Prod
    env
    ︖env
    ● Simpler branch management
    ○ master / feature branch
    ● Enable high deployment frequency
    ● Problems with
    verification environment
    ○ master branch = prod environment
    ○ staging environment︖
    ○ development environment︖
    ︖env

    View Slide

  29. I want high deployment frequency
    while utilizing current environments
    (develop, staging, production)

    View Slide

  30. GitLab Flow
    ● feature branch → merge to master branch
    ○ Same as GitHub Flow
    ● GitLab Flow allows to have branch
    for a release
    ○ master branch → staging env
    ○ production branch → production env
    ○ Merge to production branch
    for production release
    Staging
    env
    Prod
    env

    View Slide

  31. Deploy to develop environment (workflow_dispatch)

    View Slide

  32. Automatically generate release pull requests
    Staging
    env
    Prod
    env

    View Slide

  33. https://techblog.exawizards.com/entry/2021/01/28/113812

    View Slide

  34. Effect of improvements

    View Slide

  35. Deployment Frequency(4 deploys / 1 month)

    View Slide

  36. Deployment Frequency(27 deploys / 2 weeks)

    View Slide

  37. Deployment Frequency(27 deploys / 2 weeks)
    10x Deployment Frequency

    View Slide

  38. State of DevOps Report 2019

    View Slide

  39. Small, autonomous deployments

    View Slide

  40. Challenges

    View Slide

  41. Continuous monitoring / improvement

    View Slide

  42. PR based environments / drop self-hosted runners
    Staging
    env
    PR1 env
    PR2 env

    View Slide

  43. Continuous Testing / Inspection

    View Slide

  44. Conclusion

    View Slide

  45. Message(Key takeaways)
    ● Important to improve deployment frequency,
    especially startups
    ● I achieved 10x deployment frequency
    by 2 improvements
    ○ Jenkins → GitHub Actions on AWS ECS
    ○ Git Flow → GitLab Flow
    ● Continuous monitoring / improvement

    View Slide