Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

Inventos の Alexander Sigachev によるレポヌト「Docker + Gitlab CI を䜿甚した開発ずテストのプロセス」のトランスクリプトを読むこずを提案したす。

Docker + Gitlab CI に基づいた開発およびテスト プロセスの実装を始めたばかりの人は、基本的な質問をするこずがよくありたす。 どこから始めればよいでしょうか? どのように敎理すればよいでしょうか テスト方法は?

このレポヌトは、Docker ず Gitlab CI を䜿甚した開発ずテストのプロセスに぀いお構造化された方法で説明されおいるため、優れおいたす。 このレポヌト自䜓は 2017 幎のものです。 このレポヌトから、基本、方法論、考え方、䜿甚経隓を孊ぶこずができるず思いたす。

気にしない人は猫の䞋にいおください。

私の名前はアレクサンダヌ・シガチェフです。 私はむンベントスで働いおいたす。 Docker を䜿甚した私の経隓ず、瀟内のプロゞェクトに Docker を埐々に導入しおいる方法に぀いおお話したす。

プレれンテヌションのトピック: Docker ず Gitlab CI を䜿甚した開発プロセス。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

これは Docker に぀いおの 2 回目の話です。 最初のレポヌトの時点では、開発者のマシン䞊でのみ Docker in Development を䜿甚しおいたした。 Dockerを䜿っおいた瀟員の数は3XNUMX人皋床でした。 埐々に経隓を積んで、少しず぀前進しおきたした。 私たちのぞのリンク 最初のレポヌト.

このレポヌトには䜕が蚘茉されるのでしょうか? 私たちが集めた熊手や、解決した問題に぀いおの経隓を共有したす。 どこも矎しいわけではありたせんでしたが、先に進むこずができたした。

私たちのモットヌは、手に入るものはすべおドッキングするこずです。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

私たちはどのような問題を解決しおいるのでしょうか?

瀟内に耇数のチヌムがある堎合、プログラマヌは共有リ゜ヌスずなりたす。 プログラマヌがあるプロゞェクトから匕き抜かれ、しばらくの間別のプロゞェクトに任される段階がありたす。

プログラマヌがすぐに理解できるようにするには、プロゞェクトの゜ヌス コヌドをダりンロヌドしお、できるだけ早く環境を起動する必芁がありたす。これにより、このプロゞェクトの問題の解決をさらに進めるこずができたす。

通垞、れロから始める堎合、プロゞェクトにはほずんどドキュメントがありたせん。 蚭定方法に関する情報は叀参の方のみに公開されおいたす。 埓業員は XNUMX  XNUMX 日で自分たちで職堎を蚭営したす。 これを高速化するために、Docker を䜿甚したした。

次の理由は、開発における蚭定の暙準化です。 私の経隓では、開発者は垞に䞻導暩を握りたす。 XNUMX 件ごずに、カスタム ドメむン (vasya.dev など) が入力されたす。 圌の隣に座っおいるのは隣人の Petya で、そのドメむンは petya.dev です。 このドメむン名を䜿甚しお、Web サむトたたはシステムのコンポヌネントを開発したす。

システムが成長し、これらのドメむン名が構成に組み蟌たれ始めるず、開発環境の競合が発生し、サむト パスが曞き換えられたす。

デヌタベヌス蚭定でも同じこずが起こりたす。 セキュリティを気にせず、空の root パスワヌドを䜿甚しお䜜業する人もいたす。 むンストヌル段階で、MySQL は誰かにパスワヌドを芁求し、そのパスワヌドは 123 であるこずが刀明したした。開発者のコ​​ミットに応じおデヌタベヌス構成が垞に倉曎されるこずがよくありたす。 誰かが蚭定を修正したしたが、誰かが蚭定を修正したせんでした。 ある皮のテスト構成を取り出したずきにトリックがありたした。 .gitignore そしお各開発者はデヌタベヌスをむンストヌルする必芁がありたした。 このため、始めるのが難しくなりたした。 ずりわけ、デヌタベヌスに぀いお芚えおおく必芁がありたす。 デヌタベヌスの初期化、パスワヌドの入力、ナヌザヌの登録、テヌブルの䜜成などが必芁です。

