GitLab + Dokku で作る CI/ CD 環境 Kazuhiro NISHIYAMA 第 78 回 Ruby 関西勉強会 2017/07/29 Powered by Rabbit 2.2.0

Similar documents
IIJ Technical WEEK アプリ開発を楽にするRuby PaaS「MOGOK」について

2. Docker の基本的な操作 1 docker hub の参照 2 DockerHub の Explorer リンクからアプリケーションを参照 3 アプリケーション検索 4 tag について 3. docker 基本コマンド 1 docker の

TeX LiveのCIテスティング

IIJ GIO, SaaS, MOGOK

クックパッドのテスト自動化

利用者

9 rbenv rbenv ruby 9.1 rbenv rbenv rbenv ruby ruby-build ruby 9.2 rbenv macos.bash_profile ~/.bash_profile ~/.bash_profile.bak $ touch ~/.bash_profile

Docker/Kubernetes実践コンテナ開発入門

+ Octopress + GitHubPages でブログを作成 Name: さりんじゃー

利用者

AWS Deck Template

Agenda 2

Docker Haruka Iwao Storage Solution Architect, Red Hat K.K. February 12, 2015

Agenda! 事前準備

DCL intro Manual for Ubuntu11.10

スライド 1

Ansible

BIGLOBE クラウドホスティング 開発お役立ちパック GitLab 利用マニュアル 1.0 版 (2013 年 7 月 3 日 ) ビッグローブ株式会社 1 Copyright 2013 BIGLOBE. All Rights Reserved

test

2 Rails pico planner camel case camel pico planner _ pico_planner snake case snake - chain case chain pico planner pico-planner CSS id class 2.3 Rails

目次 1. Serverspec とは 1.1. Serverspecとは 1.2. Serverspecで出来る事 2. セットアップ 2.1. 必要なもの 2.2. インストール 3. デモ 3.1. デモ環境について 3.2. テスト対象サーバーの登録 3.3. サンプルテストの中身 3.4.

Action Cableで簡易チャットを作ってみた Kazuhiro NISHIYAMA 第 87 回 Ruby 関西勉強会 2019/07/13 株式会社 Ruby 開発 Powered by Rabbit 2.2.1

PowerPoint Presentation

ii

スライド 1

A : kerl kerl Erlang/OTP Erlang/OTP 2 2 Elixir/Phoenix URL 2 PDF A.2 Bash macos.bash_profile exp

スピーカースライド作成前の確認シート例

bash on Ubuntu on Windows bash on Ubuntu on Windows bash on Ubuntu on Windows bash on Ubuntu on Windows bash on Ubuntu on Windows ˆ Windows10 64bit Wi

Sinatra と MongoDB 今回は Sinatra で MongoDB の操作を体験してみます 進捗に合わせて ドライバから Ruby で使える便利な ORM の紹介をします

本チュートリアルについて 14 部構成 比較的簡単なトピックから 各回 プログラミング言語 任意 チュートリアルで 新しい内容 宿題 プログラミング演習 次の週 結果について発表 もしくは話し合いをする スライドは Python で Python, C++, Java, Perl についての質問い答

HIGIS 3/プレゼンテーション資料/J_GrayA.ppt

Add-onアプリケーション開発 - 環境構築マニュアル -

[1] install PY2 PY3 Fabric & Invoke Quick Guide Invoke : Python で記述するタスクランナー Fabric : SSH を使うデプロイタスクランナー Fabric, Invoke 2018 Jeff Forcier. BSD 2-Claus

GitLab6セットアップガイド.pdf

Asakusa Test Driver

161 Debian.Deb 銀河系唯一の Debian 専門誌 GO


SLAMD導入手順

PowerPoint Presentation

Nagios XI - SNMPでのLinux監視

実践 Infrastructure as Code

Startup_on_AWS_usecases_StartupDay

ruby learner - Ruby

Helix Swarm2018.1アップグレード手順

はじめに ハンズオンだと思う者にはハンズオンであり もくもく会だと思う者にはもくもく会である

PPT Template

