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
230
Ansible から Docker への実践記
kumagai19o
0
120
Other Decks in Technology
See All in Technology
Adopting Jetpack Compose in Your Existing Project - GDG DevFest Bangkok 2024
akexorcist
0
130
セキュリティ運用って包括的にできていますか?SaaSを使って次のステップへ / Comprehensive Cyber Security Operations for Cloud Services Using SaaS
sakaitakeshi
0
170
偶有的複雑性と戦うためのアーキテクチャとチームトポロジー
knih
0
140
OCI Security サービス 概要
oracle4engineer
PRO
0
6.6k
OS 標準のデザインシステムを超えて - より柔軟な Flutter テーマ管理 | FlutterKaigi 2024
ronnnnn
1
350
アジャイルでの品質の進化 Agile in Motion vol.1/20241118 Hiroyuki Sato
shift_evolve
0
200
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
260
あなたの知らない Function.prototype.toString() の世界
mizdra
PRO
4
2.1k
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
3
680
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
30
13k
アジャイルチームがらしさを発揮するための目標づくり / Making the goal and enabling the team
kakehashi
4
330
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
140
Featured
See All Featured
Site-Speed That Sticks
csswizardry
0
44
Why Our Code Smells
bkeepers
PRO
334
57k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Embracing the Ebb and Flow
colly
84
4.5k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
How to train your dragon (web standard)
notwaldorf
88
5.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Designing for humans not robots
tammielis
250
25k
Automating Front-end Workflow
addyosmani
1366
200k
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