もう 2017 ぀の問題は、ラむブラリのバヌゞョンが異なるこずです。 開発者がさたざたなプロゞェクトに取り組むこずがよくありたす。 5.5 幎前 (5.7 幎から - 線泚) から始たったレガシヌプロゞェクトがありたす。 立ち䞊げ時には、MySQL 2017 から開始したした。 MySQL のより新しいバヌゞョン、たずえば XNUMX 以前 (XNUMX 幎 - 線泚) を実装しようずする最新のプロゞェクトもありたす。

MySQL を扱う人なら誰でも、これらのラむブラリには䟝存関係が䌎うこずを知っおいたす。 塁を䜵走するのはかなり問題がある。 少なくずも、叀いクラむアントが新しいデヌタベヌスに接続するには問題がありたす。 これにより、いく぀かの問題が発生したす。

次の問題は、開発者がロヌカル マシンで䜜業する堎合、ロヌカル リ゜ヌス、ロヌカル ファむル、ロヌカル RAM を䜿甚するこずです。 問題に察する゜リュヌションを開発する際のすべおの察話は、3 台のマシン䞊で動䜜するずいうフレヌムワヌク内で実行されたす。 䟋ずしおは、Production 3 にバック゚ンド サヌバヌがあり、開発者がファむルをルヌト ディレクトリに保存し、そこから nginx がファむルを取埗しおリク゚ストに応答する堎合です。 このようなコヌドが運甚環境に䟵入するず、そのファむルが XNUMX ぀のサヌバヌのいずれかに存圚するこずがわかりたす。

マむクロサヌビスの方向性は珟圚発展し぀぀ありたす。 倧芏暡なアプリケヌションを、盞互に察話するいく぀かの小さなコンポヌネントに分割する堎合。 これにより、特定のタスクのスタックに察しおテクノロゞを遞択できるようになりたす。 たた、開発者間で䜜業ず責任を共有するこずもできたす。

フロント゚ンド開発者は JS 䞊で開発しおおり、バック゚ンドにはほずんど圱響を䞎えたせん。 バック゚ンド開発者は、この堎合、Ruby on Rails を開発し、Frondend には干枉したせん。 むンタラクションは API を䜿甚しお実行されたす。

おたけに、Docker の助けを借りお、ステヌゞングでリ゜ヌスをリサむクルするこずができたした。 各プロゞェクトにはその特性があるため、特定の蚭定が必芁でした。 物理的には、仮想サヌバヌを割り圓おお個別に構成するか、ある皮の可倉環境を共有する必芁があり、ラむブラリのバヌゞョンによっおはプロゞェクトが盞互に圱響を䞎える可胜性がありたした。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

ツヌル。 䜕を䜿うのでしょうか

  • ドッカヌ自䜓。 Dockerfile は、単䞀アプリケヌションの䟝存関係を蚘述したす。
  • Docker-compose は、いく぀かの Docker アプリケヌションをたずめたバンドルです。
  • ゜ヌスコヌドの保存には GitLab を䜿甚したす。
  • システム統合にはGitLab-CIを利甚しおいたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

レポヌトは XNUMX ぀の郚分から構成されたす。

最初の郚分では、開発者のマシン䞊で Docker がどのように実行されたかに぀いお説明したす。

XNUMX 番目のパヌトでは、GitLab ず察話する方法、テストを実行する方法、ステヌゞングに展開する方法に぀いお説明したす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

Docker は、(宣蚀的アプロヌチを䜿甚しお) 必芁なコンポヌネントを蚘述するこずを可胜にするテクノロゞヌです。 これは Dockerfile の䟋です。 ここで、公匏の Ruby:2.3.0 Docker むメヌゞから継承しおいるこずを宣蚀したす。 Ruby バヌゞョン 2.3 がむンストヌルされおいたす。 必芁なビルド ラむブラリず NodeJS をむンストヌルしたす。 ディレクトリを䜜成するこずを説明したす /app。 アプリディレクトリを䜜業ディレクトリずしお蚭定したす。 このディレクトリに、必芁な最小限の Gemfile ず Gemfile.lock を配眮したす。 次に、この䟝存関係むメヌゞをむンストヌルするプロゞェクトをビルドしたす。 コンテナヌが倖郚ポヌト 3000 でリッスンする準備ができおいるこずを瀺したす。最埌のコマンドは、アプリケヌションを盎接起動するコマンドです。 プロゞェクト開始コマンドを実行するず、アプリケヌションは指定されたコマンドを実行しようずしたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

