開発チームもiacやってみたい~vsoとdockerの組合せにチャレンジ~

59
開発チームもIaCやってみたい VSODockerの組合せにチャレンジ~ @CubedKachi 29TFSUG東京 Visual Studio OnlineDevOps

Upload: cubedkachi

Post on 12-Apr-2017

1.371 views

Category:

Software


2 download

TRANSCRIPT

Page 1: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

@CubedKachi

第29回 TFSUG東京Visual Studio OnlineでDevOps

Page 2: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

開発品質を上げれば障害は最小限に抑えられる!

Page 3: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

そんな風に考えている時期が私にもありました…

Page 4: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

そんな風に考えている時期が私にもありました…

顧客環境でだけ発生する障害

いつの間にかビルド職人に…

ログがディスクを食い潰す!

セキュリティレベルの違い

Page 5: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

このままじゃ不味い。IaCにチャレンジしよう!

VSOを使って

Page 6: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

シナリオ

Page 7: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

OverviewMicorosoft Azure Docker Hub

official

docker push cubedkachi/tfsug:29

docker pull centos:centos7

docker run cubedkachi/tfsug:29

Visual Studio Online

Client Machine for control

Cross Platform Build

Azure VM for VSO-Agent

Azure VM for Docker run

SSH

HTTP

cubedkachi

centos

tfsug

Page 8: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

シナリオ

Page 9: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

OverviewMicorosoft Azure

Azure VM for VSO-Agent

Azure VM for Docker run

Page 10: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

Azure上で仮想マシンを2つ作成する・VSO-Agent実行用にOpenLogic7.1・Docker実行用にCoreOS stable

1. Azure VMの準備

Page 11: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

エンドポイントの設定で80番ポートを開け忘れないように注意!

1. Azure VMの準備

Page 12: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

CoreOS側のマシンを使うのはしばらく先だが、疎通確認だけはしておく。

1. Azure VMの準備

Last login: Sun Oct 25 02:48:57 2015 from hogehogeCoreOS stable (766.4.0)cubedkachi@tfsug-coreos ~ $

Page 13: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

疎通確認ができれば、次の手順へ。

1. Azure VMの準備

Last login: Sun Oct 25 05:49:07 2015 from hogehoge[cubedkachi@tfsug-openlogic ~]$

Page 14: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

・VSO-Agent実行用のAzure VM(OpenLogic)を作成・Docker実行用のAzure VM(CoreOS)を作成・エンドポイントの設定を忘れずに

1. Azure VMの準備

Page 15: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

シナリオ

Page 16: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

OverviewMicorosoft Azure

Client Machine for control

Azure VM for VSO-Agent

SSH

Page 17: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

セキュリティ関係の設定は複雑になりがちなので省略。今回はfirewalldからiptableに変更した。

2. VSO-Agentの設定[~]$ ### Firewallにはiptablesを利用する[~]$ sudo systemctl stop firewalld[~]$ sudo systemctl mask firewalld[~]$ sudo yum install -y iptables-services[~]$ sudo systemctl enable iptables[~]$ sudo systemctl start iptables

Page 18: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

dockerコマンドは大量に試行錯誤することになるのでsudoなしで実行できるようにdockerというグループにユーザを追加して一旦ログアウトする

2. VSO-Agentの設定[~]$ ### Dockerの設定[~]$ sudo yum install -y docker[~]$ sudo systemctl start docker[~]$ sudo systemctl enable docker[~]$ # sudoなしでDockerを使う準備[~]$ sudo groupadd docker[~]$ sudo gpasswd -a $USER docker[~]$ sudo systemctl restart docker[~]$ exit

Page 19: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

DockerイメージのレポジトリとしてDocker Hubを利用するのでログインしておく。詳細はDocker Hubを参考のこと。

2. VSO-Agentの設定[~]$ ### Docker Hubにログインしておく ###[~]$ docker loginUsername: cubedkachiPassword: **********Email: ******@*****.***WARNING: login credentials saved in /home/*****/.docker/config.jsonLogin Succeeded

Page 20: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

VSO-AgentからVSO上のリポジトリの取得にはGitを利用するのでインストールする。

2. VSO-Agentの設定[~]$ ### VSO-Agent関係 ###[~]$ # Gitのインストール[~]$ sudo yum install -y git

Page 21: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

