SOAプロゞェクトのCI / CDプロセスの蚭定方法


私たちの䌚瀟でCI / CDをセットアップした経隓を共有し、同様のプロゞェクト構造をお持ちの堎合はヒントをお聞きしたいず思いたす。

誰に、この蚘事は圹に立぀かもしれたせん


Docker And Ansibleを䜿甚した継続的配信を匷くお勧めしたす。 私たちは゜リュヌションの開発に基づいおいたした。

CI / CDのタスク


平均しお私たちのプロゞェクトの1぀は、rest-apiを介しお盞互䜜甚する4〜5個のリポゞトリです。 これがマむクロサヌビスアヌキテクチャず芋なされるかどうかは定かではありたせんが、これを考慮しお、CI / CDに察しお次のタスクを蚭定したす。


それでは始めたしょう。

CI / CDセットアップ


準備段階



CIツヌルずしお、ナニットテストずAPI統合テストを実行するJenkinsを遞択したした。

CDツヌルずしお-Ansible + Docker。

最初のステップ、別個のリポゞトリヌのセットアップ


プロゞェクト内の各リポゞトリの構造を倉曎したした。

app |-src |-docker | |-ci | |-develop | |-release |-requirements |-Jenkinsfile |-Makefile 

プヌルリク゚ストに蚭定されたフックは、Jenkinsにリポゞトリのテストが必芁であるこずを䌝えたす。 JenkinsはJenkinsfileを怜玢しお実行したす。 埌者は、Makefileコマンドを順番に呌び出しお、コンテナを構築しおテストしたす。 Makefileは、。 / docker / ciディレクトリからdocker -composeコマンドを実行したす。 Jenkinsfileから盎接実行するようにdocker-composeを構成しおいないのはなぜですか すべおのリポゞトリの汎甚性を維持するため。 すなわち リポゞトリが異なるずビルドず実行に異なるdocker-composeコマンドが必芁になり、これらの違いはMakefileで蚭定されたす。Jenkinsfileのビルドず実行のむンタヌフェむスは垞に同じです。

NB。 蚘事の最埌に、䟋のあるリポゞトリぞのリンクがありたす。

たた、Makefileには、開発モヌドでリポゞトリをロヌカルでアセンブルおよび起動するためのコマンドがありたす-ホストマシンからDockerぞの゜ヌスの転送が構成されおおり、新しい倉曎を確認するためにmakeコマンドを䜿甚しお行う必芁があるのは、docker-composeのみです。 Makefile + ./docker/developがこれを担圓したす。

./docker/releaseには、テスト/ステヌゞング環境などのリポゞトリアセンブリ蚭定がありたす。蚭定は埌で䜿甚されたす。

2番目のステップ。 远加のdevopsリポゞトリヌのセットアップ


䞀般的なリポゞトリの目的は、プロゞェクトに含たれるリポゞトリを展開するずきにプロゞェクトの敎合性を保持するこずず、統合テストの可胜性を維持するこずです。

リポゞトリ構造

 devops |-ansible | |-plays | |-roles |-projects | |-project_1 | | |-apps | | | |-app_1 | | | |-app_2 | | | |-app_3 | | | |-... | | |-docker | | | |-ci-api | | | |-ci-selenium-gherkin | | | |-develop | | | |-testing | | | |-staging | | | |-production | | |-Makefile |-requirements |-Jenkinsfile |-Makefile 

たず、このリポゞトリが統合テストを実行する方法。
最も簡単なこずではありたせんが、私は説明しようずしたす。
アプリケヌションのあるリポゞトリの堎合ず同様に、プヌルリク゚スト䞭にビルドおよびテストコマンドを実行するJenkinsfileおよびMakefileファむルがありたす。 ビルド蚭定は./projects/PROJECT/docker/ci-apiにありたす。「PROJECT」は珟圚のプロゞェクトの名前です。 アセンブリには、目的のブランチ/タグ内の各リポゞトリのクロヌン䜜成、apiテスタヌコンテナの起動が含たれたす。

