Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CloudBuildで docker-composeとansibleを使っている話
Search
Ikuo Kumagai
October 01, 2019
Technology
1
1.4k
CloudBuildで docker-composeとansibleを使っている話
Google Cloud Build Day で発表
https://gcpug-tokyo.connpass.com/event/143453/
Ikuo Kumagai
October 01, 2019
Tweet
Share
More Decks by Ikuo Kumagai
See All by Ikuo Kumagai
プロダクト運用のCloudOps化に伴うジレンマ
kumagai19o
0
240
Ansible から Docker への実践記
kumagai19o
0
130
Other Decks in Technology
See All in Technology
ハイテク休憩
sat
PRO
2
190
I could be Wrong!! - Learning from Agile Experts
kawaguti
PRO
8
2.3k
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
1
16k
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
310
rootful・rootless・privilegedコンテナの違い/rootful_rootless_privileged_container_difference
moz_sec_
0
110
ソフトウェア開発における「パーフェクトな意思決定」/Perfect Decision-Making in Software Development
yayoi_dd
2
2.7k
3年でバックエンドエンジニアが5倍に増えても破綻しなかったアーキテクチャ そして、これから / Software architecture that scales even with a 5x increase in backend engineers in 3 years
euglena1215
11
4.3k
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
26
7.1k
生成AIによるテスト設計支援プロセスの構築とプロセス内のボトルネック解消の取り組み / 20241220 Suguru Ishii
shift_evolve
0
170
DevFest 2024 Incheon / Songdo - Compose UI 조합 심화
wisemuji
0
250
最近のSfM手法まとめ - COLMAP / GLOMAPを中心に -
kwchrk
8
1.7k
ZOZOTOWN の推薦における KPI モニタリング/KPI monitoring for ZOZOTOWN recommendations
rayuron
1
870
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
2
160
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Rails Girls Zürich Keynote
gr2m
94
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Docker and Python
trallard
43
3.2k
Code Review Best Practice
trishagee
65
17k
For a Future-Friendly Web
brad_frost
176
9.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Code Reviewing Like a Champion
maltzj
521
39k
Transcript
CloudBuild 内で docker-composeと ansibleで buildとCIしている話 1
AXLBIT Inc. • 開発環境でのみGCPを利⽤しています。 • 先⽉のBuild Timeは24,871.67 minutes です 弊社の状況
2
AXLBIT Inc. • Ansible playbookで環境構築が⾃動化されている既存の 運⽤プロセスがあった。 背景(Cloud Build 以前 )
3 Deploy anywhere! No problem!
AXLBIT Inc. • Ansible で DockerコンテナにDeployして commit • OS初期状態のコンテナにAnsible で
Deploy • できたコンテナをイメージ化 Step1 Docker Image Build 4 デプロイ via Docker イメージ化 動作環境 コンテナ docker commit
AXLBIT Inc. • 最初はAnsible実⾏時のOSの初期状態だけを作成 • AnsibleからOSの初期設定をしている部分などはここに いれる } Yum update
& reboot -> 最新のOSイメージを使ってリビルド } タイムゾーンの設定、localeの設定 … Base のDockerfileには最低限だけ 5 FROM centos:7 RUN yum -y update ¥ && yum -y install epel-release ¥ && yum -y update ¥ && yum -y install initscripts MAKEDEV git bc ansible syslog¥ && yum install -y yum-utils device-mapper-persistent-data lvm2 ¥ RUN localedef -v -c -i ja_JP -f UTF-8 ja_JP.UTF-8; echo ""; env LANG=ja_JP.UTF-8 RUN unlink /etc/localtime RUN ln -s /usr/share/zoneinfo/Japan /etc/localtime WORKDIR /root/deploy ENTRYPOINT ["/root/deploy/init.sh"]
AXLBIT Inc. • AnsibleでDockerにDeployするからといって、初期イ メージにSSHをインストールしなくて良い。 } Hosts で ansible_connection=docker とすればDockerコマンド
でデプロイ Ansible Docker Connection 6 [axlgear] axlgear ansible_connection=docker #Ansible 実⾏環境でDockerコマンドを実⾏した時に接続される環境のdockerコンテナを指定
AXLBIT Inc. • VM内でAnsible 実⾏をコンテナで実⾏ } -> イメージ作成 docker-composeでansible実⾏ 7
デプロイ via docker 動作環境 コンテナ 動作環境 コンテナ VM
AXLBIT Inc. • Docker composeと ansibleが実⾏できるイメージ作成 } CloudBuildersイメージには Ansible⼊っていないので⾃作 ⾃作
docker-compose & ansible イメージ 8 FROM centos:7 RUN yum -y update ¥ && yum -y install epel-release ¥ && yum -y update ¥ && yum -y install initscripts MAKEDEV git bc ansible syslog¥ && yum install -y yum-utils device-mapper-persistent-data lvm2 ¥ && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ¥ && yum install -y docker-ce ¥ && yum check ¥ && curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) - o /usr/local/bin/docker-compose ¥ && chmod +x /usr/local/bin/docker-compose RUN localedef -v -c -i ja_JP -f UTF-8 ja_JP.UTF-8; echo ""; env LANG=ja_JP.UTF-8 RUN unlink /etc/localtime RUN ln -s /usr/share/zoneinfo/Japan /etc/localtime VOLUME /var/lib/docker EXPOSE 2375 WORKDIR /root/deploy ENTRYPOINT ["/root/deploy/init.sh"]
AXLBIT Inc. • docker-compose.yml [Tips] イメージ作成の⾃動化 9 version: '3' services:
deploy: # default global_env link to .env # if you change local_env 'ln -s local_env .env' image: ${DEPLOY_BASE} command: ./${DEPLOY_COMMAND} common.conf difference-gear-base.conf environment: - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} - DAEMON=${DAEMON_FLG} volumes: - ./:/root/deploy:z - /var/run/docker.sock:/var/run/docker.sock - ~/.ssh:/root/host_keys:ro - ../settings:/root/work/:Z - ../dep-opt:/opt/:Z gear-body: #image: ${GEAR_BASE} #volumes: # - ../opt:/opt/:Z image: ${DEPLOYED_GEAR} #デプロイ済みイメージを使う場合 volumes: - ../work:/root/container #デプロイ済みイメージを使う場合のファイル共有⽤ ports: - "443"
AXLBIT Inc. ここでCloudBuild とかやってた。 10
AXLBIT Inc. • VM内でAnsible 実⾏をコンテナで実⾏ } -> イメージ作成 docker-composeでansible実⾏ 11
デプロイ via docker 動作環境 コンテナ 動作環境 コンテナ CloudBuild
AXLBIT Inc. • docker-composeで構築対象イメージを起動 } -> その後 ansibleイメージを実⾏ とりあえず構築をCloudBuild化 12
- name: 'gcr.io/sixth-hash-162208/deploy-base' env: - 'COMPOSE_PROJECT_NAME=buildimage' - 'BRANCH_NAME=$BRANCH_NAME' entrypoint: 'bash' args: - '-c' - | set -xe #これは各test-addon側のファイルを置く cp /root/.ssh/* $_CLOUD_BUILD_DIR/.ssh/ cd $_CLOUD_BUILD_DIR/makeimage docker-compose up -d gear docker-compose up --exit-code-from deploy deploy volumes: - name: 'ssh' path: /root/.ssh - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: - '-c' - | _imagetag=$$(echo gcr.io/${PROJECT_ID}/gear_$$_localrepo:$$_branch) echo "tag: $$_imagetag" docker commit buildimage_gear_1 $$_imagetag docker push $$_imagetag
AXLBIT Inc. • ⾃動テスト実⾏のためのベースイメージとして • 開発者にGCEのテンプレート共に渡す • 社内のデモ環境としてGKE上で起動 作ったイメージを何に使っているのか 13
AXLBIT Inc. • Cloudbuild.yamlをリポジトリの外に置きたい。 } Buildやテストのプロセス修正時に本筋の commit log が汚れる }
実⾏プロセスは極⼒別リポジトリのShellにおいて、都度pull • プルリクがあるときだけ実⾏したい } Envファイルにマージターゲットのブランチを記載しGithub API でプルリクの存在チェック。あるときだけ実⾏ ▪ -> いまは プルリク連携できるらしいと。。 • これまでの最⻑Buildは13時間、、 } かなり無駄遣いしている感 悩んだことと対応してきたこと 14