VSO-AgentはNode.js上で動作するのでまずはNode.jsをインストールする。詳細はnodejs/node-v0.x-archiveを参考のこと。

2. VSO-Agentの設定[~]$ ### VSO-Agent関係 ###[~]$ # Node.jsのインストール[~]$ sudo yum install -y gcc-c++[~]$ sudo yum install -y make[~]$ sudo curl --silent --location https://rpm.nodesource.com/setup

| sudo bash -[~]$ sudo yum install -y nodejs

Page 22: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

VSO-Agentのインストーラをインストールする。VSO-Agentディレクトリを作成し、インストーラを実行する。詳細はMicrosoft/vso-agentを参考のこと。

2. VSO-Agentの設定[~]$ ### VSO-Agent関係 ###[~]$ # VSO-Agentのインストール[~]$ sudo npm install vsoagent-installer -g[~]$ sudo chown -R $USER /root/.npm[~]$ mkdir myagent[~]$ cd myagent[myagent]$ vsoagent-installer

Page 23: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

2. VSO-Agentの設定

・Dockerをインストール・Docker Hubを使えるようにログインしておく・VSO-Agentをインストール

Page 24: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

シナリオ

Page 25: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

OverviewMicorosoft Azure

Visual Studio Online

Client Machine for control

HTTP

Page 26: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

VSOのホーム画面から今回のシナリオで使うTeam Projectを作成する。

3. Team Projectの作成

迷子に注意

Page 27: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

Team ProjectのリポジトリにGitを選択することにだけ注意する。

3. Team Projectの作成

Page 28: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

リポジトリを作るために色んな方法があるが、今回はGit clientを使わないで楽をする。Create ReadMe fileを選択すると…

3. Team Projectの作成

Page 29: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

README.mdが初回コミットとして自動生成される。VSOのWebUIからもファイルの編集、コミットができるので(邪道だけど)WebUI上だけでも開発できる。

3. Team Projectの作成

Page 30: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

VSO-Agentから実行したいシェルスクリプトを作成する。WebUIで編集して保存すると自動でコミットされる。

3. Team Projectの作成

コミットログ

スクリプトの内容

保存したら自動コミット

Page 31: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

シェルスクリプトからビルドするDockerfileを作成する。CentOS7にhttpdをインストールして自動起動するだけのシンプルな構成。

3. Team Projectの作成

Dockerfileの詳細は次頁

Page 32: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

6月に追加されたクロスプラットフォームビルドによりVSOから(Jenkinsのように)何でも出来るようになった。いずれプラグインの概念も出てくるのでは…

3. Team Projectの作成docker_build.shの説明

#!/bin/sh# レポジトリ→cubedkachi/tfsug# タグ→29# としてカレントディレクトリのDockerfileからコンテナイメージをビルドするdocker build -t cubedkachi/tfsug:29 ./# ビルドしたコンテナイメージをDocker Hubのリポジトリに保存するdocker push -f cubedkachi/tfsug:29

Page 33: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

望ましい状態を宣言するのではなくコンテナを作成する手続を記述する。起動したコンテナを後から変更しないという考え方。

3. Team Projectの作成Dockerfileの説明

FROM centos:centos7 # 公式リポジトリからCentOS7のイメージを取得するMAINTAINER @CubedKachi # Dokcerfileの作者は@CubedKachi

RUN yum -y install httpd # httpdをインストールするRUN systemctl enable httpd # httpdを自動起動するように設定するCMD /sbin/init # コンテナ起動時にsystemdを実行する

Page 34: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

Dockerfile内の主要な命令を上の表に挙げた。詳細は公式ドキュメントを参考のこと。

3. Team Projectの作成命令 説明

FROM 作成元のコンテナイメージを指定

MAINTAINER コンテナイメージの作者を記述

ENV 環境変数を設定

RUN 指定のコマンドを実行

ADD コンテナイメージ内にファイルを追加

EXPOSE コンテナ内で使用するポート番号を記述

CMD コンテナ起動時に実行するコマンドを指定

Page 35: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

3. Team Projectの作成

・VSOからTeam ProjectをGitリポジトリで作成・VSO-Agentから呼出すシェルスクリプトを作成・シェルスクリプトからビルドするDokcerfileを作成

Page 36: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

シナリオ

Page 37: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

OverviewMicorosoft Azure Docker Hub

official

docker push cubedkachi/tfsug:29

docker pull centos:centos7

Visual Studio Online

Client Machine for control