(28) SFC ( /Web


AWS Deck Template

Azure 環境 UiPath Orchestrator シングル構成構築手順書 v1.0

ruby novice ruby novice ruby novice.

OpenShift オープンソースで実現するPaaS環境 レッドハット株式会社 プラットフォームソリューション統括部 RHELソリューションアーキテクト 小島 啓史 Ver

目次 1. はじめに 本書対象者 PALRO のアプリケーションについて Ubuntu 8.04LTS の入手について Linux 上での開発環境の構築 事前準備 Ubuntu のインストール..

WinXp-Rmenu

Dockerの商用サービスでの利用事例紹介

AWS Deck Template

目次 1. 改版履歴 概要 WEB 版薬剤在庫管理システムのインストール 事前準備 インストール アプリケーションのセットアップ 日レセと連携するための有効化設定 WEB

スライド 1

再起動した状態になり パスワードを入力すると 図 2 のように DEXCS2011 のアイコ ンがデスクトップ上に表示される 2 端末を準備する メニューバーにある端末の形を左クリック 図 2 デスクトップ メニューバーに端末の形がない場合 図 3 メニューバー アプリケーション アクセサリー 端末

Ruby on Rails (RoR) を弄る

PowerPoint プレゼンテーション

(Part-3) 3 Why? How Who How Worth Part-1? Whom Part-2 When Part-3? What? Which How Much Part-4 summary 2

mnal_HDR4ex_5ex.pdf

Server Backup Manager 5.0 Debian および Ubuntu システムへの Server Backup Free のインストール 1. APT-GET をしてServer Backup Free をインストールする 2. Server Backup Free のインストール

第 1 章ターミナルの使い方 Ubuntu の場合は同種のソフトウェアに 端末 という名前が付いていますが 本書では OS X に合わせて ターミナル と呼ぶことにします 端末を起動するには Dash *1 に対して term というキーワードを入力し 検索結果の中から 端末 を探してクリックします

英語本「Drupal 8 Theming with Twig」で学ぶ その2

untitled

第5回 マインクラフト・プログラミング入門

Microsoft Azure Azure Microsoft Web Azure Microsoft Azure Azure IT Web (IoT) OS Docker Linux JavaScript Python.NET PHP Java Node.js Ruby ios Android W

オフラインメンテナンス説明書-ver5.0.0

"非" MS 技術でも安心! Azure 活用によるアプリケーション開発

目次 1. 改版履歴 概要 WEB 版薬剤在庫管理システムのインストール 事前準備 インストール アプリケーションのセットアップ WEB 版薬剤在庫管理システムの初期設定

開発者向けクラウドサービスを活用したリッチな Web/ モバイル アプリケーションの構築手法 杉達也 Fusion Middleware 事業統括本部担当ディレクター [2013 年 4 月 9 日 ] [ 東京 ]

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows : インストール・ガイド

51 Debian

クラウド内の Java - 動画スクリプト 皆さん こんにちは Steve Perry です 私たちが作成した人事アプリケーションを覚えていますか? 今回は そのアプリケーションをクラウド内で実行しましょう コードは GitHub の

レイアウト 1

P1.\..

10_11p01(Ł\”ƒ)

P1.\..

Q34Q35 2

2016 3

自己紹介 伊藤広樹 ( 所属 : 日本電信電話株式会社 ) 2015 年 2016 年 社内 OpenStack 基盤の運用 2017 年 ( 現在 ) Blazarにコントリビュート開始 平井普 ( 所属 :NTTコムウェア) 2011 年 2016 年 NTT 通信網 NW 機器の運用設定 20

PowerPoint プレゼンテーション

オフラインメンテナンス説明書

Microsoft PowerPoint - AXIES2015_OSS_tokiwa.pptx

swak4Foamを使って見ました.odp

システムパッケージリリース情報-Version5.0.0pre

Salesforce DX 設定ガイド

PowerPoint プレゼンテーション

システムパッケージリリース情報-Version5.1.0

ソフトウェアエンジニアリング - 機能 #54


日医標準レセプトソフト クラウド版の構築手順

Clonezilla-LCA2011

Emacs Ruby..

情報処理概論(第二日目)

Java インストール手順書 第六版 ( 社 ) 日本医師会

Sybase on CLUSTERPRO for Linux HowTo

Introduction 情報技術ドキュメント例 techdoc-ja は 日本語で情報技術ドキュメント ( 仕様書やドキュメント等 ) を記述するためのオーサリング環境を 提供します 本ドキュメントは その利用実例です 要件 ドキュメントを Markdown 形式で記述する コードブロックのシンタ

Transcription:

GitLab + Dokku で作る CI/ CD 環境 Kazuhiro NISHIYAMA 第 78 回 Ruby 関西勉強会 2017/07/29 Powered by Rabbit 2.2.0

自己紹介 西山和広 id:znz (github, twitter など ) Ruby コミッター 1/25

GitLab + Dokku GitLab GitLab CI Dokku (+ Heroku) 2/25

GitLab とは? 簡単にいえば OSS の GitHub クローンのようなもの Git ホスティング Merge Request (GitHub の Pull Request) Issue 管理など色々 GitHub にない機能もある https://about.gitlab.com/features/ 3/25

GitLab CI とは? Continuous Integration/Continuous Delivery (CI/CD) Jenkins のジョブを実行しないマスターのようなものが GitLab に組み込み GitLab Runner (Jenkins の slave のようなもの ) を動かすマシンが別途必要 repository の.gitlab-ci.yml で設定 (.travis.yml などと同様 ) https://about.gitlab.com/features/gitlab-ci-cd/ 4/25

GitLab Runner とは? マシン上で直接実行する (Shell executor) Docker の中で実行する (Docker executor) これを使用 その他 https://docs.gitlab.com/runner/ 5/25

Dokku とは? Docker を使った OSS のミニ Heroku (PaaS) ssh 経由の git で deploy できる http://dokku.viewdocs.io/dokku/ 6/25

組み合わせた状態 ブランチに push Dokku に Review App を deploy Merge Request をマージ Review App を停止 master に push Staging に deploy 確認後 クリックで Production に deploy https://about.gitlab.com/features/reviewapps/ 7/25

deploy 例 https://docs.gitlab.com/ce/ci/examples/ deployment/readme.html では dpl gem で heroku に deploy する例がある Dokku との組み合わせは独自研究 8/25

組み合わせ方.gitlab-ci.yml で設定する deploy 用の ssh 秘密鍵などは secret variables に設定 9/25

.gitlab-ci.yml の設定例 使用する docker image を指定 image: ruby:2.3.3 Rails アプリなので https://hub.docker.com/r/_/ ruby/ を使用 10/25

cache per-branch caching: cache: key: "$CI_COMMIT_REF_NAME" untracked: true https://docs.gitlab.com/ce/ci/yaml/#cache-key 11/25

テスト用 variables services で指定する postgres image で使用 (DATABASE_URL は Rails で使用 ) variables: # for test POSTGRES_DB: dbname POSTGRES_USER: dbuser POSTGRES_PASSWORD: dbpass DATABASE_URL: "postgres://dbuser:dbpass@postgres:5432/dbname" https://hub.docker.com/r/_/postgres/ 12/25

deploy 用 variables # for deploy DOKKU: ssh dokku@$dokku_host APP_NAME: $CI_ENVIRONMENT_SLUG DB_NAME: $CI_ENVIRONMENT_SLUG-database DOKKU はあとで短く表記するため APP_NAME は Dokku でのアプリ名 ( サブドメイン名 ) DB_NAME はデータベースコンテナ名 ( 内部用なので識別できれば何でも良い ) 13/25

stages stages: - test - review - staging - production ブランチに push test review master に push test staging production ( 後述の例 (1)) master に push test staging / タグを push test production ( 後述の例 (2)) 14/25

before_script before_script: - 'apt-get update -qq && apt-get -o dir::cache::archives="/cache/apt" install -y -qq sqlite3 libsqlite3-dev nodejs' - gem install bundler --no-ri --no-rdoc - bundle install --jobs $(nproc) --path=/cache/bundler - ln -nfs.test.env.env 開発環境に合わせてテスト環境でも sqlite3 が必要 js runtime も必要なので nodejs インストール時に /cache を使用 dotenv (dotenv-rails) でテスト用環境変数設定 15/25

.before_ssh.before_ssh: &before_ssh # https://docs.gitlab.com/ce/ci/ssh_keys/readme.html - 'which ssh-agent ( apt-get update -y && apt-get -o dir::cache::archives="/cache/apt" install -y openssh-client )' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - mkdir -p ~/.ssh # Set `ssh-keyscan $DOKKU_HOST` to SSH_SERVER_HOSTKEYS - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts' - '[[ -f /.dockerenv ]] && echo "$SSH_CONFIG" > ~/.ssh/config'. で始まるキーは後で参照する用途に使える Dokku や Heroku に ssh で git push するときの前処理 secret variables から ssh-agent に秘密鍵と known_hosts と ssh confg を設定 16/25

.deploy_script.deploy_script: &deploy_script - $DOKKU apps:create $APP_NAME echo $? # require `sudo dokku plugin:install https://github.com/dokku/dokku-postgres` - $DOKKU postgres:create $DB_NAME echo $? - $DOKKU postgres:link $DB_NAME $APP_NAME echo $? - $DOKKU config:set --no-restart $APP_NAME TZ=Asia/Tokyo RAILS_SERVE_STATIC_FILES=1 NO_FORCE_SSL=1 RACK_DEV_MARK_ENV=review - git push dokku@$dokku_host:$app_name HEAD:refs/heads/master - $DOKKU -tt run $APP_NAME bundle exec rake db:seed app と db がなければ作成 TZ などの環境変数設定 HEAD:refs/heads/master という指定で push -tt で強制的に tty を確保して rake db:seed 17/25

rake test rake: stage: test services: - postgres:latest script: - bundle exec rake db:setup RAILS_ENV=test - bundle exec rake services に指定した postgres image とリンクした状態で実行 データベースの初期設定をしてテスト実行 18/25

staging deploy (1) staging: stage: staging variables: APP_NAME: hello-app-staging.example.jp before_script: *before_ssh script: - git push dokku@$production_dokku_host:$app_name HEAD:refs/heads/master environment: name: staging url: https://hello-app-staging.example.jp/ only: - master before_script は sqlite3 のインストールなどの代わりに ssh 設定 Pipelines の Environments からリンク master に push したときのみ 19/25

production deploy (1) production: stage: production variables: APP_NAME: hello-app.example.jp before_script: *before_ssh script: - git push dokku@$production_dokku_host:$app_name HEAD:refs/heads/master environment: name: production url: https://hello-app.example.jp/ when: manual only: - master staging の後に手動実行 master に push したときのみ 20/25

staging deploy (2) staging: stage: staging variables: APP_NAME: hello-app-staging script: - gem install dpl - dpl --provider=heroku --app=$app_name --api-key=$heroku_staging_api_key environment: name: staging url: https://$app_name.herokuapp.com/ only: - master master に push したときのみ dpl で heroku に deploy 21/25

production deploy (2) production: stage: production variables: APP_NAME: hello-app script: - gem install dpl - dpl --provider=heroku --app=$app_name --api-key=$heroku_production_api_key environment: name: production url: https://$app_name.herokuapp.com/ only: - tags タグを push したときのみ dpl で heroku に deploy 22/25

review deploy review: stage: review before_script: *before_ssh script: *deploy_script environment: name: review/$ci_commit_ref_name url: http://$ci_environment_slug.$dokku_domain on_stop: stop_review only: - branches except: - master review 用の Dokku アプリを deploy master 以外のブランチに push したときのみ 23/25

stop review stop_review: stage: review variables: GIT_STRATEGY: none before_script: *before_ssh script: - $DOKKU apps:destroy $CI_ENVIRONMENT_SLUG --force echo $? - $DOKKU postgres:destroy $CI_ENVIRONMENT_SLUG-database --force echo $? environment: name: review/$ci_commit_ref_name action: stop when: manual only: - branches except: - master postgres は使用中だとエラーになるので apps から停止 リンクも消える 24/25

まとめ GitLab と Dokku を組み合わせて CI/CD 環境を作成する例を紹介 環境構築に使っている Ansible Playbook は https://github.com/znz/ansible-playbookgitlab-dokku ブログ記事は http://blog.n-z.jp/blog/ categories/gitlab/ Powered by Rabbit 2.2.0 25/25