DevOps

自動テスト、継続的デリバリー、サービス統合と監視、およびSDLCインフラストラクチャーの構築に取り組んでいるソフトウェアエンジニアのためのQ&A

1
GitHubのプルリクエストモデルは、承認後の実装に使用できますか?
「four-eyes原則の可能な実装(または例)は何ですか?」に対する受け入れられた回答は、GitHubのプルリクエストモデルが可能な実装であることを示唆しています。 そして、「緊急修正の四目原理を実装する方法」に対する私自身の回答は、承認後の概念を説明しています。 私の質問:GitHubのプルリクエストモデルは、承認後の実装にも使用できますか?もしそうなら:どのように?そうでない場合、Git(GitHub?)で他に使用できるものはありますか?


1
コンテナーで実行されているJenkinsスレーブのDocker(dind)でのDockerの代替方法は何ですか?
コンテナーで実行されているJenkinsスレーブを使用する場合、DockerのDockerの代替または「安全な」(セキュリティの観点から)実装とは何ですか。 アーキテクチャの例: Dockerコンテナーとして実行されているJenkinsマスター Dockerコンテナーとして実行されているJenkinsスレーブ Dockerコンテナで実行されるテストタスク いくつかの既知の選択肢: DOOD(Docker-Outside-Of-Docker) Docker APIを使用したJenkinsプラグイン 制約の明確化:アイデアは、Jenkinsをオーケストレーターとして使用し、Dockerをクリーンな環境で使用することです。残りのアーキテクチャは変更される可能性があります。

1
Amazonマーケットプレイスへの提出を自動化する方法は?
AmazonのマーケットプレイスへのAMIの提出を自動化する方法を知っている人はいますか?公開AMIを取得してAWS Marketplaceに共有し、リストをスキャンして製品メタデータシートを送信できるようにしたいと考えています。 私たちの推奨環境はPythonですが、boto3ライブラリに関連するフックが見つからなかったため、代替手段を用意しています。

2
ログファイルの機密データを保護するためにどのような戦略を採用できますか?
高度に規制された環境での作業データは、感度に応じてさまざまな方法で分類されます。場合によっては、これは法的に強制され、別の扱いが必要になります。 データ分類ポリシーの例は次のとおりです。 パスワード、秘密鍵、SAMLトークン、クレジットカード番号などの非常に制限されたデータ。 ユーザー名やお客様IDなどの制限されたデータ。 無制限のデータ、ほとんど何でも。 この分類には特定の義務が伴います。 厳しく制限されているデータは、いかなる状況でもログファイルで利用可能にしてはなりません。 特定の条件下では、制限されたデータがログファイルで利用可能になる可能性があります。たとえば、サービスでインシデントが発生した場合、オンコールエンジニアはBreak-Glass手順を実行して、このデータにアクセスして問題を診断できます。次に、Break-Glass手順により、レビュー、監査、および場合によってはそのエンジニアからの一時的な特権の取り消しがトリガーされます。 これを達成するためにどのような戦略を採用することができますか?特に、この問題に直接的な回答を提供しない、幅広いロギング、モニタリング、および計測ツールが市場に出回っていることを考えると? たとえば、SplunkとAppDynamicsのどちらにも、公開されているテレメトリの条件に応じて異なるアクセス制御を課すことができます。つまり、マスクするフィルターを作成できます<customerId>NNNNNNNNNNNN</customerId>。ただし、これらのツールはどちらも、クレジットカード番号を自動的に識別して自動的にマスクする機能を提供しません。 注:これはDevOpsに関連していると思います。これは、従来の階層型サポートモデルでは、比較的少数のグループがデータにアクセスして手動でフィルタリングできるため、オペレーティングチームの責任を開発チームに委譲することにより、このデータが遠くにさらされる可能性があるためです。より広い聴衆。

2
API GatewayリクエストのみがEC2インスタンスに到達できるようにする方法
マイクロサービスをホストする複数のEC2インスタンスがあります。サーバーの自動スケーリンググループにはELBがあります。すべてのトラフィックはAWS API Gateway経由でルーティングされます。問題は、ELBのHTTPSポートが世界中に公開されていることです。 サーバーを保護して、トラフィックがAPI Gatewayのみを通過できるようにする方法は?