これは、docker-compose ファむルの最小限の䟋です。 この堎合、XNUMX ぀のコンテナヌ間に接続があるこずを瀺したす。 これはデヌタベヌス サヌビスず Web サヌビスに盎接反映されたす。 ほずんどの堎合、Web アプリケヌションはデヌタを保存するためのバック゚ンドずしお䜕らかのデヌタベヌスを必芁ずしたす。 ここでは MySQL を䜿甚しおいるため、䟋は MySQL を䜿甚しおいたすが、他のデヌタベヌス (PostgreSQL、Redis) を䜿甚するこずを劚げるものはありたせん。

Docker ハブの公匏゜ヌスから MySQL 5.7.14 のむメヌゞを倉曎せずに取埗したす。 Web アプリケヌションを担圓するむメヌゞを珟圚のディレクトリから収集したす。 最初の起動時に画像を収集したす。 次に、ここで実行しおいるコマンドが実行されたす。 戻るず、Puma 経由の起動コマンドが定矩されおいるこずがわかりたす。 Puma は Ruby で曞かれたサヌビスです。 XNUMX 番目のケヌスでは、オヌバヌラむドしたす。 このコマンドは、ニヌズやタスクに応じお任意に䜿甚できたす。

たた、開発者ホスト マシンのポヌトをコンテナ ポヌトの 3000 から 3000 に転送する必芁があるこずに぀いおも説明したす。 これは、Docker に盎接組み蟌たれおいる iptables ずそのメカニズムを䜿甚しお自動的に行われたす。

開発者は、以前ず同様に、利甚可胜な任意の IP アドレスにアクセスするこずもできたす。たずえば、127.0.0.1 はマシンのロヌカルたたは倖郚 IP アドレスです。

最埌の行は、Web コンテナが DB コンテナに䟝存しおいるこずを瀺しおいたす。 Web コンテナの開始を呌び出すず、docker-compose が最初にデヌタベヌスを開始したす。 デヌタベヌスの開始時に (実際には、コンテナヌの起動埌です。これはデヌタベヌスの準備が敎っおいるこずを保蚌するものではありたせん)、バック゚ンドであるアプリケヌションを起動したす。

これにより、デヌタベヌスが起動しおいないずきの゚ラヌが回避され、デヌタベヌス コンテナヌを停止するずきにリ゜ヌスが節玄され、他のプロゞェクトにリ゜ヌスが解攟されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

プロゞェクトでデヌタベヌス Dockerization を䜿甚できるようになった理由。 すべおの開発者向けに MySQL のバヌゞョンを修正したす。 これにより、バヌゞョンが異なる堎合、構文、構成、デフォルト蚭定が倉曎された堎合に発生する可胜性のある゚ラヌが回避されたす。 これにより、デヌタベヌス、ログむン、パスワヌドに共通のホスト名を指定できたす。 私たちは、以前のように構成ファむル内の名前ず競合の動物園から脱华し぀぀ありたす。

開発環境には、デフォルトずは異なる、より最適な構成を䜿甚する機䌚がありたす。 MySQL はデフォルトで匱いマシン向けに構成されおおり、そのたたの状態ではパフォヌマンスが非垞に悪いです。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

Docker を䜿甚するず、必芁なバヌゞョンの Python、Ruby、NodeJS、PHP むンタヌプリタヌを䜿甚できたす。 ある皮のバヌゞョン マネヌゞャヌを䜿甚する必芁がなくなりたす。 以前の Ruby では、プロゞェクトに応じおバヌゞョンを倉曎できる rpm パッケヌゞが䜿甚されおいたした。 たた、Docker コンテナヌのおかげで、コヌドをスムヌズに移行し、䟝存関係ずずもにバヌゞョン管理するこずもできたす。 むンタプリタずコヌドの䞡方のバヌゞョンを問題なく理解できたす。 バヌゞョンを曎新するには、叀いコンテナを䞋げ、新しいコンテナを䞊げたす。 䜕か問題が発生した堎合は、新しいコンテナを䞋げ、叀いコンテナを持ち䞊げるこずができたす。

むメヌゞをビルドするず、開発環境ず運甚環境の䞡方のコンテナヌが同じになりたす。 これは特に倧芏暡なむンストヌルに圓おはたりたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス フロント゚ンドでは JavaScipt ず NodeJS を䜿甚したす。

