開発チームもiacやってみたい~vsoとdockerの組合せにチャレンジ~
TRANSCRIPT
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
@CubedKachi
第29回 TFSUG東京Visual Studio OnlineでDevOps
開発品質を上げれば障害は最小限に抑えられる!
そんな風に考えている時期が私にもありました…
そんな風に考えている時期が私にもありました…
顧客環境でだけ発生する障害
いつの間にかビルド職人に…
ログがディスクを食い潰す!
セキュリティレベルの違い
このままじゃ不味い。IaCにチャレンジしよう!
VSOを使って
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. 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
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行
シナリオ
OverviewMicorosoft Azure
Azure VM for VSO-Agent
Azure VM for Docker run
Azure上で仮想マシンを2つ作成する・VSO-Agent実行用にOpenLogic7.1・Docker実行用にCoreOS stable
1. Azure VMの準備
エンドポイントの設定で80番ポートを開け忘れないように注意!
1. Azure VMの準備
CoreOS側のマシンを使うのはしばらく先だが、疎通確認だけはしておく。
1. Azure VMの準備
Last login: Sun Oct 25 02:48:57 2015 from hogehogeCoreOS stable (766.4.0)cubedkachi@tfsug-coreos ~ $
疎通確認ができれば、次の手順へ。
1. Azure VMの準備
Last login: Sun Oct 25 05:49:07 2015 from hogehoge[cubedkachi@tfsug-openlogic ~]$
・VSO-Agent実行用のAzure VM(OpenLogic)を作成・Docker実行用のAzure VM(CoreOS)を作成・エンドポイントの設定を忘れずに
1. Azure VMの準備
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行
シナリオ
OverviewMicorosoft Azure
Client Machine for control
Azure VM for VSO-Agent
SSH
セキュリティ関係の設定は複雑になりがちなので省略。今回は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
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
DockerイメージのレポジトリとしてDocker Hubを利用するのでログインしておく。詳細はDocker Hubを参考のこと。
2. VSO-Agentの設定[~]$ ### Docker Hubにログインしておく ###[~]$ docker loginUsername: cubedkachiPassword: **********Email: ******@*****.***WARNING: login credentials saved in /home/*****/.docker/config.jsonLogin Succeeded
VSO-AgentからVSO上のリポジトリの取得にはGitを利用するのでインストールする。
2. VSO-Agentの設定[~]$ ### VSO-Agent関係 ###[~]$ # Gitのインストール[~]$ sudo yum install -y git
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
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
2. VSO-Agentの設定
・Dockerをインストール・Docker Hubを使えるようにログインしておく・VSO-Agentをインストール
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行
シナリオ
OverviewMicorosoft Azure
Visual Studio Online
Client Machine for control
HTTP
VSOのホーム画面から今回のシナリオで使うTeam Projectを作成する。
3. Team Projectの作成
迷子に注意
Team ProjectのリポジトリにGitを選択することにだけ注意する。
3. Team Projectの作成
リポジトリを作るために色んな方法があるが、今回はGit clientを使わないで楽をする。Create ReadMe fileを選択すると…
3. Team Projectの作成
README.mdが初回コミットとして自動生成される。VSOのWebUIからもファイルの編集、コミットができるので(邪道だけど)WebUI上だけでも開発できる。
3. Team Projectの作成
VSO-Agentから実行したいシェルスクリプトを作成する。WebUIで編集して保存すると自動でコミットされる。
3. Team Projectの作成
コミットログ
スクリプトの内容
保存したら自動コミット
シェルスクリプトからビルドするDockerfileを作成する。CentOS7にhttpdをインストールして自動起動するだけのシンプルな構成。
3. Team Projectの作成
Dockerfileの詳細は次頁
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
望ましい状態を宣言するのではなくコンテナを作成する手続を記述する。起動したコンテナを後から変更しないという考え方。
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を実行する
Dockerfile内の主要な命令を上の表に挙げた。詳細は公式ドキュメントを参考のこと。
3. Team Projectの作成命令 説明
FROM 作成元のコンテナイメージを指定
MAINTAINER コンテナイメージの作者を記述
ENV 環境変数を設定
RUN 指定のコマンドを実行
ADD コンテナイメージ内にファイルを追加
EXPOSE コンテナ内で使用するポート番号を記述
CMD コンテナ起動時に実行するコマンドを指定
3. Team Projectの作成
・VSOからTeam ProjectをGitリポジトリで作成・VSO-Agentから呼出すシェルスクリプトを作成・シェルスクリプトからビルドするDokcerfileを作成
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. 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
Alternate authentication credentialsを設定し、VSO-Agentを認証できるように準備する。詳細はこちらを参照のこと。
4. VSO-Agentの実行
4. VSO-Agentの実行
Control panel > Agent pools > Default > RolesからAgent Pool Administratorsに先ほど設定したAlternative authentication credentialsを指定する。
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の実行
BUILD > + からビルド定義を新規作成する。
4. VSO-Agentの実行
BUILD > + からビルド定義を新規作成する。Add build step… > Shell Scriptでファイルを指定する。
4. VSO-Agentの実行
BUILD > + からビルド定義を新規作成する。Add build step… > Shell Scriptでファイルを指定する。General > Default queueにDefaultを選択。
4. VSO-Agentの実行
ビルド定義を実行するとコンソールに結果が表示される。
4. VSO-Agentの実行
ビルド定義を実行するとコンソールに結果が表示される。ビルドが完了するのを見届ける。
4. VSO-Agentの実行
ビルド定義を実行するとコンソールに結果が表示される。ビルドが完了するのを見届ける。Docker Hubにコンテナイメージがpushされている。
4. VSO-Agentの実行
・Alternate authentication credentialsを設定する・Agent Pool Administratorsに追加する・VSO-Agentを起動する。・シェルスクリプトを呼出すビルド定義を作成、実行する
4. VSO-Agentの実行
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行
シナリオ
OverviewMicorosoft Azure Docker Hub
docker run cubedkachi/tfsug:29
Client Machine for control
Azure VM for Docker run
SSH
cubedkachi
tfsug
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
5. Dockerの実行
CoreOSからDockerを実行する。Docker Hubからコンテナイメージを取得して起動する。ブラウザからURLを指定すると空ページが表示される。
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. 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
そのコンテナ大丈夫?
1. Azure VMを準備2. VSO-Agentの設定3. Team Projectの作成4. VSO-Agentの実行5. Dockerの実行
インフラのテスト ← New!
シナリオ
環境作成を自動化するだけでは片手落ち。
ソースコードをCIするように環境構築スクリプトもCIして初めてインフラの品質が担保される。
インフラのテスト
次のセッションに続きます。
おまけ
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