OpenShift v3

Continuous Integration and Delivery

Takayoshi Kimura @nekop

OpenShiftの特徴

  • Kubernetesがスケーリングや障害復旧、Blue Green Deploymentなど基本的な機能をカバー
  • ドキュメントがまだ豊富ではないので、難しく見える
  • OpenShiftのデプロイは慣れれば簡単
  • 利用者はDockerわからなくてもそこそこ使える
  • 利用者はDockerランタイム持ってなくてもOpenShift上でDocker使える

つかいかた

シンプルなケース

  • oc new-app <git clone url>
  • oc expose service <service name>
  • http://<service>.<project>.<domain>

つかいかた

データベースとかある場合はテンプレート

  • oc new-app -f <template file> --param=foo=bar,hoge=fuga
  • http://<service>.<project>.<domain>

つかいかた

既存のDocker image動かしたい

  • oc new-app <docker pull spec>
  • oc expose service <service name>
  • http://<service>.<project>.<domain>

基本的な開発フロー

  • git pushやoc start-buildでビルド指示
  • OpenShiftがソースからDocker imageをビルド
  • OpenShiftがDocker imageを実行環境へデプロイ

どこで自動テストするの?

OpenShiftでCI

Jenkinsさんを使う?

  • Docker imageのテストにJenkinsは基本大変
    • Jenkins slave混ぜてDocker imageビルド
    • コンテナ内でsshdを動かしてslaveをプロビジョニング
  • Jenkinsを使う場合はDockerやコンテナの恩恵は受けられないけどOpenShift関係なくふつうにOpenShiftの外でJenkins使うのが現状無難

OpenShiftでCI

fabric8 (ファブリケイト)

  • DevOps促進統合プラットフォーム
  • CDも含むDeployment pipelineのサポートがすごそう
  • 重量級な感じなのでまだ調べられてません
  • http://fabric8.io/

OpenShiftでCI

STIビルドに自動テストを混ぜる

asssemble

#!/bin/bash

echo "*** start assemble"
curl -o ./assemble.upstream https://raw.githubusercontent.com/openshift/sti-ruby/master/2.0/.sti/bin/assemble
. ./assemble.upstream
bundle exec rake test
echo "*** end assemble"

自動テストOKです!

リリースだ!

OpenShiftでCD

  • 開発環境をexportしてテスト環境と本番環境をコピペ構築
  • Dockerイメージのままテスト環境へリリース
  • ImageStreamのtagを利用

OpenShiftでCD

ImageStreamとは

  • Docker imageへの参照を管理
    • Docker imageはDocker registryに格納されているので、Docker imageを保持しているわけではないです
  • tagが付けられます
    • tagはgitでいうところのbranchで、イメージの履歴が保持できます

タグ追加

#!/bin/bash

# ImageStreamに"test"というタグを新規追加
oc tag library/hello-sinatra:latest hello-sinatra:test

テスト環境の準備

#!/bin/bash

# DeploymentConfig, Service, Routeをexportしてリネームして流し込んでテスト環境を構築
oc export dc,se,route --all -o yaml --as-template=hello-sinatra > test-hello-sinatra.yaml
perl -i -pe 's/hello-sinatra([^:\/@])/test-hello-sinatra$1/g' test-hello-sinatra.yaml
perl -i -pe 's/name: hello-sinatra:latest/name: hello-sinatra:test/g' test-hello-sinatra.yaml
oc new-app -f test-hello-sinatra.yaml

テスト環境リリース

#!/bin/bash

# ImageStreamの状況を確認して、イメージをテスト環境へリリース
oc describe is hello-sinatra
oc tag hello-sinatra@sha256:<リリースするイメージのsha256値> hello-sinatra:test

典型的な例

$ oc describe is hello-sinatra
Name:           hello-sinatra
Created:        26 hours ago
Labels:         <none>
Docker Pull Spec:   <registry>:5000/hello-sinatra/hello-sinatra

Tag     Created       PullSpec
latest   7 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v4
         7 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v3
         9 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v2
        25 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v1
        25 hours ago  library/hello-sinatra:latest
test     7 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v3
         9 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v2
        25 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v1
        25 hours ago  library/hello-sinatra:latest
prod     9 hours ago  <registry>:5000/hello-sinatra/hello-sinatra@sha256:v2
        25 hours ago  library/hello-sinatra:latest

リリースできたよ!

CIとCDでより早く
より安全なリリースを
しよう!

OpenShift v3 CI/CD

By Takayoshi Kimura

OpenShift v3 CI/CD

OpenShift v3 basic CI and CD

  • 5,634
Loading comments...

More from Takayoshi Kimura