4
事前検証された変更が正常に行われると、捕捉されるべきであった回帰がどのように引き起こされるのでしょうか?
CIのコンテキストでは、統合ブランチの品質レベルを上げるために一般的に使用される指標の1つは、コミット前の品質検証の必須セットです(通常、一部のアーティファクトの構築、ユニットテストの実行、さらには機能/統合テストの一部も含まれます)。 ただし、CIシステム検証では、これらの必須の事前コミット検証でカバーされると想定されていた領域で、一部の回帰(ビルドの破損、さまざまなテストの失敗)が検出されます。 これらの回帰の分析中によく聞かれる議論は、回帰の根本原因として識別された変更をコミットした開発者が、そのようなすべての検証に成功したというものです。そして多くの場合、この主張は次のことを示す確固たる証拠によって裏付けられています。 変更の最終バージョンに達した後、ブランチの先端に基づいて新しいワークスペースに移植されました 必要なアーティファクトはゼロからビルドされました(そのため、ビルドは完全に問題なく、キャッシュ関連の問題などはありませんでした) 問題の領域をカバーし、回帰を検出する必要があるものを含む、すべての必須テストに合格 断続的な誤検知はそれぞれの検証に影響しません ブランチへの変更をコミットするときにファイルのマージは検出されませんでした 新しいワークスペースがプルされたため、変更されているファイルのいずれもブランチでコミットされた他の変更の影響を受けなかった 規定されたすべてのプロセスと実践に正しく従っているにもかかわらず、ソフトウェアの変更がそのような退行を引き起こすことは本当に可能ですか?どうやって?

2
DevOpsはソフトウェアエスクロー手順の改善にどのように役立ちますか?
ソフトウェアベンダーと、このベンダーの一部のソフトウェアのライセンスを取得した顧客について検討します。ライセンスを取得するソフトウェアは、オンプレミス(顧客の場所)またはSaaSソリューションの形式(ベンダーがホスト)で使用します。ただし、顧客はソフトウェア(実行可能ファイルなど)を使用/実行するために必要なものにしかアクセスできないため、実行可能ファイルを作成するためのソースコンポーネントやそれに関連するものにはアクセスできません。 ベンダーに問題が発生した場合(破産など)のシナリオで顧客のビジネス継続性を保護するために、両方の当事者が何らかのソフトウェアエスクロー(SE ...「また」)契約(ソースコードエスクローとも呼ばれる)に同意する場合があります。このような合意により、両当事者は、両当事者から信頼される第三者(=「ソフトウェアエスクローエージェント」)を関与させることに同意します。これらは、そのようなSE合意のハイライトです(=実際のSEプロセスの仕様): すべてのソフトウェアコンポーネント(アーティファクトライセンスされたソフトウェアに関連する)SEエージェントに関連するいくつかの合意された場所で、ソフトウェアベンダーによって寄託されます。そのようなデポジットには、実行可能ファイルだけでなく、実行可能ファイルを作成するためのソースコンポーネントとそれに関連するすべてのものが含まれます(実行可能ファイルを作成するためのドキュメント、指示なども)。 ソフトウェアベンダーはソフトウェアライセンスの有効期間中に複数のリリースを作成する場合があり、お客様はそのような新しいリリースを受け取る権利を持っているため(ライセンス契約に従って)、そのようなSE契約の一部は「すべての主要な新しいリリースについて」です。 (「メジャー」が何を意味する場合でも...)、SEエージェントに配信されたデポジットも更新/更新されます。 特定の条件が満たされた場合(例:ベンダーの破産)、ソフトウェアエスクローエージェントは、顧客の要求に応じて、寄託されたすべてのコピーをライセンスのある顧客に配信し、顧客が引き続き使用できるようにします。ソフトウェア、および必要に応じてソースコードを調整して、顧客のビジネスで引き続き使用できるようにします。 このようなSEエージェントが関与するための一般的な方法は、弁護士などの法人またはエンティティの一種です。しかし、実際に「SEデポジットを処理する」(SEエージェントによる)には、あらゆる種類のリリース管理やソフトウェア配信タスクを、おそらく知らない誰かまたは何か(貧弱なSEエージェント)が実行する必要があります。ライセンスされたソフトウェアが行うことになっているすべてのこと...保証された楽しみ! 私の質問: 上記のように、DevOpsはソフトウェアエスクロー手順の改善にどのように役立ちますか?どのようなツールチェーン-SE契約のどの部分の履行に使用することをお勧めしますか?そして、適切な場合、そのための(できればオープンソースの)ソフトウェアソリューションを使用しますか? 注: 事態をさらに複雑にしないために、関係するすべての当事者間で合意され、SEエージェントは実行されているデポジットについていかなる種類の「検証」も行う必要がないと仮定します。つまり、デポジットされたものはすべて、完全、最新、文書化されているなどと見なされます。 「メジャーな新しいリリース」について:毎年1〜3の間であると想定します。つまり、ライセンスを取得した顧客は、それらのリリースに(SEエージェント経由で)アクセスできることだけを期待します。ライセンスされた顧客への中間配信(フィックスやベータ版など)があったとしても、それらのタイプの配信は範囲外と見なされます。それが理由であったとしても: SEエージェントは、「SEエージェントが処理するデポジットごとに」課金します。 ライセンスを取得した顧客がリリースを変更することはめったになく、問題が発生した場合にのみSE契約を使用できることにのみ関心があり、問題が発生した瞬間にリリースが実行されます。