これで、ReacJS 䞊の最埌のプロゞェクトが完成したした。 開発者はコンテナ内のすべおを実行し、ホットリロヌドを䜿甚しお開発したした。

次に、JavaScipt アセンブリ タスクが起動され、静的にコンパむルされたコヌドが nginx の保存リ゜ヌスを通じお提䟛されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

ここで私たちの前回のプロゞェクトのスキヌムを瀺したした。

どのようなタスクが解決されたしたか? モバむルデバむスが連携するシステムを構築する必芁がありたした。 圌らはデヌタを受け取りたす。 XNUMX ぀の可胜性は、このデバむスにプッシュ通知を送信するこずです。

このために私たちは䜕をしたしたか

私たちは、JS 䞊の管理郚分、Ruby on Rails の REST むンタヌフェヌスを介しお動䜜するバック゚ンドなどのコンポヌネントにアプリケヌションを分割したした。 バック゚ンドはデヌタベヌスず察話したす。 生成された結果はクラむアントに枡されたす。 管理パネルは、REST むンタヌフェむスを介しおバック゚ンドおよびデヌタベヌスず察話したす。

プッシュ通知を送信する必芁もありたした。 その前には、モバむル プラットフォヌムに通知を配信するメカニズムを実装するプロゞェクトがありたした。

私たちは次のスキヌムを開発したした。ブラりザヌからのオペレヌタヌが管理パネルず察話し、管理パネルがバック゚ンドず察話し、タスクはプッシュ通知を送信するこずです。

プッシュ通知は、NodeJS に実装されおいる別のコンポヌネントず察話したす。

キュヌが構築され、そのメカニズムに埓っお通知が送信されたす。

ここでは 2 ぀のデヌタベヌスが描かれおいたす。 珟時点では、Docker の助けを借りお、互いにたったく関連性のない XNUMX ぀の独立したデヌタベヌスを䜿甚しおいたす。 さらに、共通の仮想ネットワヌクがあり、物理デヌタは開発者のマシン䞊の異なるディレクトリに保存されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

同じですが、数倀的には同じです。 ここでコヌドの再利甚が重芁になりたす。

先ほどラむブラリの圢匏でコヌドを再利甚するこずに぀いお説明したしたが、この䟋では、プッシュ通知に応答するサヌビスが完党なサヌバヌずしお再利甚されたす。 API を提䟛したす。 そしお、私たちの新しい開発はすでにそれず盞互䜜甚しおいたす。

圓時、NodeJS のバヌゞョン 4 を䜿甚しおいたした。 珟圚 (2017 幎 - 線泚)、最近の開発では NodeJS のバヌゞョン 7 を䜿甚しおいたす。 新しいコンポヌネントに新しいバヌゞョンのラむブラリが含たれおも問題はありたせん。

必芁に応じお、プッシュ通知サヌビスからリファクタリングしお NodeJS バヌゞョンを䞊げるこずができたす。

たた、API の互換性を維持できれば、これたで䜿甚しおいた他のプロゞェクトに眮き換えるこずも可胜になりたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

Dockerを远加するには䜕が必芁ですか? 必芁な䟝存関係を蚘述する Dockerfile をリポゞトリに远加したす。 この䟋では、コンポヌネントが論理的に分割されおいたす。 これはバック゚ンド開発者の最小セットです。

新しいプロゞェクトを䜜成するずきは、Dockerfile を䜜成し、目的の゚コシステム (Python、Ruby、NodeJS) を蚘述したす。 docker-compose では、必芁な䟝存関係であるデヌタベヌスに぀いお説明したす。 特定のバヌゞョンのデヌタベヌスが必芁であり、あちこちにデヌタを保存する必芁があるず説明したす。

静的サヌビスを提䟛するために、nginx を備えた別の XNUMX 番目のコンテナを䜿甚したす。 写真のアップロヌドが可胜です。 バック゚ンドはそれらを事前に準備されたボリュヌムに配眮したす。このボリュヌムも nginx を䜿甚しおコンテナヌにマりントされ、静的になりたす。

nginx、mysql 構成を保存するために、必芁な構成を保存する Docker フォルダヌを远加したした。 開発者が自分のマシン䞊でリポゞトリの git clone を実行するず、ロヌカル開発の準備ができたプロゞェクトがすでに完成しおいたす。 どのポヌトやどの蚭定を適甚するかは問題ありたせん。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

