無料のクラウドサービスを使用して最新のCI / CDチェーンを作成する方法







開発者に課されたタスクの解決策を見つけるのは難しい場合があります。 しかし、コードを「出荷」するのはとてもクールなので、作成者は受け取ったらすぐに全世界と共有したいと考えています。 未使用のプログラムは、デジタルジャンクに他なりません。 不要なソフトウェアに時間を無駄にしないために、現代の開発者は機能を小さな部分で提供し、プロセスを短い反復に分割します。







このソフトウェア作成方法は、継続的インテグレーションと継続的展開、またはCI / CDチェーンのプロセスで使用されます。 この記事では、無料のクラウドサービスを使用してチェーンを構築し、そのようなチェーンをセットアップするすべての手順を説明します。







次のことを行います。







  1. Hello Worldではなく、小さなPythonプログラムを作成しましょう。
  2. いくつかの自動テストを作成しましょう。
  3. GitHubにコードを投稿しましょう。
  4. 自動テストを継続的に実行するようにTravis CIを構成します。
  5. Better Code Hubを設定して、コードの品質を常にチェックします。
  6. PythonプログラムをWebアプリケーションに変換します。
  7. アプリケーションのDockerイメージを作成します。
  8. DockerイメージをDocker Hubに配置します。
  9. HerokuでDockerイメージを展開します。


この記事では、最新のソフトウェア開発チェーンの基本的なコンポーネントと、これらのコンポーネントを単一の全体に結合する方法を読者に示すことを目指しています。 テキストは、プログラミング言語や開発方法論では強調されていません。 一部のコンポーネントは、プロセススタックで使用されているコンポーネントと一致しない場合があります。 ただし、この場合でも、提案されているすべての手順を実行することをお勧めします。 チェーンを最初から最後まで共通に理解していれば、自分で調整するのがはるかに簡単になります。







読者に完全に正直になるために、私はBetter Code Hubの開発者の一人であることを報告しなければなりません。







ステップ番号1:トレンディなフレーズジェネレーターを作成する



そのため、ラップトップからクラウドまで、チェーンのすべての段階を実行する小さなプログラムが必要です。 この目的のために、ファッショナブルなCI / CDフレーズのジェネレーターをPythonで作成します。







新しいディレクトリ「cicd-buzz」を作成し、その中に「buzz」と呼ばれる別のディレクトリを作成し、その中に以下のコードを含む「generator.py」ファイルを作成します。







import random buzz = ('continuous testing', 'continuous integration', 'continuous deployment', 'continuous improvement', 'devops') adjectives = ('complete', 'modern', 'self-service', 'integrated', 'end-to-end') adverbs = ('remarkably', 'enormously', 'substantially', 'significantly', 'seriously') verbs = ('accelerates', 'improves', 'enhances', 'revamps', 'boosts') def sample(l, n = 1): result = random.sample(l, n) if n == 1: return result[0] return result def generate_buzz(): buzz_terms = sample(buzz, 2) phrase = ' '.join([sample(adjectives), buzz_terms[0], sample(adverbs), sample(verbs), buzz_terms[1]]) return phrase.title() if __name__ == "__main__": print generate_buzz()
      
      





また、このディレクトリに空の「 init .py」ファイルを作成します。 これで、プロジェクト構造は次のようになります。







 cicd-buzz/ buzz/ __init__.py generator.py
      
      





「buzz」ディレクトリに移動して、スクリプトを実行します。







 [cicd-buzz/buzz] $ python generator.py End-To-End Devops Enormously Boosts Continuous Testing
      
      





数回試してみてください-楽しいです:







 [cicd-buzz/buzz] $ python generator.py Complete Continuous Improvement Enormously Improves Devops [cicd-buzz/buzz] $ python generator.py Modern Devops Remarkably Improves Continuous Testing
      
      





ステップ番号2:自動テストを作成する



継続的デリバリーチェーンが必要なのは、実行が不十分なソフトウェアの継続的な出荷を回避するのに役立つ多くの自動テストが記述されている場合のみです。 単体テストを配置するには、プロジェクトのルートディレクトリに「tests」フォルダーを作成します。 以下のコードをファイル「test_generator.py」に保存します。







 import unittest from buzz import generator def test_sample_single_word(): l = ('foo', 'bar', 'foobar') word = generator.sample(l) assert word in l def test_sample_multiple_words(): l = ('foo', 'bar', 'foobar') words = generator.sample(l, 2) assert len(words) == 2 assert words[0] in l assert words[1] in l assert words[0] is not words[1] def test_generate_buzz_of_at_least_five_words(): phrase = generator.generate_buzz() assert len(phrase.split()) >= 5
      
      





