タグ付けされた質問 「deployment」

このタグは、デプロイメントに関する質問に使用します。これは、システム(の一部)をターゲット環境で使用できるようにするためのすべてのアクティビティに関するものです。

1
「すべての製品用の1つの大きなVCSリポジトリ」組織モデルから「多数の小さなVCSリポジトリ」モデルへのスムーズな移行を実現する方法
いくつかのVCSシステムのリポジトリに保持されている製品のコードベースが、そのコードベースがほぼ間違いなくいくつかの製品を含んでいると見なされるポイントに進化するという一般的なシナリオです。それぞれが単一の製品専用の複数のVCSリポジトリにコードベースを分割すると、いくつかの利点を活用できます(以下の肥大化リポジトリモデルよりもVCSリポジトリごとに製品を持っている利点を参照)。技術的な面では、ほとんどのVCSがこの操作をサポートしているため、コードベースの分割はかなり簡単な手順です。ただし、この分割により、自動化されたテスト、継続的な配信、サービスの統合または監視に関連するエンジニアリングの問題が発生する可能性があります(分割によって発生した問題を参照してください)。)したがって、このような分割の実行を計画している組織は、この移行をできるだけスムーズに、つまり、配信を中断せずにパイプラインを監視する方法を知る必要があります。これの最初のステップは、おそらくプロジェクトの概念と、モノリシックコードベースでの分割の詳細を理解することです。 この質問への回答では、私は見たいです: 製品とは何かを実際に定義する試み。これは、既存のコードベースで製品を実際に描写するための実用的な基準を提供します。 この作業定義に従って、実際に分割を実行する計画を作成します。コードベースがContinuous-IntegrationおよびContinuous-Deliveryを実装する完全に自動化されたsdlcによって処理されるという単純な仮定を立てることができます。つまり、各ブランチは現在のコードベースに実装された自動化されたテストスイートによって検証され、各「マジック」ブランチにマージされるたびに、テストおよびデプロイされる製品アーティファクトが生成されます。(製品のアーティファクトは、たとえばソースtarball、ドキュメント、バイナリソフトウェアパッケージ、Dockerイメージ、AMI、unikernelです。) そのような計画は、それを回避する方法を説明すれば満足です 分割によって提起された問題 自動化されたテスト手順は、既存のモノリシックリポジトリとスプリットリポジトリにどのように関連していますか? 自動化された展開手順は、既存のモノリシックリポジトリと分割リポジトリにどのように関連していますか? 自動展開手順自体のコードはどこに保存されていますか? 保存されたインフラストラクチャ、監視、および高可用性戦略はどこにありますか? 開発者が一度に1つのコードベースのみを必要とすることを保証する方法(ただし、他のコードベースのアーティファクトを使用可能)。 git-bisectのようなツールはどのようにできますか 限界メモ:肥大化したリポジトリモデルよりもVCSリポジトリごとに製品を持つことの利点 特定の製品のコードベースを保持するいくつかの小さなリポジトリがあると、「肥大化したリポジトリ」アプローチに比べて次の利点があります。 肥大化したリポジトリでは、製品が不安定なときにリリースをロールバックすることは困難です。これは、履歴が他の製品履歴と混在しているためです。 肥大化したリポジトリでは、プロジェクトの履歴やプルを確認するのが難しく、小さなリポジトリでは、この情報を読む可能性が高くなります。(これは、svnとは異なり、サブツリーをチェックアウトできないgitのようなVCSに固有の場合があります!) 肥大化したリポジトリを使用すると、開発時にさらに多くのブランチダンスを行う必要があります。N個のリポジトリがある場合、N個のブランチで並行して作業できます。リポジトリが1つしかない場合は、1つのブランチでしか作業できません。または、処理が面倒な作業コピーがたくさんあります。 いくつかの小さなリポジトリを使用すると、ログはプロジェクトのヒートマップを提供します。開発チームの知識普及のプロキシとして使用することもできます:3か月間レポXにコミットしなかった場合、レポXに取り組んでいるチームに私を割り当てて、開発を常に把握しておくとよいでしょうそのコンポーネントで。 小さなリポジトリを使用すると、コンポーネントの明確な概要を簡単に取得できます。すべてが単一の大きなリポジトリに格納されている場合、各コンポーネントの輪郭を示す明確なアーティファクトはなく、コードベースは泥の大きな塊に向かって簡単にドリフトできます。 小さなリポジトリにより、コンポーネント間のインターフェイスで作業する必要があります。しかし、私たちは良いカプセル化を望んでいるので、これはとにかくやるべき仕事なので、私はこれを小さなリポジトリの利点として数えます。 いくつかの小さなリポジトリを使用すると、複数の製品所有者を持っている方が簡単です。 いくつかの小さなリポジトリを使用すると、完全なリポジトリに関連し、自動的に検証できる単純なコード標準を簡単に作成できます。