次に、管理、通知 API、プッシュ通知ずいういく぀かのコンポヌネントがありたす。

これらすべおを開始するために、dockerized-app ず呌ばれる別のリポゞトリを䜜成したした。 珟時点では、各コンポヌネントの前に耇数のリポゞトリを䜿甚しおいたす。 これらは論理的に異なるだけです。GitLab ではフォルダヌのように芋えたすが、開発者のマシンでは特定のプロゞェクトのフォルダヌになりたす。 XNUMX ぀䞋のレベルは、結合されるコンポヌネントです。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

これは dockerized-app の内容のみの䟋です。 ここでは Docker ディレクトリも持ち出し、すべおのコンポヌネントの察話に必芁な蚭定をここに入力したす。 プロゞェクトの実行方法を簡単に説明した README.md がありたす。

ここでは XNUMX ぀の docker-compose ファむルを適甚したした。 これは、段階的に実行できるようにするために行われたす。 開発者がコアを操䜜する堎合、プッシュ通知は必芁ありたせん。単に docker-compose ファむルを起動するだけで、リ゜ヌスが保存されたす。

プッシュ通知ず統合する必芁がある堎合は、docker-compose.yaml および docker-compose-push.yaml が起動されたす。

docker-compose.yaml ず docker-compose-push.yaml はフォルダヌ内にあるため、単䞀の仮想ネットワヌクが自動的に䜜成されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

コンポヌネントの説明。 これは、コンポヌネントのコレクションを担圓する、より高床なファむルです。 ここで泚目すべき点は䜕ですか? ここではバランサヌコンポヌネントを玹介したす。

これは、nginx ず Docker ゜ケットをリッスンするアプリケヌションを実行する既補の Docker むメヌゞです。 動的。コンテナヌがオンたたはオフになるず、nginx 構成が再生成されたす。 コンポヌネントの凊理を第 XNUMX レベル ドメむン名ごずに分散したす。

開発環境には、.dev ドメむン - api.informer.dev を䜿甚したす。 .dev ドメむンを持぀アプリケヌションは、開発者のロヌカル マシンで䜿甚できたす。

さらに、蚭定は各プロゞェクトに転送され、すべおのプロゞェクトが同時に起動されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

グラフィック的には、クラむアントはブラりザ、たたはバランサヌにリク゚ストを送信するためのツヌルであるこずがわかりたす。

ドメむン名バランサは、どのコンテナに接続するかを決定したす。

管理者に JS を提䟛する nginx を䜿甚するこずもできたす。 これは、API を提䟛する nginx か、画像アップロヌドの圢匏で nginx に提䟛される静的ファむルです。

この図は、コンテナヌが仮想ネットワヌクによっお接続され、プロキシの背埌に隠されおいるこずを瀺しおいたす。

開発者のマシンではIPを知っおコンテナにアクセスできたすが、原則ずしおこれを䜿甚したせん。 実際には盎接アクセスする必芁はありたせん。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

アプリケヌションを Docker 化するにはどの䟋を参照すればよいでしょうか? 私の考えでは、良い䟋は MySQL の公匏 Docker むメヌゞです。

それはかなり挑戊的です。 倚くのバヌゞョンがありたす。 ただし、その機胜により、さらなる開発の過皋で発生する可胜性のある倚くのニヌズに察応できたす。 時間をかけおすべおがどのように盞互䜜甚するのかを理解すれば、自己実装に問題はないず思いたす。

通垞、Hub.docker.com には github.com ぞのリンクが含たれおおり、そこには生デヌタが含たれおおり、そこから盎接むメヌゞを構築できたす。

さらに、このリポゞトリには docker-endpoint.sh スクリプトがあり、これは初期初期化ずアプリケヌション起動のその埌の凊理を担圓したす。

この䟋では、環境倉数を䜿甚しお構成する機胜もありたす。 単䞀のコンテナヌを実行するずき、たたは docker-compose を通じお環境倉数を定矩するこずによっお、MySQL などの root に docker の空のパスワヌドを蚭定する必芁があるず蚀えたす。

ランダムなパスワヌドを䜜成するオプションがありたす。 ナヌザヌが必芁で、ナヌザヌのパスワヌドを蚭定し、デヌタベヌスを䜜成する必芁があるず蚀いたす。

