Slide 1

Slide 1 text

$JSDMF$*"SHP$%ʹΑΔ(JU0QT !QN σϓϩΠ͠/JHIUJO෱Ԭ

Slide 2

Slide 2 text

͸͡Ίʹ w ࠓ೔͸(JU0QTΛ$JSDMF$*ͱ"SHP$%Λ༻͍࣮ͯݱ͠ ͯΈ͍ͨͱࢥ͍·͢ w LVCFSOFUFTͷ֓೦͕ଟʑग़ͯ·͍Γ·͕͢ɺ͋·Γਂ͍ ࿩Ͱ͸͍͟͝·ͤΜ !2

Slide 3

Slide 3 text

ࣗݾ঺հ w !QNʢ4IJOJDIJSP5PEBLBʣ w גࣜձࣾ"QSFOEFS w ϑϩϯτΤϯυΠϯϑϥΤϯδχΞ w ࡢ೥ɺؔ౦෱Ԭ΁Ҡॅ✈ w ಘҙδϟϯϧ͸ϑϩϯτΤϯυʢ3FBDUʣٴͼɺ"84 ߏ ੒؅ཧपΓͰ͢ w ࠷ۙ͸LTपΓΛ௥͔͚͍ͬͯ·͢ w ͱ♨͕޷͖ !3

Slide 4

Slide 4 text

(JU0QT

Slide 5

Slide 5 text

(JU0QTͱ͸ w 8FBWFXPSLT͕ఏএͨ͠$MPVE/BUJWF࣌୅ʹ͓͚Δ $%ͷ͋Γํ w IUUQTXXXXFBWFXPSLTUFDIOPMPHJFTHJUPQT w (JU3FQP͕ݱঢ়ΠϯϑϥΛ൓ө͍ͯ͠Δʢ4JOHMF4PVSDFPG5SVUIʣ w 1VMM3FRVFTUϕʔεͰ൓өΛߦ͏ !5

Slide 6

Slide 6 text

(JU0QTͱ͸ !6 https://www.slideshare.net/weaveworks/gitops-modern-best-practices-for-high-velocity-app-dev-using-cloud-native-tools

Slide 7

Slide 7 text

"SHP$%

Slide 8

Slide 8 text

"SHP$%ͱ͸ w (JU0QTΛ࣮ݱ͢ΔͨΊͷπʔϧ w ,VCFSOFUFTͷͨΊͷએݴతͳ(JU0QTͷͨΊͷσϦόϦʔπʔϧ w ϦϙδτϦΛϙʔϦϯάͯ͠มԽΛݕग़͠·͢ w ଟػೳͰ͢ɻ·ͩ࢖͍͜ͳ͍ͤͯ·ͤΜ !8

Slide 9

Slide 9 text

https://github.com/cncf/landscape

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

σϞߏங

Slide 12

Slide 12 text

࡞Δ΋ͷ w ߏ੒ w ,VCFSOFUFTΫϥελ w &,4Ͱ࡞੒ w /HJOYͷJOEFYIUNMΛදࣔ͢ΔΞϓϦέʔγϣϯ w "SHP$%ͷίϯϙʔωϯτ w (JU)VC w $JSDMF$* w ࢦఆͷλάͰΠϝʔδͷϏϧυ w ͦͷΠϝʔδλάͰNBOJGFTUΛஔ͖׵͑ɺ13Λ࡞੒ w 13࡞੒ʹ͸IVCΛ࢖༻ w ͪͳΈʹ(JU0QTͷຊ࣭Ͱ͸͋Γ·ͤΜ !12

Slide 13

Slide 13 text

ߏ੒Πϝʔδ !13 https://www.slideshare.net/weaveworks/gitops-modern-best-practices-for-high-velocity-app-dev-using-cloud-native-tools

Slide 14

Slide 14 text

ΫϥελΛཱͯΔ $ brew install weaveworks/tap/eksctl $ eksctl version [ℹ] version.Info{BuiltAt:"", GitCommit:"", GitTag:"0.2.1"} $ eksctl create cluster \ --name sample-cluster \ --region us-west-2 \ --nodes 2 \ --nodes-min 1 \ --nodes-max 2 \ --node-type t2.medium \ --version=1.13 \ --tags environment=test !14

Slide 15

Slide 15 text

ΞϓϦέʔγϣϯʢ/HJOYʣͷ࡞੒ $ cat Dockerfile FROM nginx:1.17.2 ADD index.html /usr/share/nginx/html/ EXPOSE 80 CMD nginx -g "daemon off;" $ cat index.html Welcome to nginx! Hello GitOps!! !15

Slide 16

Slide 16 text

ίϯςφϨδετϦͷ४උ $ aws ecr create-repository \ --repository-name gitops-sample \ --region us-west-2 !16

Slide 17

Slide 17 text

$JSDMF$*ͷηοτΞοϓ $ cat .circleci/config.yml orbs: aws-ecr: circleci/[email protected] version: 2.1 workflows: build_and_push_image: jobs: - aws-ecr/build-and-push-image: repo: gitops-sample tag: 1.0.0 filters: branches: only: - master !17

Slide 18

Slide 18 text

$JSDMF$*ͷηοτΞοϓ create_pull_request: docker: - image: circleci/golang:1.11-stretch steps: - checkout - run: name: Install hub command command: | curl -sSLf https://github.com/github/hub/releases/download/v2.12.3/hub-linux-amd64-2.12.3.tgz | \ tar zxf - --strip-components=1 -C /tmp/ && \ sudo mv /tmp/bin/hub /usr/local/bin/hub - run: name: Replace definition & create a pull request command: | cd /home/circleci/project sed -i -e 's/\(gitops-sample:\)[0-9\.]\+.*$/\11.0.0/g' infra/default/application.yaml export BRANCH=`date "+%Y%m%d-%H%M%S"` git config --global user.email "[email protected]" git config --global user.name "CIBot" git checkout --no-track -b ${BRANCH} git commit -am '[ci skip] bump version' hub push origin ${BRANCH} hub pull-request \ --message="Update Image" \ --base=${CIRCLE_PROJECT_USERNAME}:master \ --head=${CIRCLE_PROJECT_USERNAME}:${BRANCH} !18

Slide 19

Slide 19 text

$JSDMF$*ͷηοτΞοϓ $ cat .circleci/config.yml ... jobs: create_pull_request: ... workflows: build_and_push_image: jobs: - aws-ecr/build-and-push-image: ... - create_pull_request: requires: - aws-ecr/build-and-push-image filters: branches: only: - master !19

Slide 20

Slide 20 text

$JSDMF$*ͷηοτΞοϓ AWS_ECR_ACCOUNT_URL=<>.dkr.ecr.us- west-2.amazonaws.com AWS_ACCESS_KEY_ID=<> AWS_SECRET_ACCESS_KEY=<> AWS_REGION=us-west-2 GITHUB_TOKEN=<> w ҎԼΛ$JSDMF$*ͷ&OWJSPONFOU΁ఆ͓͖ٛͯ͠·͢ w ·ͨ8SJUFՄೳͳ伴ͷηοτΛ࡞੒͠ɺެ։伴Λ (JU)VC΁ൿີ伴Λ$JSDMF$*΁ొ࿥͓͖ͯ͠ɺ1FSTPOBM "DDFTT5PLFO΋ొ࿥͠·͢ !20

Slide 21

Slide 21 text

ΞϓϦέʔγϣϯͷNBOJGFTU࡞੒ $ cat infra/default/application.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: default labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: XXXXXXXXXXX.dkr.ecr.us-west-2.amazonaws.com/gitops-sample: 1.0.0 ports: - containerPort: 80 ... snip ... !21

Slide 22

Slide 22 text

ΞϓϦέʔγϣϯʢ/HJOYʣͷల։ # ద༻ʢk = kubectlʣ $ k apply -f infra/default/application.yaml $ k get pods -n default NAME READY STATUS RESTARTS AGE nginx-deployment-76cfc87d8c-4jwsh 1/1 Running 0 4h23m nginx-deployment-76cfc87d8c-6fxp2 1/1 Running 0 4h23m $ curl <> Welcome to nginx! Hello GitOps!! !22

Slide 23

Slide 23 text

"SHP$%ͷల։ʢʣ # Ϋϥελ΁ల։ʢk = kubectlʣ $ k create namespace argocd $ k apply -n argocd -f https://raw.githubusercontent.com/ argoproj/argo-cd/stable/manifests/install.yaml # LB Λ͚ͭͯΞΫηεͰ͖ΔΑ͏ʹ $ k patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}' # CLI ͷΠϯετʔϧ $ brew tap argoproj/tap $ brew install argoproj/tap/argocd # ϩάΠϯʢadmin:{argocd-serverͷPod໊} ͰϩάΠϯՄೳʣ $ argocd login <> !23

Slide 24

Slide 24 text

"SHP$%ͷల։ʢʣ # ΞϓϦέʔγϣϯΛ࡞੒ $ argocd app create gitops-sample \ --repo https://github.com/pm11/argo-cd-example.git \ --path infra/default \ --dest-server https://kubernetes.default.svc \ --dest-namespace default # ϦϙδτϦΛඥ͚ͮΔ $ argocd repo add https://github.com/pm11/argo-cd- example.git !24

Slide 25

Slide 25 text

"SHP$%ϩάΠϯ w 4FSWJDFʹ$-#ͷ%/4ͰΞΫηε͢ΔͱҎԼͷը໘ʹ w $-*ͱಉ͡Ϣʔβ໊ύεϫʔυΛ࢖͏ !25

Slide 26

Slide 26 text

"SHP$%μογϡϘʔυ !26

Slide 27

Slide 27 text

5SZ(JU0QT

Slide 28

Slide 28 text

ΞϓϦέʔγϣϯʢ/HJOYʣΛมߋ $ git diff index.html ... @@ -4,6 +4,6 @@ Welcome to nginx! -Hello GitOps!! +Hello GitOps with CircleCI!!

Slide 29

Slide 29 text

ΞϓϦέʔγϣϯʢ/HJOYʣΛมߋ $ git diff .circleci/config.yml ... @@ -17,7 +17,7 @@ jobs: cd /home/circleci/project - sed -i -e 's/\(gitops-sample:\)[0-9\.]\+.*$/\11.0.0/g' infra/ default/application.yaml + sed -i -e 's/\(gitops-sample:\)[0-9\.]\+.*$/\11.0.1/g' infra/ default/application.yaml export BRANCH=`date "+%Y%m%d-%H%M%S"` ... @@ -34,7 +34,7 @@ workflows: jobs: - aws-ecr/build-and-push-image: repo: gitops-sample - tag: 1.0.0 + tag: 1.0.1 filters: !29

Slide 30

Slide 30 text

$JSDMF$* !30

Slide 31

Slide 31 text

(JU)VCͰ13Λ֬ೝ w $JSDMF$*͔Β13͕ग़͞ΕΔͷͰ಺༰Λ֬ೝ͠ɺϚʔδ͠·͢ w ʢࠓ͸ݸਓͷ1FSTPOBM"DDFTT5PLFOΛར༻͍ͯ͠·͕͢ઐ༻ͷ΋ ͷ͕ྑ͍Ͱ͢ʣ !31

Slide 32

Slide 32 text

"SHP$%Ͱ4ZODΛߦ͏ w "SHP$%ଆ͕0VU0G4ZODͱͳΔͷͰɺ4ZODΛߦ͍·͢ !32

Slide 33

Slide 33 text

"SHP$%ͰσϓϩΠத w ผͰ3FQMJDB4FU͕࡞੒͞Εͯͷ1PE͕ىಈ͠·͢ !33

Slide 34

Slide 34 text

ΞϓϦέʔγϣϯʢ/HJOYʣΛมߋ $ curl <> Welcome to nginx! Hello GitOps with CircleCI!! !34

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

·ͱΊ w ؆୯Ͱ͸͋Γ·͕͢$JSDMF$*ͱ"SHP$%Λ૊Έ߹Θͤͨ (JU0QTΛ࣮ݱͯ͠Έ·ͨ͠ w (JU)VCͷ13ૢ࡞ͰΠϯϑϥΛ؅ཧͰ͖ΔࣄʹΑΓɺݖݶ؅ཧ ΍ϫʔΫϑϩʔΛ៉ྷʹग़དྷͦ͏Ͱ͢ w σϓϩΠΛτϦΨʔ͍ͯͨ͠$*0QTͱൺ΂Δͱ(JU0QTͰ͸ɺ $*ͱ$%͕໌֬ʹ෼͔ΕΔ࣮૷ͱͳΓͦ͏Ͱ͢ w ࠓճͰ͖ͳ͔ͬͨࣗಈద༻΍ΑΓྑ͍UBH؅ཧͳͲ͸Ҿ͖ଓ͖ ௥ͬͯ·͍Γ·͢ !36

Slide 37

Slide 37 text

͋Γ͕ͱ͏͍͟͝·ͨ͠