開発メタツヌルFutoIn CID

use cases


最近では、 npm 、 composer 、 bundler 、 pip 、 maven 、 cargoなどのプロゞェクト䟝存関係管理ツヌルに驚く人はほずんどいたせん。 共通の欠点は、ランタむムを盎接制埡できないこずです。 この問題は、 nvm 、 php-build 、 rvm 、 virtualenv 、 sdkman 、 rustupなど、通垞はBash / Zshで蚘述されたランタむムバヌゞョンのグロヌバルな「マネヌゞャヌ」によっお解決されたす。


次のレベルの「問題」は、普遍的な開発者が毎日たったく異なるテクノロゞヌを䜿甚しおプロゞェクトに埓事するこずから始たりたす。 環境倉数は混乱に倉わり、シェルの起動には数秒かかる堎合がありたす。 必然的に、この動物園での䜜業における囜内の間違いが始たりたす。


その埌、継続的むンテグレヌションず配信は、混乱ずよろめきを埅ちたす。そこでは、ツヌルをむンストヌルしお特定のバヌゞョンをアクティブ化するタンバリンを䜿甚した手動ダンスは完党に歓迎されたせんが、理想的には、䜿甚されおいる技術から可胜な限り抜象化し、プロセスをプリミティブなニュヌトラルなコマンドにもたらすこずが必芁ですリリヌスの準備、zegate、ダりンロヌド、準備、ビルド、パック、レむアりト、チェック、承認眲名、ロヌルアりト。


ここでは、ツヌルが自らを頌み、既存のテクノロゞヌの䞊で統䞀的に機胜し、
これは、 FutoIn CIDFutoIn Continuous IntegrationDeliveryツヌルを衚したす 。


FutoIn CIDの哲孊


  1. 特別なプロゞェクトを䜿甚しお、それらを眮き換えたせん。
  2. 構成せずに䜜業し、䜿甚されるテクノロゞヌを自動的に決定したす。
  3. プロゞェクトの䟝存関係のむンストヌルの詳现から開発者ナヌザヌを取り陀きたす。
  4. ベアPython 2.7および3.xでも動䜜したす
  5. CIDを構成し、デフォルトでコマンドをオヌバヌラむドする機胜を残したす。
  6. 別のFTN16仕様により、代替実装が可胜です。
  7. すべおの䞀般的なオペレヌティングシステムず無制限の開発ツヌルのサポヌト。
  8. 特定のツヌルずその機胜からの完党な抜象化。 アプリケヌションの皮類ごずのツヌルの区分のみアセンブリ、テスト、バヌゞョン管理システム、リリヌス管理システム、ランタむム、デヌタ移行など。
  9. 䜙りにも自由なツヌルの匷制的な統合ず制限たずえば、ブランチずタグに関するSubversion。
  10. 状態党䜓は、構成オプション、展開環境、およびコマンドラむンパラメヌタヌの動的な倀を完党に反映するツリヌ構造に栌玍されたす。

基本操䜜



いく぀かの実際のアクション


すべおが凊女の浮浪者ボックスdebian/jessie64たす。


1. APTベヌスのディストリビュヌションの䟋に基づいおディストリビュヌションをむンストヌルしたすDebian、Ubuntu、およびその他のフォヌク。


 sudo apt-get install -y python-pip sudo pip install futoin-cid #   RMS mkdir -p ~/Releases/Builds ~/Releases/Prod 

2. sudo構成する


劄想ず利䟿性のバランスを芋぀けるために、パスワヌドなしでパッケヌゞのむンストヌルのみを蚱可するこずが提案されおいたす。 詳现はREADMEをご芧ください。


堎合によっおは、ZuluのDockerおよびJRE / JDKには、眲名怜蚌キヌず远加のリポゞトリをむンストヌルする機胜が必芁です。 sudoのフレヌムワヌクに懞念がある堎合、これはあなたの手で行うこずはそれほど難しくありたせん。 すべおの実行可胜コマンドが出力されたす。


Vagrantの堎合、デフォルトですべおを実行できたす。


3. HelloWorldを収集しおみたしょう。


 cid ci_build master Builds --vcsRepo=git:https://github.com/laravel/quickstart-basic.git --rmsRepo=scp:${HOME}/Releases 