「pytest」フレームワークを使用してテストを実行します。 これをインストールするには、Python仮想環境( 'virtualenv')が必要です。 心配する必要はありません。言うよりも簡単にします。 まず, virtualenv



。 次に、プロジェクトのルートディレクトリで次のコマンドを実行します。







 [cicd-buzz] $ virtualenv venv
      
      





その結果、新しいディレクトリ「venv」が作成されます。 この環境の使用を開始するには、次を実行します。







 [cicd-buzz] $ source venv/bin/activate (venv) [cicd-buzz] $
      
      





次に、「requirements.txt」というファイルを作成し、pytestへの依存関係をそこに記述します。







 pytest==3.0.6
      
      





requirements.txtにリストされている要件をロードするには、「pip」コマンドを実行します:







 (venv) [cicd-buzz] $ pip install -r requirements.txt
      
      





プロジェクトのルートディレクトリは次のようになります。







 cicd-buzz/ buzz/ requirements.txt tests/ venv/
      
      





これで、仮想環境を使用して、「test_generator.py」からテストを実行できます。







 (venv) [cicd-buzz] $ python -m pytest -v tests/test_generator.py
      
      





コマンドからの出力は次のようになります。







 ========== test session starts ========== platform darwin -- Python 2.7.10, pytest-3.0.6, py-1.4.32, pluggy-0.4.0 -- /Users/rob/projects/workspace/cicd-buzz/venv/bin/python cachedir: .cache rootdir: /Users/rob/projects/workspace/cicd-buzz, inifile: collected 3 items tests/test_generator.py::test_sample_single_word PASSED tests/test_generator.py::test_sample_multiple_words PASSED tests/test_generator.py::test_generate_buzz_of_at_least_five_words PASSED ========== 3 passed in 0.02 seconds ==========
      
      





ステップ番号3:GitHubにコードを投稿する



GitHubにログインし(まだアカウントをお持ちでない場合はサインアップして)、新しいパブリックリポジトリ「cicd-buzz」を作成します。







プロジェクトのルートディレクトリで、1行を含むファイル「.gitignore」を作成します。







 venv
      
      





これは、gitがvirtualenvをリポジトリに追加しないようにするためです。 次に、Gitをローカルで初期化し、コードをGitHubに送信します。







 [cicd-buzz] $ git init [cicd-buzz] $ git add * [cicd-buzz] $ git commit -m "Initial commit" [cicd-buzz] $ git remote add origin git@github.com:<YOUR_GITHUB_USERNAME>/cicd-buzz.git [cicd-buzz] $ git push -u origin master
      
      





ステップ番号4:各コミット後にテストを実行するには、Travis CIを接続します



Travis CIは継続的インテグレーションのクラウドサービスです。 GitHubの公開リポジトリの場合、無料です。 Travis CIのアカウントを取得するには、 https://travis-ci.orgにアクセスし、GitHub資格情報を使用してログインします。







Travis CIのリポジトリのプッシュおよびプルリクエストごとにアセンブリを有効にするのは非常に簡単です。 これを行うには、cicd-buzzリポジトリの反対側にあるスイッチを移動します(リポジトリがリストにない場合は、[アカウントを同期]をクリックします)。









Travis CIをアクティブ化する最後の手順は、プロジェクトのルートディレクトリに「.travis.yml」ファイルを追加することです。 バズジェネレーターには、次のものが含まれている必要があります。







 language: python script: - python -m pytest -v
      
      





このファイルをGitに追加し、変更をコミットしてGithubに送信します。







 [cicd-buzz] $ git add .travis.yml [cicd-buzz] $ git commit -m "Add Travis CI configuration" [cicd-buzz] $ git push
      
      





Travis CIツールバーに移動します。 すぐに、Travisはコードの変更を通知し、コードの構築/テストを開始します。 出力ログでは、単体テストの結果を確認できます。











ステップ5:より良いコードハブをチェーンに追加する



自動化されたテストを使用してコードのパフォーマンスを絶えずチェックする、十分に機能するメカニズムができたので、機能に集中し、コードの品質を忘れたいと思います。 Better Code Hubは、サポートされている最新のコードを作成するための10の推奨事項に従ってコードの品質をチェックするクラウドサービスです。 Better Code Hubは、開発結果(文字通りGitHubをプッシュするたびに)を常に監視し、コードの品質が危険にさらされている状況について報告します。







Travis CIのようなより良いコードハブは、GitHubとシームレスに統合します。 リポジトリに添付するには、 https://bettercodehub.comにアクセスし 、「無料」というラベルの付いたログインボタンを選択します。