Cross Platform Build

Azure VM for VSO-Agent

HTTP

cubedkachi

centos

tfsug

Page 38: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

Alternate authentication credentialsを設定し、VSO-Agentを認証できるように準備する。詳細はこちらを参照のこと。

4. VSO-Agentの実行

Page 39: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

4. VSO-Agentの実行

Control panel > Agent pools > Default > RolesからAgent Pool Administratorsに先ほど設定したAlternative authentication credentialsを指定する。

Page 40: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

VSO-Agentを実行する。初回実行時はURL等も入力する。認証はAlternative authentication credentialsを使う。VSO-Agentの実行中はagent poolにdefaultが使用できる。

[myagent]$ node agent/vsoagentEnter alternate username > tfsugEnter alternate password > *********Enter server url > https://**********.visualstudio.comEnter agent name (enter sets tfsug-openlogic) >Enter agent pool name (enter sets default) >successful connect as **********

4. VSO-Agentの実行

Page 41: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

BUILD > + からビルド定義を新規作成する。

4. VSO-Agentの実行

Page 42: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

BUILD > + からビルド定義を新規作成する。Add build step… > Shell Scriptでファイルを指定する。

4. VSO-Agentの実行

Page 43: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

BUILD > + からビルド定義を新規作成する。Add build step… > Shell Scriptでファイルを指定する。General > Default queueにDefaultを選択。

4. VSO-Agentの実行

Page 44: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

ビルド定義を実行するとコンソールに結果が表示される。

4. VSO-Agentの実行

Page 45: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

ビルド定義を実行するとコンソールに結果が表示される。ビルドが完了するのを見届ける。

4. VSO-Agentの実行

Page 46: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

ビルド定義を実行するとコンソールに結果が表示される。ビルドが完了するのを見届ける。Docker Hubにコンテナイメージがpushされている。

4. VSO-Agentの実行

Page 47: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

・Alternate authentication credentialsを設定する・Agent Pool Administratorsに追加する・VSO-Agentを起動する。・シェルスクリプトを呼出すビルド定義を作成、実行する

4. VSO-Agentの実行

Page 48: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

シナリオ

Page 49: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

OverviewMicorosoft Azure Docker Hub

docker run cubedkachi/tfsug:29

Client Machine for control

Azure VM for Docker run

SSH

cubedkachi

tfsug

Page 50: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

5. Dockerの実行

CoreOSからDockerを実行する。Docker Hubからコンテナイメージを取得して起動する。

~ $ sudo docker run --privileged -d -p 80:80 --name demo cubedkachi/tfsug:29

Unable to find image 'cubedkachi/tfsug:29' locally29: Pulling from cubedkachi/tfsugDigest:sha256:a9e6b1d09fd37aefd9007fd21e427f678a089f1041f51cb873b*****Status: Downloaded newer image for cubedkachi/tfsug:291d51436b58e321c6ff4633726b724a967dbdcbec94d1909991bb08abaa378663

Page 51: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

5. Dockerの実行

CoreOSからDockerを実行する。Docker Hubからコンテナイメージを取得して起動する。ブラウザからURLを指定すると空ページが表示される。

Page 52: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

シナリオ

Page 53: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

OverviewMicorosoft Azure Docker Hub

official

docker push cubedkachi/tfsug:29

docker pull centos:centos7

docker run cubedkachi/tfsug:29

Visual Studio Online

Client Machine for control

Cross Platform Build

Azure VM for VSO-Agent

Azure VM for Docker run

SSH

HTTP

cubedkachi

centos

tfsug

Page 54: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

そのコンテナ大丈夫?

Page 55: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行

インフラのテスト ← New!

シナリオ

Page 56: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

環境作成を自動化するだけでは片手落ち。

ソースコードをCIするように環境構築スクリプトもCIして初めてインフラの品質が担保される。

インフラのテスト

Page 57: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

次のセッションに続きます。

Page 58: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
Page 59: 開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~

おまけ

CentOS系のディストリビューションでGitリポジトリ取得時にcode 128が発生した時の回避策。

[myagent]$ # ビルド実行時にGitのOAuth認証が通らないときは環境変数に[myagent]$ # VSO_GIT_USERNAME、VSO_GIT_PASSWORDを指定して実行する。[myagent]$ VSO_GIT_USERNAME=your_name VSO_GIT_PASSWORD=your_password

node agent/vsoagent