SlideShare uma empresa Scribd logo
1 de 26
Jenkins CI/CDテンプレート
Azure版の利用方法解説
クリエーションライン株式会社
李 昌桓(LEE CHANGHWAN)
自己紹介
• クリエーションライン株式会社
クラウドインテグレーション事業、データ分析サービス事業、MSP事業、トレーニングコース提
供(Chef、Dockerなど)。
• 李 昌桓 (LEE CHANGHWAN)、データエンジニアリングチームのシニアアーキテクト。
データベースが大好きなサーバサイド のエンジニア。AWS、Azure、RDB、DWH、
Hadoop、Spark、MongoDB、GraphDB(Neo4j)、Jenkinsなど、
インフラからビックデータ処理までマルチスキルエンジニアとして活動している。
• 著書
 Amazon Cloudテクニカルガイド(インプレス、2010)
 Amazon Elastic MapReduceテクニカルガイド(インプレス、2012)
 Cypherクエリー言語の事例で学ぶグラフデータベースNeo4j(インプレスR&D、2015)
 グラフ型データベース入門(共著:リックテレコム、2016)
 RDB技術者のためのNoSQLガイド(共著:秀和システム、2016)
1
本資料では、下記のように公開している「JenkinsによるCI/CDテンプレート
(Azure版)」の構成や利用方法を簡略に説明しています。ディテールな説明
を、、という声もありましたが、1冊の本になりそうで、あっさりと諦めました。
https://gitlab.com/jenkins-build-public/azure-template-ubuntu
はじめに
2
jenkins CI/CDテンプレート利用方法
クリエーションライン株式会社 3
1.手許の環境
準備
2.MyGitリポ
ジトリの準備
(Gitlab)
5.Slack
CHANNEL作
成
6.Jenkinsイン
ストール&初
期環境設定
3.テンプレー
トののダウン
ロード
4.MyGitリポ
ジトリにPUSH
7.Azure
Account&初
期環境
8.Jenkinsジョ
ブの登録
9. Jenkinsジョ
ブの実行
• gitコマンドが使えること
https://git-for-windows.github.io/
• Atomなどのエディターを用意する
https://atom.io/
1.手許の環境準備
4
• Gitlabにアカウント登録する(GitHubやBitbucketでもOK)
https://about.gitlab.com/
• Myグループ作成する
your-jenkins-build-group
• Myプロジェクトを用意する
your-azure-template
2.MyGitリポジトリの準備
5
• Gitlabに公開している
https://gitlab.com/jenkins-build-public/azure-template-ubuntu
• Repository→Filesからダウンロードする
azure-template-ubuntu-master-xxxxxxxx.zip
• azure-template-ubuntu-master-xxxxxxxx.zip解凍
3.テンプレートのダウンロード
6
ここは、皆様の環境に依存することもあるかと思います。
mkdir your-local-jenkins-build
cd your-local-jenkins-build
mkdir your-azure-template
cd your-azure-template
前項でしたファイルをyour-azure-templateにコピー
git init
git remote add origin https://gitlab.com/your-jenkins-build/your-azure-
template.git
git fetch
ソースコードのなかでアカウント、認証キー、Azure上の各種リソースは、皆様の環境に合わせて編集してください
git add .
git commit -m "Initial commit"
git push -u origin master
4.MyGitリポジトリにPUSH
7
• 実行結果を#slackに通知する準備をする。
• Your SLACKから通知用の「YOUR CHANNEL」作成
• https://your-account.com/appsを開く
• 検索ボックスで「jenkins ci」を検索し、クリック
• 「Add configuration」をクリック
• Post to channelで「YOUR CHANNEL」検索
• Add jenkins CI Integrationクリック
• [Customize Name]を入力/[Token]をメモ帳に控える/Save Settingクリック
5.SlackのCHANNEL作成
8
CentOS7.0にJenkinsをインストールする
http://qiita.com/inakadegaebal/items/b526ffbdbe7ff2b443f1
yum install java-1.8.0-openjdk
yum install git -y
yum install ansible -y
yum install unzip -y
yum install -y gcc libffi-devel python-devel openssl-devel httpd
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins -y
cat<<EOF>/etc/httpd/conf.d/jenkins.conf
ProxyPass /jenkins ajp://localhost:8080/jenkins nocanon
ProxyPassReverse /jenkins ajp://localhost:8080/jenkins
ProxyRequests Off
AllowEncodedSlashes On
<Proxy "ajp://localhost:8080/jenkins">
Order deny,allow
Allow from all
</Proxy>
EOF
service jenkins restart
chkconfig jenkins on
systemctl resart httpd
systemctl enable httpd
mkdir /var/lib/jenkins/.ssh
chown jenkins. /var/lib/jenkins/.ssh
chmod 700 /var/lib/jenkins/.ssh
chown jenkins. /var/lib/jenkins/.ssh/clee-jenkins-build.pem
chmod 600 /var/lib/jenkins/.ssh/clee-jenkins-build.pem
6.Jenkinsインストール&初期環境設定
6-1.install on CentOS7
9
apt-get install -y apache2 openjdk-8-jdk
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add -
echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
apt-get update -y
apt-get install -y jenkins
echo JENKINS_ARGS="$JENKINS_ARGS --prefix=$PREFIX" >> /etc/default/jenkins
service jenkins restart
cat << EOF > /etc/apache2/mods-enabled/jenkins.conf
ProxyPass /jenkins http://localhost:8080/jenkins
ProxyPassReverse /jenkins http://localhost:8080/jenkins
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://localhost:8080/jenkins>
Order deny,allow
Allow from all
</Proxy>
EOF
a2enmod proxy
a2enmod proxy_http
service apache2 restart
mkdir /var/lib/jenkins/.ssh
chown jenkins. /var/lib/jenkins/.ssh
chmod 700 /var/lib/jenkins/.ssh
chown jenkins. /var/lib/jenkins/.ssh/clee-jenkins-build.pem
chmod 600 /var/lib/jenkins/.ssh/clee-jenkins-build.pem
6-2.install on ubuntu16.04
10
6-3.初期環境設定
11
「Administrator Password」設定
「Install suggest plugin」選択
「 Creater First Admin User」設定
「 Start Using Jenkins 」クリック
初期では、何も存在しません
• Azure Account取得
• テナントID控える
 サブスクリプション情報から控える