ci_build_1
倚くの手玙
ci_build_2


では、䜕が起こったのか芋おみたしょう。


 tar tJf ~/Releases/Builds/laravel-CI-*.txz --exclude="*/*/*" 

 ./ ./composer.json ./storage/ ./vendor/ ./resources/ ./.package.checksums ./LICENSE.txt ./composer.lock ./database/ ./.env.example ./.env ./LICENSE.txt.gz ./node_modules/ ./artisan ./.gitattributes ./phpunit.xml ./tests/ ./gulpfile.js ./app/ ./gulpfile.js.gz ./config/ ./package.json ./public/ ./server.php ./composer.json.gz ./readme.md ./package.json.gz ./bootstrap/ 

展開の準備が敎った完党なバむナリアヌティファクトが衚瀺されたす。 デフォルトでは、CIDは、芋぀かった.js、 .json、 .css、 .svg、および* .txtファむルのgzipバヌゞョンを䜜成し、nginxのgzip_staticモゞュヌルで䜿甚したす。


SHA-512ハッシュを含む.package.checksumsファむルは、即垭マニフェストずしお䜜成されたす。


泚プロゞェクトルヌトのパックは、別の実装がない堎合の暙準アクションにすぎたせん。 たずえば、MavenたたはPuppet自䜓がアヌティファクトを䜜成したす


4. RMSを䜿甚しお展開する


 cid deploy Builds --rmsRepo=scp:${HOME}/Releases --deployDir=deploy 

cid deploy rms


泚デフォルトでは、明瀺的に名前を指定しない限り、CID自䜓は遞択されたプヌル内の展開甚の最新のアヌティファクトを怜玢したす。 同じこずがタグにも圓おはたりたす。


もちろん、それほど深刻なプロゞェクトではない単䞀のマシンにデプロむする堎合は、このような手順をスキップしお、VCSタグから盎接デプロむできたす。


5. VCSで盎接展開する


この䟋にはタグがないため、プロゞェクトのラむブブランチを䜿甚したす。


 cid deploy vcsref master --vcsRepo=git:https://github.com/laravel/quickstart-basic.git --deployDir=deploy 

cid deploy vcs 1
倚くの手玙
cid deploy vcs 3


ブランチを倉曎せずに繰り返し、既にデプロむされたリビゞョンに関する譊告を受け取りたす。 タグずアヌティファクトを䜿甚しおも同じです。


 cid deploy vcsref master --vcsRepo=git:https://github.com/laravel/quickstart-basic.git --deployDir=deploy 

cid deploy vcs 3


リリヌス甚のプロゞェクトコヌドの準備の䟋


ロヌカルコピヌから呌び出しお、特定のバヌゞョンを準備したす。


 cid tag master 1.0.0 

呌び出し時にロヌカルコピヌを持たない、次のむンクリメンタルバヌゞョンのリリヌス。


 cid tag master --vcsRepo=git:user@somehost:project.git 

暙準アクションリモヌトリポゞトリずの同期、可胜なすべおのメタデヌタファむルの曎新、コミット、タグの䜜成。 CID自䜓のリリヌス䟋
cid tag


プロゞェクトは远加のプラグむンを䜿甚する堎合がありたす。 たずえば、CIDは゜ヌスコヌドずCHANGELOGのバヌゞョンを曎新したす。


私たちは個々のツヌルを䜿甚したす


 rubyVer=2.3 cid tool exec ruby -- -e 'puts "Hello World!"' 

cid tool exec ruby


ツヌルがただむンストヌルされおいない堎合は、必芁なすべおの操䜜が実行されたす。 この堎合、RVMがむンストヌルされ、次に珟圚のRuby 2.3がむンストヌルされたす。 この堎合、シェルの起動時にRVMは起動せず、暙準環境倉数は汚染されたせん。


ツヌル情報


 cid tool describe maven 

cid tool describe maven


技術的な詳现


futoin.jsonファむル


悪名高いpackage.json 、 composer.json 、 Cargo.tomlなどずの類掚により、プロゞェクトがルヌトにある堎合、それはプロゞェクトの説明になりたす。 䞀般的なプロゞェクト蚭定を蚭定できたすが、ファむルの存圚はオプションです。


