Wantedly の Deploy Flow の解説です。 規約とそれを強制する仕組みとして Wantedly が行っていることを紹介しています。
©2020 Wantedly, Inc.Deploy Flow at Wantedlyنͱڧ੍FORCIA Meetup #1 ʙDevOps͍͔ͬͯnightʙMar 10, 2020 - Shimpei OTSUBO @potsbo
View Slide
©2020 Wantedly, Inc.4IJNQFJ0UTVCP!QPUTCPDeveloper Experience SquadWantedly, Inc.KubernetesDev ToolsCI / CDAuthN / ZProductivity Dvorak
©2020 Wantedly, Inc.લఏͱͳΔ Wantedly ͷڥAWS ͕ϝΠϯ40 Engineers6 Infrastructure Engineers5 Kubernetes Clusters300 namespaces in totalGCP ͕Ұ෦ΦϯϓϨϛεҰͳ͍99% of services are on Kubernetes60 deploys per weekday
©2020 Wantedly, Inc.implement configureask / helpWantedly ͕ආ͚ΔΓํApp EngineersProducts infrastructureInfra Engineers
©2020 Wantedly, Inc.App EngineersInfra Engineersimplement Access through tools and APIsProducts infrastructureProvide toolsautomateWantedly ͷΓํ
©2020 Wantedly, Inc.App EngineersInfra Engineersimplement Access through tools and APIsProducts infrastructureProvide toolsautomateWantedly ͷΓํInfra engineer ͱ App engineer ͕ૄ݁߹
©2020 Wantedly, Inc.ڧ੍Ͱ͖ΔΈΛߏங͢Δ•CI ͱϩʔΧϧͰಉҰͷπʔϧΛ͏نͰੜ࢈ੑΛҡ࣋͢Δ•commit hash Λ tag ʹ͢Δ•ࣗಈ deploy•The Twelve Factors ʹଇΔͲ͏Δ͔•Interface ͷΈΛकΓཪυϥεςΟοΫʹม͍͑ͯ͘
©2020 Wantedly, Inc.نsame third-party services across all servicescommit hash Λ image tagPR merge Ͱࣗಈ deploybuild/deploymonitoringetc…ಉҰͷ docker image ΛશڥͰ͏
©2020 Wantedly, Inc.The Latest k8s ops flowset imagecheckpulldeploypush pushhookbuildbuild
©2020 Wantedly, Inc.1 commit ʹରͯ͠ 1 docker imageGitHub commit status Ͱ image ͷ࡞ঢ়گΛ feedback΄΅ͯ͢ͷ commit ͕ deploy Մೳpush pushhookbuildbuildThe Latest k8s ops flow
©2020 Wantedly, Inc.`kube prod deploy master` Ͱ deploy`kubectl set image` Λ wrap ͍ͯ͠ΔશڥͰಉҰͷ image Λ͍ڥม͚͕ͩࠩset imagecheckpulldeployThe Latest k8s ops flowࣗಈͰ deploy ͞ΕΔ
©2020 Wantedly, Inc.نͰੜ࢈ੑΛҡ࣋͢Δ•commit hash Λ tag ʹ͢Δ•ࣗಈ deploy•The Twelve Factors ʹଇΔ
©2020 Wantedly, Inc.ඞཁͳͷ͕ͯ͢ἧ͏ࣾϥΠϒϥϦservicex• Log format ͱૹ৴• Error ऩू• ύϑΥʔϚϯεϞχλϦϯά• ࢄτϨʔγϯά• ଞͷαʔϏεGolang, Ruby, Python, Node Λαϙʔτڧ੍Ͱ͖ΔΈΛߏங͢ΔϧʔϧΛकΔͷ͕Ұ൪؆୯Ͱ͋ΔੈքΛҡ࣋͢Δ
©2020 Wantedly, Inc.ڧ੍Ͱ͖ΔΈΛߏங͢Δͯ͢ͷ ops ͕ kube ίϚϯυͰՄೳϧʔϧΛकΔͷ͕Ұ൪؆୯Ͱ͋ΔੈքΛҡ࣋͢ΔࣾπʔϧͰ build / deploy / ops ͷͯ͢ͷ࡞ۀ͕ՄೳCI Ͱ laptops Ͱಉ͡ͷΛ͏ͲΜͳࣗಈԽ͕ߦΘΕ͍ͯΔͷ͔Θ͔Γ͍͢kube buildkube prod deploy masterͰ docker image Λ build ͯ͠ pushͰ production deployͰੜmanifests ࣗಈੜkube generate autoscale
©2020 Wantedly, Inc.language: bashenv:- // encrypted credentials hereinstall:- bash <(curl -sL https://get.wantedlyapp.com/kube)script:- kube builddeploy:- skip_cleanup: trueprovider: scriptscript: kube prod deploy $TRAVIS_COMMITon:branch: masterTravis ͷઃఆͷྫ
©2020 Wantedly, Inc.language: bashenv:- // encrypted credentials hereinstall:- bash <(curl -sL https://get.wantedlyapp.com/kube)script:- kube builddeploy:- skip_cleanup: trueprovider: scriptscript: kube prod deploy $TRAVIS_COMMITon:branch: masterInstall kubeTravis ͷઃఆͷྫ
©2020 Wantedly, Inc.language: bashenv:- // encrypted credentials hereinstall:- bash <(curl -sL https://get.wantedlyapp.com/kube)script:- kube builddeploy:- skip_cleanup: trueprovider: scriptscript: kube prod deploy $TRAVIS_COMMITon:branch: masterInstall kubebuild and push a docker imageTravis ͷઃఆͷྫ
©2020 Wantedly, Inc.language: bashenv:- // encrypted credentials hereinstall:- bash <(curl -sL https://get.wantedlyapp.com/kube)script:- kube builddeploy:- skip_cleanup: trueprovider: scriptscript: kube prod deploy $TRAVIS_COMMITon:branch: masterdeploy the revisionInstall kubebuild and push a docker imageTravis ͷઃఆͷྫ
©2020 Wantedly, Inc.Travis ͷઃఆͷྫlanguage: bashenv:- // encrypted credentials hereinstall:- bash <(curl -sL https://get.wantedlyapp.com/kube)script:- kube builddeploy:- skip_cleanup: trueprovider: scriptscript: kube prod deploy $TRAVIS_COMMITon:branch: masterdeploy the revisionInstall kubebuild and push a docker imageInterface ͑͞ม͑ͳ͚Ε৽͍͠มߋΛ؆୯ʹΒ·͚Δࣾඪ४ͷπʔϧΛ͏ͷ͕Ұ൪ָͩ͠উखʹྑ͘ͳΔInfra EngineersApp Engineers