4
debパッケージを、アプリケーションを展開するコンテナであるかのように使用することの欠点はありますか?
私のチームは現在、NodekerアプリをDockerなどのコンテナーで実行するのではなく、debパッケージとして展開するかどうかを決定しようとしています。 私はこのブログ読んでからこのアイデアを得た、ここで既存のPythonアプリケーション用のdebパッケージを使用するためのいくつかの良い引数になります。私たちにとって魅力的なこのブログの主なポイントは、Dockerエコシステムの維持の問題です(ポート共有、アクセス許可、Dockerイメージのホスティングなど)。 「元のコンテナとしてのdep-packages」は、ポートの競合の心配がなく、すべての依存関係が仮想環境内で維持される小規模なサービスにとって非常に理にかなっているようです。 しかし、私の腸は、debパッケージが適切であれば、より一般的であり、ドッカーはより言語固有のソリューションとして宣伝されるだろうと言っています。Dockerなどのフルシステムを使用する代わりに、debパッケージなどを使用してサービスを展開することの欠点はありますか?

2
リリースからリリースを切り離す方法はありますか?
継続的な展開の1つの方法は、リリースから展開を切り離すことです。つまり、変更をすぐにアクティブ化せずに更新を展開します。 これには機能の切り替えを使用できることは知っていますが、「非機能」の他の手法があるかどうか疑問に思っています。 たとえば、バグ修正のために機能切り替えを作成しますか?おそらくそうではなく、バグ修正はできるだけ早く展開する必要があると主張することができます。そして、バグ修正がリリースされた後、それをオフに切り替えたくないことは確かです。しかし、これは事実ですか?制御された方法でリリースするのは危険な変更かもしれません。また、予期しない副作用がある場合は、ロールバックできると便利です。それでは、すべての変更に対する機能フラグはありますか? そして、視覚的な変化はどうですか?たとえば、CSSの機能フラグのようなものを実装できますか?それは理にかなっていますか?

2
青緑を設計するには、ライブからホットスワップサーバーへのWebSocketトラフィックの公開方法をデプロイします
青緑の展開では、緑の環境をライブで展開するための準備として、ライブのprodデータフロー(青)をホットスワップの非prod環境(緑)にポンピングし、緑が以前の青のprod環境と完全にデータ同期するようにします。 進行中のWebSocketトラフィックを青から緑にライブコピーするために人々が何を使用しているのか疑問に思います。独自のWebSocketライブラリを作成しますか、または青緑へのパブリッシュ/サブスクライブWebsocketライブラリがありますか? 私のアプリにはnodejs RESTサーバーがあり、モバイルデバイスからのwebsocketトラフィックも管理しています... mongodbサーバーなど...それぞれGCE / AWSのコンテナにあります 私はちょうどmongodbを青から緑に同期させることができることを理解していますが、それは私が探している素晴らしい回帰健全性チェックであるライブトラフィックで緑のnodejsサーバーを行使しません おそらく、HTTPトラフィックをライブ転送するだけで、HTTPの上で実行される基礎となるWebSocketがそれ自体を処理し、特定の青緑の設定を要求しない可能性があります

2
アプリケーションに必要な資格情報を保存する方法は?
資格情報をバージョン管理(git)に保存することは悪いことだと誰もが言っています。したがって、はるかに優れた資格情報を格納する他の方法が必要です。 アプリケーションは、依存するサービスを使用するためにどこかから資格情報を受け取る必要があります。これらの資格情報は通常、構成ファイルに格納されます。各サーバーを手動で入力してそのファイルを作成することは問題外です。サーバーが人間の介入なしに行き来するためです。 アプリケーションの資格情報を管理する方法は?

