SlideShare a Scribd company logo
1 of 59
Download to read offline
開発チームも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の実行
シナリオ
Overview
Micorosoft 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の実行
シナリオ
Overview
Micorosoft 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 hogehoge
CoreOS 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の実行
シナリオ
Overview
Micorosoft 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 login
Username: cubedkachi
Password: **********
Email: ******@*****.***
WARNING: login credentials saved in /home/*****/.docker/config.json
Login 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の実行
シナリオ
Overview
Micorosoft 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の実行
シナリオ
Overview
Micorosoft 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/vsoagent
Enter alternate username > tfsug
Enter alternate password > *********
Enter server url > https://**********.visualstudio.com
Enter 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の実行
シナリオ
Overview
Micorosoft 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' locally
29: Pulling from cubedkachi/tfsug
Digest:sha256:a9e6b1d09fd37aefd9007fd21e427f678a089f1041f51cb873b*****
Status: Downloaded newer image for cubedkachi/tfsug:29
1d51436b58e321c6ff4633726b724a967dbdcbec94d1909991bb08abaa378663
5. Dockerの実行
CoreOSからDockerを実行する。
Docker Hubからコンテナイメージを取得して起動する。
ブラウザからURLを指定すると空ページが表示される。
1. Azure VMを準備
2. VSO-Agentの設定
3. Team Projectの作成
4. VSO-Agentの実行
5. Dockerの実行
シナリオ
Overview
Micorosoft 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

More Related Content

What's hot

What's hot (20)

第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。
 
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオンJAWS-UG コンテナ支部 Docker入門 10分ハンズオン
JAWS-UG コンテナ支部 Docker入門 10分ハンズオン
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
 
Rancher command line interface
Rancher command line interfaceRancher command line interface
Rancher command line interface
 
はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCI
 
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
 
Jenkins with Docker
Jenkins with DockerJenkins with Docker
Jenkins with Docker
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
NDS#31
NDS#31NDS#31
NDS#31
 
はじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & LinuxはじめてのコンテナーDocker & Windows & Linux
はじめてのコンテナーDocker & Windows & Linux
 
とある社内ビックデータ基盤にバッチ用コンテナ基盤を構築してみた
とある社内ビックデータ基盤にバッチ用コンテナ基盤を構築してみたとある社内ビックデータ基盤にバッチ用コンテナ基盤を構築してみた
とある社内ビックデータ基盤にバッチ用コンテナ基盤を構築してみた
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 

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

3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 
Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化
hiroyuki nakajima
 

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

オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
 
DevCloud Installation and Some Hack
DevCloud Installation and Some HackDevCloud Installation and Some Hack
DevCloud Installation and Some Hack
 
Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19Docker hands on nifty sakura jul19
Docker hands on nifty sakura jul19
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
Hbstudy41 auto scaling
Hbstudy41 auto scalingHbstudy41 auto scaling
Hbstudy41 auto scaling
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
 
DevCloud Installation and Some Hack
DevCloud Installation and Some HackDevCloud Installation and Some Hack
DevCloud Installation and Some Hack
 
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
[TL10] Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry
 
Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化Fabricによるcloud stackインストール自動化
Fabricによるcloud stackインストール自動化
 
Dockerの導入
Dockerの導入Dockerの導入
Dockerの導入
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
Interact2015:Host Guardian Service ってなに?(仮)
Interact2015:Host Guardian Service ってなに?(仮)Interact2015:Host Guardian Service ってなに?(仮)
Interact2015:Host Guardian Service ってなに?(仮)
 
Docker講習会資料
Docker講習会資料Docker講習会資料
Docker講習会資料
 
VM 基盤運用チームの DevOps
VM 基盤運用チームの DevOpsVM 基盤運用チームの DevOps
VM 基盤運用チームの DevOps
 

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