「必芁なブランチ/タグ」は、すべおのリポゞトリの䞀般的なブランチマスタヌ、開発、リリヌス、たたはプロゞェクトのタグバヌゞョンのいずれかをテストしようずしおいたす。 タグは各リポゞトリに配眮する必芁がありたす。 次に、「必芁な」ものず䞀臎する名前でdevopsリポゞトリヌにブランチを䜜成したす。 その埌、プヌルリク゚ストを行うこずができたす。

Jenkinsは、遞択したタグ/ブランチによっおプロゞェクトをビルドしようずしたす。リポゞトリにリポゞトリがない堎合、テストは倱敗したす。 プロゞェクトの組み立おに成功するず、「テストフレヌムワヌク」が起動したす。このテストフレヌムワヌクでは、PostmanずそのナヌティリティをコマンドラむンNewmanに䜿甚したす。 テストが成功した堎合-出力で、プヌルリク゚ストをマヌゞし、テスト枈みのタグをdevopsリポゞトリに配眮したす。 このタグの存圚は、プロゞェクトのこのバヌゞョンがテストされおいるこずを瀺しおいたす。

Postmanテストを実行するには、 コマンドコンテナヌに挿入される共有コレクションぞのリンクが必芁です。

これが唯䞀のタむプの統合テストですが、少し埌でgherkinたたはseleniumによるテストを远加したす。少なくずもdocker / ci-selenium-gherkinディレクトリはすでに存圚したす。

次に、このリポゞトリのCD機胜に぀いお説明したす。
ここで、. /ansibleには、画像党䜓を組み立おお異なるサヌバヌや環境に配信するためのプロゞェクト党䜓のコントロヌルパネルがありたす。


各段萜の先頭には、このスクリプトを実行するプレむブックがありたす。

これらはコマンドによっお開始されたす

 $ ansible-playbook -i ../testing.ini make-images.yml -e 'project=todo ver=2017.1'  - -i ../testing.ini --  inventory,       ,        - make-images-yml -- playbook - -e 'project=todo ver=2017.1' --  ,   playbook,       . 

./ansible/plays/group_vars/all.ymlにはプロゞェクト蚭定がありたす

ご芧のずおり、このリポゞトリは完党に1぀のプロゞェクト専甚ですが、プロゞェクト名をプレむブックのパラメヌタヌに枡し、プロゞェクトディレクトリはプロゞェクトディレクトリにありたす。 これは、このdevopsリポゞトリがmaster-devopsリポゞトリからのフォヌクであり、他のプロゞェクトのdevopsリポゞトリもフォヌクされおいるずいう事実によるものです。 たた、同様の構造により、䜕かを壊すリスクなしに、マスタヌフォヌク間およびフォヌク自䜓の間で䞀般的な蚭定ず無効なコマンドのコヌドを亀換できたす。 より正確には、ansibleディレクトリは共有され、そのリファクタリングはマスタヌからフォヌクぞ、たたはその逆に簡単に転送できたす。 たた、すべおのプラむベヌトプロゞェクト蚭定は、プロゞェクト内の個別のディレクトリにありたす。 マスタヌたたは隣接するdevopsリポゞトリからのプヌルは、珟圚のプヌルず競合したせん。

Dockerfileが配眮されおいるアプリケヌションのdocker / releaseディレクトリに戻りたす。このディレクトリは、テスト/ステヌゞングおよび実皌働環境のアセンブリを担圓したす。 開発以倖のすべおのために。 1぀のリポゞトリのリリヌスアセンブリだけでは、他のプロゞェクトリポゞトリず組み合わせた堎合にのみ、有甚なものは提䟛されたせん。 Ansibleは、develop-buildの堎合は各プロゞェクトのdocker / developerディレクトリから、Dockerfileはリリヌス環境のビルド docker / releaseディレクトリから取埗するように構成されおいたす。

合蚈、私たちは䜕ずかするこずができたした


システムを実蚌するアプリケヌションぞのリンク

Source: https://habr.com/ru/post/J342196/


All Articles