AZURE_TENANT=aa12daff-xxxx-xxxx-xxxx-1aa12abcdefc12
• 認証情報取得
 Master Accountからアプリケーション登録し、キー生成して控える
AZURE_CLIENT_ID=1a2ab123-xxxx-xxxx-xxxx-1a1234ab12ab
AZURE_SECRET=XXXX+5vIF4XXXXXXXXXXgtLKcSAx1dRXXXXXXkPC
 サブスクリプションに登録要
• Azure環境を作成する
 リソースグループ
 ストレージ
 ネットワーク(VENT/SUBNET)
 セキュリティグループ(SUBNETと関連付け)
7.Azure Account&初期環境
12
8.Jenkinsジョブの登録
13
・プラグイン登録
 Jenkinsの管理→プラグインの管理→利用可能タブで絞り込んでインストール
 プラグインの中身は、関連ツールの認証情報の受け渡しとパッケージのインス
トール
※パッケージが動かない場合、Jenkinsサーバにログインしてインストール
※認証チェインの受け渡しが 機能しない場合、provisionerにベタ書き
• 認証情報設定
 認証情報→System →グロバルドメイン→認証情報追加
 下記は、Gitlabへの接続情報設定
• 新規ジョブ作成→ジョブ名入力(Enter an item name) →OK
• 一般設定
14
同時実行しない
ジョブ名。Jenkinsの内部では、ここで設定した
名称でソースコードのディレクトリ管理を行って
いるのジョブ名は、タイプによって階層化して
表現したほが良い
• Pipelineの設定
GitlabへのURLと認証情報を設定する
15
GitlabのプロジェクトURI
認証情報
Gitlabのブランチ名
リポジトリのrootから
Jenkinsfileの相対パス
9. Jenkinsジョブの実行
9-1 send-message
クリエーションライン株式会社 16
ジョブ選択
azure-send-message
ジョブ実行
[ビルド実行]
クリック(ログ表示)
クリエーションライン株式会社 17
├─jenkins/
│ └─send-message/
│ └─Jenkinsfile
│ └─run.sh
├─packer/
└─terraform/
userInputをもらう “send”
run.sh実行 “Hello クリエーションさん”
#slackに終了メッセージを送る
ジョブ実行
Gitリレポジトリをダウンロード
Jenkinsfile実行
クリエーションライン株式会社 18
Input requestedクリック
sendと入力してクリック
9-2.VMイメージ作成
クリエーションライン株式会社 19
gdb:graph database
jen: jenkins server
azure-packer-build-branch
クリエーションライン株式会社 20
ジョブ実行
Gitリレポジトリをダウンロード
Jenkinsfile実行
├─jenkins
│ └─ packer-build
│ └─Jenkinsfile
│ └─run.sh
└─packer
├─ansible
│ └─roles
│ ├─base
│ │ ├─files
│ │ └─tasks
│ │ └─main.yaml
│ └─gdb
│ ├─files
│ └─tasks
│ └─base.yaml
├─scripts
└─serverspec
│ ├─spec
│ │ ├─base
│ │ └─gdb
│ └─yaml
└─clee-gdb.json
└─variables.json
#slackに終了メッセージを送る
複雑に見えるがすべてJenkinsfile
(Groovy)にすべて収束されるシンプルな
構造。
Shellスクリプトを埋め込んだりするが、基
本的にDSL言語であるからある種の雛形
を理解れば、お手の物。
クリエーションライン株式会社 21
Ansibleでプロビジョニング
Serverspecでチェック
VMイメージ作成成功
9-3.VMデプロイ(Terraform)
クリエーションライン株式会社 22
azure-graphdb-deploy-dev
クリエーションライン株式会社 23
├─jenkins
│ └─gdb-deploy-dev
│ └─Jenkinsfile
│ └─run.sh
└─terraform
├─gdb-deploy
│ └─custom_data
├─dev.tfvars
├─provider.tf
├─variables.tf
└─vm.tf
#slackにメッセージを送る
ジョブ実行
Gitリレポジトリをダウンロード
Jekinsfile実行
技術論だけでは、今回紹介しているJenkinsのAzureテンプレートを十分に活用できません。背景にある考え方を簡略に紹介しておきます。
• 稼働中のVMにログインして何等かの構成を行うようなことはやらない想定です。必要な構成は、すべてVMイメージに反映し、VM自体を
置き換えるという発想に基づいています。
• インフラも、ベーシックな機能をデプロイしてから開発をすすめながら、繰り返してVMイメージを作成し、VMを置き換えながら徐々に育てて
行きます。もちろん、ネットワークなど一部のリソースは、一過性のもので、一度構築したら変更できないものもあります。
• コード化する上では、繰り返して価値を産むような対象を優先すべきです。コード化の要求は、プロジェクトの進行と共にどんどん膨らんでき
ます。システムライフサイクルからみて、一過性のものや、重要だが頻度がとても低いものなどは優先順位を下げるべきです。
• このテンプレートのようなインプラ構築を進めるは、利害関係者間の合意が必要です。インフラ構築も、手順書やチェックリストを片手に一
発勝負をする時代から、コードを書いてテストし、デプロイする。何が問題があれば、コードに戻る時代になりました。インフラも繰り返してデ
プロイすると言い出すと、経験がない方は難色を示すかもしれません。運用が立ち上がるまで、インフラ及び開発、運用が同じチーム体制
で進めたほうがいいかも知れません。
• さらに、今回のようなテンプレートが有効に働くためには、システムのアーキテクチャー的なバックアップが必要です。特に高可用性構成は、
とても重要です。例えば、DBならクラスター化するとか、アプリケーションならコンテナー化(Docker)することが考えられます。これは、一
概には言えないことで、システムが置かれた状況に応じて柔軟に対処する必要があります。
補足
24
以上
25