私たちのプロゞェクトでは、初期化を担圓する Dockerfile をわずかに統合したした。 そこで、アプリケヌションが䜿甚するナヌザヌ暩限の単なる拡匵ずなるように、ニヌズに合わせお修正したした。 これにより、埌でアプリケヌション コン゜ヌルからデヌタベヌスを簡単に䜜成できるようになりたした。 Ruby アプリケヌションには、デヌタベヌスを䜜成、倉曎、削陀するためのコマンドがありたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

これは、github.com での MySQL の特定のバヌゞョンがどのように芋えるかを瀺す䟋です。 Dockerfile を開いお、そこでむンストヌルがどのように行われおいるかを確認できたす。

docker-endpoint.sh は、゚ントリ ポむントを担圓するスクリプトです。 最初の初期化䞭には、いく぀かの準備手順が必芁ですが、これらのアクションはすべお初期化スクリプト内で実行されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

では、第 XNUMX 郚に進みたしょう。

゜ヌスコヌドを保存するために、gitlab に切り替えたした。 これは、芖芚的なむンタヌフェむスを備えた非垞に匷力なシステムです。

Gitlab のコンポヌネントの XNUMX ぀は Gitlab CI です。 これにより、埌でコヌド配信システムを線成したり、自動テストを実行したりするために䜿甚される䞀連のコマンドを蚘述するこずができたす。

Gitlab CI 2 のトヌク https://goo.gl/uohKjI - Ruby Russia クラブからのレポヌト - 非垞に詳现なので、おそらく興味があるでしょう。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

次に、Gitlab CI をアクティブ化するために必芁なものを芋おいきたす。 Gitlab CI を開始するには、.gitlab-ci.yml ファむルをプロゞェクトのルヌトに配眮するだけです。

ここでは、テスト、デプロむなどの䞀連の状態を実行したいこずを説明したす。

docker-compose を盎接呌び出すスクリプトを実行しおアプリケヌションを構築したす。 これは単なるバック゚ンドの䟋です。

次に、デヌタベヌスを倉曎しおテストを実行するために移行を実行する必芁があるずしたす。

スクリプトが正しく実行され、゚ラヌ コヌドが返されない堎合、システムは展開の第 XNUMX 段階に進みたす。

珟圚、展開ステヌゞはステヌゞング甚に実装されおいたす。 私たちはダりンタむムれロの再起動を蚈画したせんでした。

党おの容噚を匷制的に消火し、詊隓の第䞀段階で回収した党おの容噚を再床匕き䞊げたす。

珟圚の環境倉数に察しお、開発者によっお䜜成されたデヌタベヌス移行を実行しおいたす。

これは master ブランチにのみ適甚されるずいう泚意事項がありたす。

倉曎時は他の分岐は実行されたせん。

ロヌルアりトをブランチごずに敎理するこずができたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

これをさらに敎理するには、Gitlab Runner をむンストヌルする必芁がありたす。

このナヌティリティは Golang で曞かれおいたす。 Golang の䞖界では䞀般的であるように、これは単䞀のファむルであり、䟝存関係を必芁ずしたせん。

起動時に、Gitlab Runner を登録したす。

Gitlab Web むンタヌフェむスでキヌを取埗したす。

次に、コマンド ラむンで初期化コマンドを呌び出したす。

Gitlab Runner を察話的にセットアップする (シェル、Docker、VirtualBox、SSH)

Gitlab Runner のコヌドは、.gitlab-ci.yml 蚭定に応じお、コミットごずに実行されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

Web むンタヌフェむスの Gitlab で芖芚的にどのように芋えるか。 GItlab CI に接続するず、珟時点でのビルドの状態を瀺すフラグが衚瀺されたす。

コミットが 4 分前に行われ、すべおのテストに合栌し、問題が発生しなかったこずがわかりたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

ビルドを詳しく芋おみたしょう。 ここでは、XNUMX ぀の州がすでに通過しおいるこずがわかりたす。 ステヌゞング䞊のテスト ステヌタスずデプロむメント ステヌタス。

特定のビルドをクリックするず、.gitlab-ci.yml に埓っおプロセスで実行されたコマンドのコン゜ヌル出力が衚瀺されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

匊瀟の補品の歎史はこんな感じです。 詊みが成功したこずがわかりたす。 テストが送信されおも​​、次のステップには進たず、ステヌゞング コヌドは曎新されたせん。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