2
Kubernetesで展開を自動化するにはどうすればよいですか?
Rancherを介してKubernetesをデプロイし、JenkinsがGitHubに新しいコードをチェックインするときに新しいイメージを構築してDockerHubにプッシュすると仮定すると、新しいイメージのデプロイを自動化するにはどうすればよいですか? 質問をするもう1つの方法は、「以前はOctopusを使用して展開を管理していました。KubernetesやRancherに似たようなものが組み込まれていますか?」最終的に、私が苦労しているのはこの最後のギャップです。

4
コードおよびTDDとしてのインフラストラクチャ
コードとしてのインフラストラクチャは、ビルドを自動化するツールを使用するように指示します。すごい。ansible、chef、puppet、salt stackなどのツールは、違いを解決しながら、インフラストラクチャがどのように見えるかを書くように私たちを促しています。 ソルトスタックでは、これらのビットは状態と呼ばれます。状態が現実と一致しない場合、ツールはそれを解決します。つまり、インフラストラクチャのテストを作成しており、テストが失敗した場合は、ツールが独自に修正します。少なくともそれは考えです。 XPはTDDの使用を教えてくれますが、問題はそれがインフラストラクチャに適用可能かどうかです。ツールはそれを示唆しています。 非常に役立つテストの種類はほとんど想像できません。 デプロイされたサービスにバンドルされているスモークテストを記述して、デプロイされたサービスが期待どおりに機能し、実行されることを確認します。これは、API呼び出しまたは/およびsystemctlチェックで、デプロイしたばかりのものが機能することを確認します。ansibleのようなツールには、サービスが実行されていることを確認するための状態があるため、この機能の多くは同じ状態でカバーできます。 dockerまたは別の一時的な仮想化エンジンに対して(ansibleがその状態を呼び出すときに)個々のロールを実行できるプロジェクトMoleculeがあります。これにより、役割の分離が強制され、作業中にプレイブックから分離して実行することができます。テストでは、ほとんどの場合、ロールが機能するはずの変数をモックできます。他の例は、ansibleエンジンの複製のように見えます(ファイルがユーザーに属していることをアサートします...)。 ThoughtWorksのハイテクレーダーは、今のようなツール賞賛INSPEC、serverspecやゴスをサーバーが仕様を満たしていることを検証するため。しかし、私たちはスペックを書いていますね? インフラストラクチャを州/役割で説明している場合、インフラストラクチャをさらにテストすることに意味がありますか?これは、1つのチームが仕様を提供し、他のチームが従う大規模な組織でより必要になるか、または役割の大きなセットがある場合、それらのサブセットを実行してテストから速度のメリットを得たいと思うかもしれません。同じ質問に対する役割/状態が考えられるのに、なぜテストを書くのかを理解するのに苦労しています。

2
環境構成ごとに保存するためのツール
ツールで環境ごとに構成情報を保存する必要があります。 これは、構成値(接続文字列など)を追加/更新するためのGUIを備えたツールです。これにはデフォルト値があり、異なる環境に基づいてこれを変更できる必要があります。 アプリケーションに追加する特定の環境へのデプロイメント中にこれらの構成値を取得するAPIが必要です。 私はしばらく探しましたが、この法案に合うツールは見つかりませんでした。何か提案はありますか? 注:現在、設定はTeamCity変数にあり、展開はPowerShellスクリプトを介して行われます。

2
Travis CIとGitHubを使用して、特定のブランチのすべてのコミットで自動デプロイすることは可能ですか?
Travis CIを使用してファイルをデプロイしたいのですが、タグ付きコミットでのみ機能します。ブランチにコミットするとき、警告があります: これはタグ付きコミットではないため、リリースプロバイダーでのデプロイメントをスキップします。 Travis CIを使用してブランチコミットにデプロイする方法はありますか? 明確にするために、コミットにタグを付けると機能しますが、指定したブランチの各コミットにファイルをデプロイしたいと思います。