GitHubの資格情報でログインすると、GitHubリポジトリのリストが開きます。 「cicd-buzz」を見つけて、「再生」ボタンをクリックします。 Better Code Hubは、標準設定で分析を実行するかどうかを尋ねます。 [Go]を押して数秒間待ちます。その後、画面にレポートが表示されます。









Better Code Hubに関するレポートのトップ







プッシュおよびプルリクエスト(Travis CIなど)ごとにBetter Code Hubで分析する場合は、歯車アイコンをクリックしてスイッチを移動します。











ステップ6:バズジェネレーターをシンプルなWebアプリケーションに変える



いいね! これで、コードのパフォーマンスと品質をチェックする継続的インテグレーションのチェーンができました。 次に、テストしたコードの継続的な展開を構成する必要があります。







WebアプリケーションをHerokuにデプロイして、HTTPリクエストを受け入れ、HTMLを出力するようにバズジェネレーターに教えるため、Python Flaskラッパーを作成します。 ファイル「app.py」を、次のコードを含むプロジェクトのルートディレクトリに追加します。







 import os import signal from flask import Flask from buzz import generator app = Flask(__name__) signal.signal(signal.SIGINT, lambda s, f: os._exit(0)) @app.route("/") def generate_buzz(): page = '<html><body><h1>' page += generator.generate_buzz() page += '</h1></body></html>' return page if __name__ == "__main__": app.run(host='0.0.0.0', port=os.getenv('PORT')) # port 5000 is the default
      
      





また、「requirements.txt」に別の行を追加します。







 pytest==3.0.6 Flask==0.12
      
      





そして、新しい依存関係をインストールします。







 (venv) [cicd-buzz] $ pip install -r requirements.txt
      
      





これで、次のコマンドを使用してWebアプリケーションを起動できます。







 [cicd-buzz] $ python app.py * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
      
      





ブラウザリンクhttp:// localhost:5000を開き、作業の結果を楽しみます。 楽しい時間を過ごすには、ページを数回更新してください。











最後に、コミットを追加し、変更をGitHubにポストすることを忘れないでください。







 [cicd-buzz] $ git add app.py [cicd-buzz] $ git add requirements.txt [cicd-buzz] $ git commmit -m "Step 5" [cicd-buzz] $ git push
      
      





これで、Travis CIとBetter Code Hubがこれらの変更をキャッチしてコードを確認するのを楽しむことができます。







ステップ7:ドッカーを使用してアプリをコンテナ化する



Dockerは、アプリケーションから簡単にデプロイ可能なコンテナーを作成するのに役立ちます。 単純なPythonおよびFlaskプログラムの場合、これは冗長に思えるかもしれませんが、コンテナーの形でコードをデプロイすると、プロジェクトの成長とともに明らかになる多くの利点があります。







既にDockerがインストールされている場合は、次の内容の「Dockerfile」をプロジェクトのルートディレクトリに追加します。







 FROM alpine:3.5 RUN apk add --update python py-pip COPY requirements.txt /src/requirements.txt RUN pip install -r /src/requirements.txt COPY app.py /src COPY buzz /src/buzz CMD python /src/app.py
      
      





これらの指示に従って、dockerは基本的な高山イメージを取得し、Pythonとpipをインストールし、Webアプリケーションをインストールします。 最後の行は、コンテナの起動時にWebアプリケーションを起動するようにdockerに指示します。







これで、Dockerイメージが問題なくビルドおよび実行されます。







 [cicd-buzz] $ docker build -t cicd-buzz . [cicd-buzz] $ docker run -p 5000:5000 --rm -it cicd-buzz
      
      





結果を賞賛する:









Dockerコンテナで実行されるCI / CDバズジェネレーター







繰り返しますが、変更をコミットしてGitHubに送信してください。







 [cicd-buzz] $ git add Dockerfile [cicd-buzz] $ git commmit -m "Step 6" [cicd-buzz] $ git push
      
      





ステップ#8:Docker Hubに公開する



Docker HubなどのDockerイメージのレジストリに公開すると、コンテナーをさまざまな環境に簡単に展開し、以前のバージョンにロールバックできます。 この手順を完了するには、 https: //docker.comのアカウントと、プロジェクトのルートにある新しいディレクトリ「.travis」の「deploy_dockerhub.sh」ファイルが必要です。







 #!/bin/sh docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS if [ "$TRAVIS_BRANCH" = "master" ]; then TAG="latest" else TAG="$TRAVIS_BRANCH" fi docker build -f Dockerfile -t $TRAVIS_REPO_SLUG:$TAG . docker push $TRAVIS_REPO_SLUG
      
      