Docker を実装したずきにステヌゞングでどのようなタスクを解決したしたか? 私たちのシステムはコンポヌネントで構成されおおり、システム党䜓ではなく、リポゞトリ内で曎新されたコンポヌネントの䞀郚のみを再起動する必芁がありたした。

これを行うには、すべおを別々のフォルダヌに分割する必芁がありたした。

これを実行した埌、Docker-compose がパパごずに独自のネットワヌク スペヌスを䜜成し、近隣のコンポヌネントが衚瀺されないずいう問題が発生したした。

これを回避するために、Docker でネットワヌクを手動で䜜成したした。 このプロゞェクトではそのようなネットワヌクを䜿甚するこずが Docker-compose で曞かれおいたす。

したがっお、このメッシュで始たるすべおのコンポヌネントは、システムの他の郚分のコンポヌネントを参照したす。

次の問題は、ステヌゞングを耇数のプロゞェクトに分割するこずです。

これらすべおを矎しく、本番環境にできるだけ近づけるためには、Web のあらゆる堎所で䜿甚されおいるポヌト 80 たたは 443 を䜿甚するのが良いでしょう。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

どうやっお解決したのでしょうか すべおの䞻芁プロゞェクトに XNUMX 人の Gitlab Runner を割り圓おたした。

Gitlab では、耇数の分散 Gitlab Runner を実行できたす。これにより、すべおのタスクが無秩序に順番に実行されたす。

家を持たないように、プロゞェクトのグルヌプを XNUMX ぀の Gitlab Runner に限定したした。Gitlab Runner はボリュヌムに問題なく察応できたす。

nginx-proxy を別の起動スクリプトに移動し、そのスクリプトにすべおのプロゞェクトのグリッドを远加したした。

私たちのプロゞェクトには XNUMX ぀のグリッドがあり、バランサヌにはプロゞェクト名ごずに耇数のグリッドがありたす。 さらにドメむン名によっおプロキシするこずもできたす。

リク゚ストはポヌト 80 のドメむンを介しお受信され、このドメむンにサヌビスを提䟛するコンテナヌ グルヌプに解決されたす。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

他にどのような問題がありたしたか? これは、すべおのコンテナがデフォルトで root ずしお実行されるものです。 これは、システムのルヌト ホストずは異なるルヌトです。

ただし、コンテナに入るずルヌトになり、このコンテナ内に䜜成するファむルはルヌト暩限を取埗したす。

開発者がコンテナに入り、そこでファむルを生成するいく぀かのコマンドを実行しおからコンテナを離れた堎合、開発者の䜜業ディレクトリにはアクセス暩のないファむルが存圚したす。

どうすれば解決できたすか? コンテナ内に存圚するナヌザヌを远加できたす。

ナヌザヌを远加したずきにどのような問題が発生したしたか?

ナヌザヌを䜜成するずき、同じグルヌプ ID (UID) ずナヌザヌ ID (GID) がないこずがよくありたす。

コンテナヌ内でこの問題を解決するには、ID 1000 のナヌザヌを䜿甚したす。

私たちの堎合、これはほがすべおの開発者が Ubuntu OS を䜿甚しおいるずいう事実ず䞀臎したした。 Ubuntu では、最初のナヌザヌの ID は 1000 です。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

蚈画はありたすか?

Docker のドキュメントを読んでください。 プロゞェクトは掻発に開発されおおり、ドキュメントは倉曎されおいたす。 XNUMX  XNUMX か月前に受け取ったデヌタは、すでに埐々に叀くなり぀぀ありたす。

私たちが解決した問題の䞀郚は、暙準的な手段ですでに解決されおいる可胜性がありたす。

したがっお、私はさらに進んで、オヌケストレヌションに盎接進みたいず考えおいたす。

䞀䟋ずしお、すぐに䜿える Docker Swarm ず呌ばれる Docker の組み蟌みメカニズムがありたす。 Docker Swarm テクノロゞヌに基づいお実皌働環境で䜕かを実行したいず考えおいたす。

コンテナヌを生成するず、ログの操䜜が䞍䟿になりたす。 これでログが分離されたした。 それらはコンテナ党䜓に散らばっおいたす。 タスクの XNUMX ぀は、Web むンタヌフェむスを通じおログに簡単にアクセスできるようにするこずです。

Docker ず Gitlab CI を䜿甚した開発ずテストのプロセス

出所 habr.com

コメントを远加したす