2
機能フラグと機能切り替え(ある場合)の違いは何ですか?
私の(メタ)質問「機能フラグの名前を機能切り替えに変更しますか?」に対する回答の一部は次のようになります。 ...機能のフラグ(形式、それらに関するドキュメンテーション、定義のプロセス)について有効な質問がある可能性があります。これは、機能のトグルではなく、バイナリの意味が少ない機能のランプアップに関連している場合があります。... 私の質問:DevOpsのコンテキストで、機能フラグと機能トグル(存在する場合)の違いは何ですか? PS:https ://martinfowler.com/articles/feature-toggles.htmlを見ると、そのようなフラグとトグルの違いはわかりません。

3
非常に大規模なプロジェクト/チームの継続的な統合はどのように拡張できますか?
従来、CIシステムは、統合ブランチ内のコードの品質のみを監視し、回帰が発生したときに通知します。修理には人間の介入が必要です。 同じブランチで作業する開発者の数が増えると、破損/閉塞のリスクが高まります。最終的には、破損が修正されるまでに平均して新しい破損が現れるポイントに到達します。ブランチの進行は実質的に無視できます。 後でマージされる別々の統合ブランチでそれぞれ作業する複数のチームに分割することは役立つかもしれませんが、関連するチャーン/ノイズ/技術部門を追加しながら、必要な統合を後で遅らせるだけなので、プロジェクトの期間を大幅に延長します個々のブランチのマージによる部分的な統合。また、各ブランチのCIセットアップ、それぞれ独自のビルド/ QAリソースなどにより、コストも増加します。また、全体的な品質が必ずしも向上するとは限りません。 スケーラビリティは、せいぜい、疑わしいものです。 このような大規模なプロジェクトを実際にスケーリングする方法はありますか?

1
Angular、PHP API、Ansibleプロジェクトに継続的デプロイメントを実装する方法は?
APIポイントとしてYii2(PHP / MySQL)を使用したAngular2プロジェクトに取り組んでいます。Angularアプリを顧客ごとに異なる言語でデプロイする必要があります(angular-cliからのAOTコンパイルを使用)。 これを達成するための最良の方法は何ですか?私はこの作業を行うためにDockerまたはAnsible(-container)を探しています。ただし、この例は主に1:1セットアップの場合です。しかし、次のような1:nが必要です。 deploy app-de new_costomer prod_server さらに、アプリの新しいバージョンが利用可能になったときに、ネットワーク全体を新しいアプリで更新したい(Arcでコンパイルされたsrc /フォルダーのアップロード、およびYii2側のdb移行スクリプトが必要)。 理想的には、次のようになります。 deploy update network-all prod_server 何か案は? 明確にするために:私には多数の顧客がいますが、各顧客は独自のコンテナ(Docker、Ansibleコンテナを介して)を取得する必要があります。AOTでコンパイルされたAngularのもの(JSのみ)とMySQLを備えたPHPバックエンドがあります。 各顧客はサーバーでこの設定を取得します(つまり、3人の顧客= Angular + PHP + MySQLを備えた3つのdockerコンテナー)。 AngularとPHPの両方に非常に頻繁に更新をプッシュします(つまり、DISTフォルダー全体をアップロードするか、少なくともdiff、PHP / MySQLバックエンドの移行スクリプトを実行する必要があるなど)。 そして、これは1つのコマンドからです(SSHで各コンテナに半手動で実行したくないためです)。 これまでこのような設定を行ったことがないので、Ansible(など)を使用してこれをどのように実現できるかについて考えたいと思います。

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