Travis CIは各スクリプトの最後にこのスクリプトを実行し、Dockerイメージを作成します。 3つの環境変数に注意してください。 これらは、Travis CIの「cicd-buzz」リポジトリの「設定」タブで定義できます。









Travis CIのDockerの環境変数







Travis CIがGitHubリポジトリーにコミットするたびにDocker Hubにイメージを公開するには、次のように「.travis.yml」を変更します。







 sudo: required services: - docker language: python script: - python -m pytest -v after_success: - sh .travis/deploy_dockerhub.sh
      
      





コミットを作成し、これらの変更をGitHubに送信した後(およびTravis CIが作業を終了するのを待って)、Docker Hubから直接バズジェネレーターでコンテナーを起動できます。







 [cicd-buzz] $ docker run -p5000:5000 --rm -it <YOUR_DOCKER_USERNAME>/cicd-buzz:latest
      
      





ステップ#9:Herokuにデプロイする



Herokuは、小規模でスケーラブルなWebアプリケーションをホストするためのクラウドベースのプラットフォームです。 このサービスでは無料の料金プランを提供しているため、 https://signup.heroku.comのリンクをたどって、まだ登録していない場合は登録してください。







Heroku Toolbeltコンソールアプリケーションをインストールし、プロジェクトルートディレクトリで次のコマンドを実行します。







 [cicd-buzz] $ heroku login [cicd-buzz] $ heroku create Creating app… done, ⬢ fathomless-inlet-53225 https://fathomless-inlet-53225.herokuapp.com/ | https://git.heroku.com/fathomless-inlet-53225.git [cicd-buzz] $ heroku plugins:install heroku-container-registry [cicd-buzz] $ heroku container:login [cicd-buzz] $ heroku container:push web [cicd-buzz] $ heroku ps:scale web=1
      
      





その後、 heroku create



コマンドで表示されたURLでアプリケーションにアクセスできるはずです。









Herokuを搭載したCI / CDブークジェネレーター







heroku container:push web



コマンドは、Docker Hubで公開した同じコンテナをHerokuに配置することに注意してください。







プロジェクトのマスターブランチの各アセンブリの展開プロセスを自動化するには、「deploy_heroku.sh」ファイルを「.travis」ディレクトリに追加します。







 #!/bin/sh wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh heroku plugins:install heroku-container-registry docker login -e _ -u _ --password=$HEROKU_API_KEY registry.heroku.com heroku container:push web --app $HEROKU_APP_NAME
      
      





また、次の行を「.travis.yml」ファイルに追加します。







 after_success: — sh .travis/deploy_dockerhub.sh — test$TRAVIS_BRANCH” = “master” && sh .travis/deploy_heroku.sh
      
      





最後に、さらに2つの環境変数をTravis CIに追加します。 Heroku APIは「アカウント設定」にあり、 herokuアプリ名heroku create



コマンドの出力にありheroku create













変更をコミットしてGitHubに送信します。 ビルドに成功すると、新しいDockerイメージはすぐにDocker HubとHerokuに移動するはずです。







ステップ番号10:CI / CDが勝つために!



最新の開発チェーンがセットアップされたので、機能を少しずつ提供し始め、短い反復を実行できます。 たとえば、ランディングページをより魅力的にすることにした場合、典型的なワークフローは次のようになります。







  1. 新規タスクhttps://github.com/robvanderleek/cicd-buzz/issues/1を作成することから始めます
  2. このタスクの機能ブランチを作成します: https : //github.com/robvanderleek/cicd-buzz/tree/issue-1
  3. これは、コーディングの魔法が発生する場所です。
  4. Travis CIおよびBetter Code Hubからのメッセージをお待ちくださいhttps : //github.com/robvanderleek/cicd-buzz/commits/issue-1
  5. 最新のDockerイメージを実行して、アプリケーションをローカルでテストします: docker run --rm -p5000:5000 -it robvanderleek/cicd-buzz:issue-1



    。 この画像を他の人と共有できます。
  6. 新しい機能に満足している場合は、プルリクエストを開きます。 これで、コードをCI / CDチェーン( https://github.com/robvanderleek/cicd-buzz/pull/2)を介して本番環境に配信する準備が整いました。




ローカルDockerコンテナーのバズジェネレーターリポジトリブランチ







本番環境でのコーディングと出荷をお楽しみください!







参照:







  1. オリジナル: 最新のCI / CDパイプラインの構築方法

    無料のホスティングサービスを使用します
  2. GitHubのプロジェクトリポジトリ



All Articles