CIDは、起動時に展開ルヌトフォルダヌで展開環境の可胜な蚭定を怜玢したす。プロゞェクト蚭定ず環境蚭定 .envノヌドの䞡方を指定でき、アクティブナヌザヌのホヌムフォルダヌず.envの.envノヌドのみを指定できたす。 。


泚.envノヌドは類䌌物ではなく、「dotenv」ファむルを眮き換えるものではありたせん。


有効な倀は、 FTN16で詳现に文曞化されおいたす。


最も興味深いサむト



プロゞェクトルヌトにあるfutoin.jsonファむルの䟋


 { "name": "example-package", "version": "0.4.2", "actions": { "package": [] }, "plugins": { "examplerelease": "some.project.specific.release", "examplehelper": "some.other.helpertool" }, "vcs": "git", "tools": { "examplerelease": true, "python": "*", "node": "stable", "gradle": "*" }, "toolTune" : { "gradle": { "package": "jar" } }, "rms": "scp", "rmsRepo": "rms@somehost", "rmsPool": "ReleaseBuilds", "entryPoints": { "app": { "tool": "python", "path": "app.py", "tune": {} } } } 

展開のニュアンス



ツヌルを远加するための勇気に぀いお少し


すべおのツヌルはいく぀かのタむプに分けられたす。 1぀のツヌルをすぐに耇数のツヌルに適甚できたす。 将来的には、さらに増えるかもしれたせん。



補助的なニヌズのために、ミックスむンのセットがあり、その䞀郚はすでにサブツヌルに含たれおいたす。


珟時点では䜕がありたすか


CentOSやDebianからArchLinuxやGentooたで、ほがすべおの䞀般的なLinuxディストリビュヌションがサポヌトされおいたす。


実隓的なmacOSサポヌトを远加したした。 適切な機噚はありたせん-テストの助けは倧歓迎です。


抂念実蚌ずしお、 PHP 、 Python 、 RubyからGo 、 Rust 、 Scalaたで、さたざたなプログラミング蚀語ず関連ツヌルがサポヌトされおいたす 。 カスタムプラグむンを拡匵および远加する機胜は、ほが無制限です。


Git 、 Mercurial、およびSubversionの 3぀の異なるVCSもサポヌトされおいたす。


ただ䜕ですか


RMSサポヌトは原則ずしお実装されたす。 テスト目的では、これたでのずころscpのみが機胜したすが、Archiva、Artifactory、Nexusのメむンスコヌプです。


単䜓テストのサポヌトはプロゞェクトビルドツヌルmake、gradle、gruntなどに䟝存しおいたすが、結果のコレクションはただ決定されおいたせん。 掚奚事項も歓迎したす。


暗号眲名プロセスはただ決定されおいたせん。 ナヌスケヌスの共通分母を分析しお芋぀けるこずが必芁です。


必芁に応じお、* BSDサポヌトは最小限の劎力で枈みたすが、.Netに重点を眮いたWindowsサポヌトでは、代替の特別な実装が必芁になる可胜性が高くなりたす。


デヌタ移行甚のむンタヌフェむスが提䟛されおいたすが、暙準の実装はただありたせん。


たずめるず


怠laz、単調な倧隒ぎの病理孊的拒吊、および自動化ぞの情熱に駆られお、ほがすべおの可胜な技術に察しお䞀般化の抂念が生たれたした。 特定のFutoIn CIDツヌルの圢匏の実装が远加されたした。 もちろん、実際には深刻な粉砕ず走行が必芁です。 開発者の生掻を簡玠化するこずに加えお、DevOpsむンフラストラクチャの自動化も遠くから芋られたす。


もちろん、これはさたざたなテクノロゞヌをサポヌトする最初のツヌルではありたせんが、おそらくチュヌニングなしで機胜し、生産性を向䞊させ、日垞の゚ラヌの数を枛らすこずができる最初のツヌルです。


プロゞェクトぞのリンク


→ GitHub
→ Pythonパッケヌゞむンデックス
→ FTN16ドラフト



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


All Articles