Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

157 views

Published on

ここで紹介するテンプレートは、Jenkinsのパイプラインジョブで、Azure上でVMイメージを作成し、デプロイするテンプレートです。このテンプレートは、ちょっと工夫して拡張すれば、そのまま実務に利用できます。テンプレート利用において、特に制限はありません。ただ、技術的な中身については、クリエーションライン社及び著者が保証するものではありません。自己責任の下でご利用お願いします。

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Jenkins CI/CDテンプレート Azure版の利用方法解説 クリエーションライン株式会社 李 昌桓(LEE CHANGHWAN)
  2. 2. 自己紹介 • クリエーションライン株式会社 クラウドインテグレーション事業、データ分析サービス事業、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
  3. 3. 本資料では、下記のように公開している「JenkinsによるCI/CDテンプレート (Azure版)」の構成や利用方法を簡略に説明しています。ディテールな説明 を、、という声もありましたが、1冊の本になりそうで、あっさりと諦めました。 https://gitlab.com/jenkins-build-public/azure-template-ubuntu はじめに 2
  4. 4. jenkins CI/CDテンプレート利用方法 クリエーションライン株式会社 3 1.手許の環境 準備 2.MyGitリポ ジトリの準備 (Gitlab) 5.Slack CHANNEL作 成 6.Jenkinsイン ストール&初 期環境設定 3.テンプレー トののダウン ロード 4.MyGitリポ ジトリにPUSH 7.Azure Account&初 期環境 8.Jenkinsジョ ブの登録 9. Jenkinsジョ ブの実行
  5. 5. • gitコマンドが使えること https://git-for-windows.github.io/ • Atomなどのエディターを用意する https://atom.io/ 1.手許の環境準備 4
  6. 6. • Gitlabにアカウント登録する(GitHubやBitbucketでもOK) https://about.gitlab.com/ • Myグループ作成する your-jenkins-build-group • Myプロジェクトを用意する your-azure-template 2.MyGitリポジトリの準備 5
  7. 7. • 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
  8. 8. ここは、皆様の環境に依存することもあるかと思います。 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
  9. 9. • 実行結果を#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
  10. 10. 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
  11. 11. 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
  12. 12. 6-3.初期環境設定 11 「Administrator Password」設定 「Install suggest plugin」選択 「 Creater First Admin User」設定 「 Start Using Jenkins 」クリック 初期では、何も存在しません
  13. 13. • 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
  14. 14. 8.Jenkinsジョブの登録 13 ・プラグイン登録  Jenkinsの管理→プラグインの管理→利用可能タブで絞り込んでインストール  プラグインの中身は、関連ツールの認証情報の受け渡しとパッケージのインス トール ※パッケージが動かない場合、Jenkinsサーバにログインしてインストール ※認証チェインの受け渡しが 機能しない場合、provisionerにベタ書き • 認証情報設定  認証情報→System →グロバルドメイン→認証情報追加  下記は、Gitlabへの接続情報設定
  15. 15. • 新規ジョブ作成→ジョブ名入力(Enter an item name) →OK • 一般設定 14 同時実行しない ジョブ名。Jenkinsの内部では、ここで設定した 名称でソースコードのディレクトリ管理を行って いるのジョブ名は、タイプによって階層化して 表現したほが良い
  16. 16. • Pipelineの設定 GitlabへのURLと認証情報を設定する 15 GitlabのプロジェクトURI 認証情報 Gitlabのブランチ名 リポジトリのrootから Jenkinsfileの相対パス
  17. 17. 9. Jenkinsジョブの実行 9-1 send-message クリエーションライン株式会社 16 ジョブ選択 azure-send-message ジョブ実行 [ビルド実行] クリック(ログ表示)
  18. 18. クリエーションライン株式会社 17 ├─jenkins/ │ └─send-message/ │ └─Jenkinsfile │ └─run.sh ├─packer/ └─terraform/ userInputをもらう “send” run.sh実行 “Hello クリエーションさん” #slackに終了メッセージを送る ジョブ実行 Gitリレポジトリをダウンロード Jenkinsfile実行
  19. 19. クリエーションライン株式会社 18 Input requestedクリック sendと入力してクリック
  20. 20. 9-2.VMイメージ作成 クリエーションライン株式会社 19 gdb:graph database jen: jenkins server azure-packer-build-branch
  21. 21. クリエーションライン株式会社 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言語であるからある種の雛形 を理解れば、お手の物。
  22. 22. クリエーションライン株式会社 21 Ansibleでプロビジョニング Serverspecでチェック VMイメージ作成成功
  23. 23. 9-3.VMデプロイ(Terraform) クリエーションライン株式会社 22 azure-graphdb-deploy-dev
  24. 24. クリエーションライン株式会社 23 ├─jenkins │ └─gdb-deploy-dev │ └─Jenkinsfile │ └─run.sh └─terraform ├─gdb-deploy │ └─custom_data ├─dev.tfvars ├─provider.tf ├─variables.tf └─vm.tf #slackにメッセージを送る ジョブ実行 Gitリレポジトリをダウンロード Jekinsfile実行
  25. 25. 技術論だけでは、今回紹介しているJenkinsのAzureテンプレートを十分に活用できません。背景にある考え方を簡略に紹介しておきます。 • 稼働中のVMにログインして何等かの構成を行うようなことはやらない想定です。必要な構成は、すべてVMイメージに反映し、VM自体を 置き換えるという発想に基づいています。 • インフラも、ベーシックな機能をデプロイしてから開発をすすめながら、繰り返してVMイメージを作成し、VMを置き換えながら徐々に育てて 行きます。もちろん、ネットワークなど一部のリソースは、一過性のもので、一度構築したら変更できないものもあります。 • コード化する上では、繰り返して価値を産むような対象を優先すべきです。コード化の要求は、プロジェクトの進行と共にどんどん膨らんでき ます。システムライフサイクルからみて、一過性のものや、重要だが頻度がとても低いものなどは優先順位を下げるべきです。 • このテンプレートのようなインプラ構築を進めるは、利害関係者間の合意が必要です。インフラ構築も、手順書やチェックリストを片手に一 発勝負をする時代から、コードを書いてテストし、デプロイする。何が問題があれば、コードに戻る時代になりました。インフラも繰り返してデ プロイすると言い出すと、経験がない方は難色を示すかもしれません。運用が立ち上がるまで、インフラ及び開発、運用が同じチーム体制 で進めたほうがいいかも知れません。 • さらに、今回のようなテンプレートが有効に働くためには、システムのアーキテクチャー的なバックアップが必要です。特に高可用性構成は、 とても重要です。例えば、DBならクラスター化するとか、アプリケーションならコンテナー化(Docker)することが考えられます。これは、一 概には言えないことで、システムが置かれた状況に応じて柔軟に対処する必要があります。 補足 24
  26. 26. 以上 25

×