Mais conteúdo relacionado

Mais procurados

明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
Takeshi Komiya
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
tamtam180
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
Sugawara Genki
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
 

Mais procurados (20)

明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
Chef社内勉強会(第1回)
Chef社内勉強会(第1回)Chef社内勉強会(第1回)
Chef社内勉強会(第1回)
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpecマニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
 
Using ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixivUsing ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixiv
 
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
 
Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)Ansibleで始めるinfraTDD(初級編)
Ansibleで始めるinfraTDD(初級編)
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
Rubyで楽々サーバー管理 - 岡山Ruby会議01 -
 
Serverspecの活用tips紹介
Serverspecの活用tips紹介Serverspecの活用tips紹介
Serverspecの活用tips紹介
 
Puppetのススメ
PuppetのススメPuppetのススメ
Puppetのススメ
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
Ansible handson
Ansible handsonAnsible handson
Ansible handson
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
 
Ansible 2.10 と Collection
Ansible 2.10 と CollectionAnsible 2.10 と Collection
Ansible 2.10 と Collection
 

Semelhante a Jenkins cicdテンプレートazure版の利用方法解説

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
Yasuhiro Arai
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Kazumi Hirose
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
Etsuji Nakai
 

Semelhante a Jenkins cicdテンプレートazure版の利用方法解説 (20)

Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdiJenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
 
同じサービスを ECSとOpsWorksで 運用してみた
同じサービスをECSとOpsWorksで運用してみた同じサービスをECSとOpsWorksで運用してみた
同じサービスを ECSとOpsWorksで 運用してみた
 
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
PHP on Cloud
PHP on CloudPHP on Cloud
PHP on Cloud
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみましたJAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
JAWS-UG コンテナ支部 #15 - Amazon ECSの開発環境を動的に管理するツールを作ってみました
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境
 
SQL Server エンジニア のための コンテナ入門
SQL Server エンジニア のための コンテナ入門SQL Server エンジニア のための コンテナ入門
SQL Server エンジニア のための コンテナ入門
 
SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 

Jenkins cicdテンプレートazure版の利用方法解説