5
構成管理ツールは、展開ツールとして使用するのに適切ですか?
質問に対する私の答えの裏側:DevOpsはどのようにしてソフトウェアエスクローの手順を改善するのに役立つのですか?テンシバイには質問がありました: 人形やシェフの上にカピストラーノを必要とするものは何ですか? 私の回答は、ノアギブスの記事「カピストラーノとシェフの両方が必要ですか?」へのリンクを投稿することでした。。個人的には、次のことを行うのが最も適切であるというノアの見解に同意します。 デプロイメントには、Capistranoなどの専門のデプロイメントツールを使用します。 構成管理には、Chefなどの専門の構成管理ツールを使用します。 各タイプのツールがタスクを完了するために使用する基本的なアプローチは非常に異なります。 構成管理ツール -システムの望ましい状態を作成および維持するためのものであり、本質的にべき等です。構成管理ツールの例には、Chef、Puppet、Ansible、PowerShell DSC、Salt Stackなどがあります。 導入ツール - ホスティング環境にソフトウェアのバージョンを配信することに関するもので、複数のマシンでソフトウェアの複数のバージョンを維持し、どのバージョンが「最新」であるかを管理する機能を提供します。これらは本質的に必須です。デプロイメントツールの例には、Capistrano、Octopus Deploy、Deployer、およびCommand.ioがあります。 構成管理ツールはデプロイメントツールの仕事を実行できると思います。ターゲットのソフトウェアバージョンを維持する必要がないため、不変インフラストラクチャの場合は、これらが仕事に最も適したツールです。 質問: Chef、Ansible、Puppetなどの構成管理ツールは、べき等モデルと命令モデルの両方を実行できる程度に成熟していますか?

2
プルリクエストごとにサブドメインを自動的に作成する方法
バックグラウンド 私のバックエンドチームが作成したプルリクエスト(PR)ごとにiOS / Androidアプリでテストを行う必要がある非技術的なQAチームを獲得しました。 質問 これが私がやりたいことです。バックエンドエンジニアがbitbucketでPRを作成するたびに、作成したJIRAの問題と一致するPR gitブランチのコードを開発サーバーのサブドメインに自動的にデプロイするスクリプトが欲しいです。 たとえば、PRがBAC-421に対応するというjiraの問題を想定し、エンジニアがPRを作成するとすぐに、スクリプトが作成したコードをAWS EC2にデプロイし、QAがアプリをwww.bac421.mydevdomainにポイントできるようにします。 com これを行う最良の方法は何ですか?私は専門の技術者です。 更新-環境仕様 ここに私たちの環境の分解があります-バックエンドはlaravel 5.3を使用します-それはAWS EC2にデプロイされます- 自動デプロイメントにforgeを使用します(空想的なものはありません。このスクリプトを実行するだけです: cd /home/forge/default git fetch --tags git pull origin master git describe composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader echo "" | sudo -S service php7.1-fpm reload if [ -f artisan ] then php artisan migrate …

2
Dockerイメージの暗号化(エンドツーエンド); オフラインチャネルでの転送
私たちはイントラネットでDockerイメージを開発および構築しており、私たちに属するいくつかのホスト(開発者、内部テスト、外部テストなど)にそれらを展開する必要があります。これらの一部はイントラネットにあり、一部はインターネットでサードパーティがアクセスできます。 最終的な展開は、いくつかのノード(実稼働、さまざまなテスト段階)上の顧客のイントラネット内です。これらはファイアウォールの背後にあり、イントラネット外の物に定期的にアクセスすることを許可していません。つまり、デプロイメントのために外部レジストリへのアクセスを許可できるものもあれば、不可解なソフトウェアのアップロードを通じて手動で画像を配信する必要があるものもあります。ツール。 画像を暗号化して保存できる(できればGPGまたは同様の、単純なパスワードではない)インターネット上のレジストリ(おそらく、そこにあるVMで自分で実行した可能性があります)を持つ方法を探しています。しかし、その場合は、手動でアップロードメカニズムを介して、単に「半分」のものを配信することもできます。顧客は非常に偏執的であるため、エンドツーエンドの暗号化を維持することは非常に重要です。 頭に浮かぶ、それを完全に処理できるツールはありますか?1つの解決策は、専用ホスト上の顧客の敷地に完全なレジストリをミラーリングし、暗号化の部分をそのまま維持することです。 「標準」のソリューションは素晴らしいでしょう。何か無駄のない/軽量の/確立された/安定したものがすでにある場合、私は何かを一緒にハッキングするのは嫌です。 編集(+タイトルに編集):Portusによって提供されているような広範な許可スキームは良いスタートですが、実際の画像のエンドツーエンドの暗号化に理想的です。顧客は超偏執的で、Docker、クラウドベースのサービスなどを始めたばかりです。

2
ファブリックのJavascriptベースの代替
似DevOpsチームのツールがあります生地のスクリプト言語としてJavaScriptを使用しては?特にリモート実行側に興味があります。 私が見つけたほとんどのツールは、python(例:fabric)またはRuby(例:Capistrano、Chef)に依存しています。ただし、私のチームでは、これらの言語を他の目的で使用することはありません。これらの言語はすばらしいかもしれませんが、Web開発業界ではJavaScriptほど普遍的ではありません。 私が最小限のpythonスキルを持っていることを除いて、私が欲しいものに理想的であるので、ファブリックについて言及します(悲しいことに)。

3
複数の依存マイクロサービスをデプロイする方法
AWS ECSに複数のマイクロサービスをデプロイしたいと考えています。 私たちが解決する必要がある問題は、それらをアトミックな方法で展開する方法です。 ユーザーサービスバージョン2.0を必要とするフロントエンドサービスがあるとしましょう。 フロントエンドサービスを展開する前に、ユーザーサービスが利用可能であることを確認する方法。 私たちはインフラ全体を複製し、すべてを配備してから利用可能にするという考えを持っています。しかし、それは私には複雑に思えます。これらのスペアインスタンスを作成し、サービスをデプロイして、切り替えを行う方法を教えてください。 サービスごとに2つのALBとターゲットグループを使用しています(動的ポートマッピング)。

1
コンテナーにJavaScriptベースの静的Webサイトを展開/ホストするための戦略
これは、いくつかの開発チームで時々発生しますが、「正しい」方法を理解していません。 私たちは、いくつかのhtml、js、cssファイルである静的なWebサイトに「コンパイル」する多くの反応ベースのWebアプリケーションを使用しています。 ただし、これらのアプリの「ビルド」は、機能フラグの有効化/無効化、バックエンドURLの構成など、いくつかの変数を使用します。つまり、従来の意味でバイナリを「ビルド」して、デプロイ時に設定ファイルを適用することはできません。時間-「ビルド」自体にこれらの環境固有の変数を設定する必要があるため、「ビルド」できるのはデプロイ時のみです。 とりあえず、必要な環境変数をDockerコンテナーに注入し、次の行に沿って開始コマンドを実行することでこれを解決します npm build && nginx run これにはいくつかの欠点があります。 ビルドプロセスは、コンテナーのランタイム要件に比べて多くのCPU /メモリを消費します。つまり、ランタイム要件ではなく、ビルドプロセスのコンテナーをスケーリングする必要があります。 ビルドの失敗を「追跡」するのは困難です。Kubernetesでヘルスチェックを使用できますが、ビルドに2分かかる場合でも、コンテナーのヘルスチェックエンドポイントのテストを開始してその生存を確認する前に、3分(安全のために1つ余分)待つ必要があります。 デプロイには時間がかかることがあります。「シリアル」デプロイを行うようにKubernetesを構成すると、各ポッドが開始され、2〜3分の「initialDelay」期間待機してから次のポッドが開始されます。これは、デプロイが3〜4ポッドにスケーリングされている場合、10分のデプロイ時間を簡単に見ていることを意味します。 これはすべて、私にとって非常に最適ではないと感じています。コミュニティーが「ビルド時にデプロイ」という難問を最新のJavaScript Webアプリケーションで解決する方法を聞いてみたいと思います。 Kubernetesの場合、ビルドを実行し、アーティファクトを永続ストレージに配置し、起動時にアプリコンテナーを永続ストレージから単純にプルする「init-containers」を使用できることを理解していますが、これはまだ問題を「バイパス」するように感じられます根本的な問題を解決します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.