タグ付けされた質問 「continuous-integration」

ソフトウェアエンジニアリングでは、継続的インテグレーション(CI)により、ソフトウェア製品全体の継続的な構築と自動テストが頻繁に実行されます。少なくとも1日に1回、多くの場合1日に数回、時にはバージョン管理システムにチェックインするたびに頻繁に。

4
機能の半分を実装するための正しいアプローチをどのように学ぶのですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 開発チームを率いて、できるだけ頻繁に製品をリリースしたい(継続的デリバリー)。 多くの場合、リリース間の時間よりも実装に時間がかかる機能を実装する必要があります。私はまだ人々に毎日コードをコミットしてもらいたい(継続的インテグレーション)。 多くの場合、新しい機能を実装するには、既存の機能を変更する必要があり、もちろん、新しい機能がまだ終了していない場合でも、既存の機能を動作させる必要があります。 開発者が適切なアプローチを使用する場合、既存の機能を慎重に調整でき、上記のすべては問題ではありません。 しかし、実際には正しいアプローチは何ですか?私のプログラミングに慣れた心は、個々のケースごとに何をすべきかを教えてくれますが、さらに学ぶ必要があり、読むことができ、チームメンバーに読んでもらうための読み物が必要です。または、このアプローチを学習する正しい方法を学習する他の方法でも実行できます。 それが問題です。機能の半分を実装するための適切なアプローチをチームメンバーに確実に学習させるにはどうすればよいですか? これに関する戦略を持っていると主張する人々を検索しましたが、トピックについていくつかのランダムな考えを書いている人々を除いて、まだ見つけていません。おそらく、私は正しい検索語を使用していないか、おそらく誰もこれに関する権威あるガイドラインを作成していません。

1
ビルドスクリプトとビルドサーバーの責任
ビルドスクリプトとビルドサーバーの責任について明確にする必要があります。 継続的な統合とビルドに関するいくつかのネット上の記事を読みました。含む F5キーはビルドプロセスではありません ビルドサーバー:プロジェクトのハートモニター 毎日のビルドはあなたの友達 そして、私たちのソフトウェアのビルドプロセスについてアドバイザーと会話しました。彼は非常に経験豊富であるため、私は彼の発言を信頼しますが、混乱が残りました。 私が理解しているように、私の研究から(そして私が尋ねているのでここで私を修正してください)理想は次のようになるはずです: すべてのプロジェクトにはビルドスクリプトがあります このスクリプトはプロジェクトをビルドします このスクリプトは、依存関係が以前に構築されていることを確認します 依存関係は他のプロジェクトになる可能性があるため、独自のビルドスクリプトを使用すると、ツリーのような階層が生じます。すべてのプロジェクトとアプリケーションをビルドするトップビルドスクリプトがある場合があります。 ただし、ビルドサーバーの責任は次のとおりです。 リポジトリをチェックアウトする ビルドをトリガーする トリガーテストおよびその他のQAツール アーティファクトを利用可能にする これは、手動で、夜間に、またはリポジトリが変更されるたびにトリガーされます。 私のアドバイザーの目的は、私が理解しているように、1つのビルドスクリプトは柔軟性がなく、維持できない方法であるということです(レガシーコードベース用に作成するのに非常に時間がかかるという事実は別として)。また、ビルドサーバーは依存関係を維持する必要があります。たとえば、新しい依存関係を作成するときに古い依存関係を使用すると失敗します。特にAnt、具体的な主題であったため、コードベースで使用されるあらゆる種類の異なるテクノロジーを構築することはできず、依存関係を維持することもできません。 目的を詳しく説明して、責任を明確にしてください。

3
継続的インテグレーションとDVCSのパターン
現在SubversionとTeamCityを使用していますが、Mercurial(特にFogBugzユーザーのKiln)の使用に移行します。 明らかにこれにより、開発パターンに変更(できれば改善)がもたらされます(2人全員!)が、私が悩んでいる1つの問題は、継続的な統合/ CIサーバーのメリットを享受できるように物事を構造化する方法です(利益が存在し、今後も存在することは当然のことであり、その議論はこの質問の範囲外です。 SVNを使用すると、限られた数の中央リポジトリにコミットします-事実上プロジェクトごとに1つ(多かれ少なかれ1つのVisual Studioソリューション)なので、ビルドをトリガーし、すべてのファイルがコミットされていないという安心感を得るのが簡単です依存関係などの漂流など。しかし、mercurialを適切に進める場合は、リポジトリインスタンスを増やしたいと思うでしょう。変更点は、一般に決定的な「ライブ」レポジトリに向かって流れると予想されます。私が苦労している問題は、ライブリポジトリが私にとってCIビルドをトリガーするには遅すぎるように見えることです。開発者ごとにプロジェクトごとに1つのCIビルドが多すぎると思われます(そして他の問題を引き起こします)。 私は少し釣りをしていますが、それは、中央のSubversionリポジトリが提供するものの1つ(私はセットアップで!)が、何をいつ構築するかについて非常に明確だからです。 nb Mercurialを継続的インテグレーションで使用するメカニズムについては質問していません。個人的なプロジェクトの御and走、そのパターンと構造、そして頭を動かそうとしている作業プラクティス/ワークフローを持っています。

2
大企業では継続的インテグレーションはどのように組織されていますか?
私の会社では、各機能/バグ修正ブランチがdevでどのようにマージされるかを確認するために中間ビルドを行わないのが一般的です。毎日のビルドのみがあり、常に多くのテストの失敗とビルドエラーが発生します。私は、1000人以上の開発者がマージごとにビルドするのは理不尽だと言われています。 それで、私はCIがそれ以上の開発者(Microsoft、Facebook)を持っている会社でどのように組織されているかを検索しましたが、何も見つかりませんでした。たぶん、インサイダーは私に言うことができますか?

3
統合テストを継続的統合(CI)に含める必要がありますか?
Webアプリケーションを開発しており、Hudsonがコンパイル、単体テスト、静的コード分析などの典型的な仕事をしていると仮定します。 ただし、注意が必要なのは、Hudson がアプリケーションサーバーを展開して起動し、統合ジョブを実行してから、以前のジョブが完了したことです。 これは、データベース接続、3番目の部分のアプリケーション接続、ソケットポートのリスニング、環境変数、サーバーの起動失敗の処理など、いくつかの困難なことを意味します。さらに悪いことに、統合テストは統合テストを簡単に破ることができます。 統合テストを継続統合(CI)に含める必要があると思いますか?手動でできますか?または統合テストを簡素化しますか?

5
Continous Integration(CI)とは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 継続的インテグレーションの概念、どのように機能するのかを理解しやすい方法で説明してくれる人がいますか?そして、企業がコード配信ワークフローにCIを採用する必要があるのはなぜですか?私は開発者であり、私の会社(主にビルド​​チーム)はTeam Cityを使用しています。開発者として、私は常にコードをチェックアウトし、更新してSVNにコミットしますが、TeamCityやCI全般について気にする必要はありませんでした。それでは、CIの有用性を理解したいと思いますか?CIはアジャイル手法の一部ですか?

2
パフォーマンスレビューの指標の一部として継続的なビルド結果を使用していますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私の上司は、パフォーマンスレビュー(「品質」メトリック)の一環として、継続ビルド(コミットごとにテストをビルドおよび実行)のメトリックを使用することを計画しています。これは私にとって本当に悪い考えのように思えますが、誰かがこれを研究したか、以前に試したことを見たかどうかを知りたいです。 私の考えでは、テストが失敗することを恐れて、開発者が他の方法でテストするほど多くのテストを行わないようにします。彼は貴重な開発者ツールを開発者を打ち負かすための棒に変えていると感じています。 明白な反論は、人々がコミットする前により慎重になることを促進し、それにより品質が向上するということです。 私はここから離れていますか?パフォーマンスのレビューを行うべきかどうかの質問は別としてください。他の場所で回答されています。

5
継続的インテグレーションパイプラインで信頼できる十分な自動テストがあるのはいつですか?
テストとの継続的な統合は、常に「出荷可能な」コードがチェックインされていることを確認するのに役立ちます。 ただし、包括的なテストスイートを維持することは非常に難しく、多くの場合、ビルドにバグがあるように感じます。 CIパイプラインテストに自信を持たせるには、どのくらいのテストが必要ですか。十分なテストがあるかどうかを判断するために、ある種のメトリックを使用していますか?

1
依存関係の促進戦略:サイロ化またはオーケストレーション?
私たちは、相互に依存し合う多くのアプリとWebサービス(一部のパブリック向け製品、一部の内部およびプライベート「バックエンド」の一部)を持っています。これらの各コンポーネントには、4つの環境(特定の目的に役立つサーバー/ノードのクラスター)があります。 非生産 DEV-CIがプッシュ変更を構築する統合開発環境。エンジニアがローカルで再現できないバグを見つけるのに役立ちます QA -分離されたQA /テスト環境 DEMO -ビジネス関係者のための安定したUAT環境 製造 LIVE -私たちのライブ/制作環境 コードの昇格は次のようになります:(LOCAL開発者のマシン)=> DEV=> QA=> DEMO=> LIVE。 と呼ばれるmyappRESTful Webサービスによってサポートされるアプリケーションがありmyws、それ自体がと呼ばれるDBによってサポートされているとしmydbます。 現在、これらの依存関係の中で私が「オーケストレーション」プロモーションと呼ぶものmyapp-devがmyws-devありますmydb-dev。が使用するポイント。同様に、myapp-qaがmyws-qaを使用することを指すmydb-qa。同じのためにDEMOとLIVE。 これの問題は、たとえばにmyapp変更を加えるたびにmyws、mydbにも変更を加える必要があることです。しかし、各DEV環境は依存関係の環境を指しているため、DEVこれらの変更をすべて同時にスケジュールしてロールアウトする必要があります。さらに、1つのビルドが不安定になったり壊れたりすると、他の上流コンポーネントがダウンすることがよくあります。たとえば、開発者がを変更するときに何かを壊した場合、通常mydb-dev、myws-devおよびmyapp-devクラスターも不安定になります。 これを解決するために、私は「サイロ化された」プロモーション戦略と呼ぶものの提案をまとめます。すべてのコンポーネント間の依存関係はこのガイドラインに従います。 上流の依存DEMO関係は、すべての非実稼働環境(DEV、QAおよびDEMO)の下流の依存関係の環境に依存します。そして 上流の依存LIVE関係は、本番環境の下流の依存関係の環境に依存します この規則を使用myapp-devするとmyws-demo、実際にはをポイントし、を使用しますmydb-demo。同様に、およびmyapp-qaも指します。myws-demomydb-demo 私は見つけることができることをここに利点があるビルドの安定化:それははるかに少ない可能性が高いということであるDEMOコードはにそれを作ることができないので、特定のコンポーネントのための環境が不安定になるDEMOの両方の厳格なテストなしDEVとQA。 この方法で見つけられる唯一の欠点DEMOは、特定のコンポーネントで問題が発生した場合、すべての上流の依存関係のすべての非本番環境が突然破壊されることです。しかし、DEVとで実行されたテストのために、これが非常にまれに発生するはずであることに反対しQAます。 これはしていまし解決して、この問題とその解決策が既に(私が画策/サイロ化呼び出しています何のほかに)それらに名前を持っている場合、私は驚かないだろう多くの開発者(ずっと賢く自分よりも経験)という問題です。だから私は尋ねます:サイロ化されたプロモーション戦略のメリットはどんな短所よりも重要ですか、そして私がここで見落としているかもしれない短所は何ですか?

4
継続的な統合により、成長する多様なコードベースを維持する
継続的インテグレーションセットアップの哲学と設計について、いくつかの助けが必要です。 現在のCIセットアップではbuildbotを使用しています。それを設計し始めたとき、私は(厳密には、一年前にその設計に関わっていたため)、ビルド全体を一度に一晩実行するように調整されたオーダーメイドのCIビルダーを継承しました。しばらくして、これは不十分であると判断し、さまざまなCIフレームワークの調査を開始し、最終的にビルドボットを選択しました。buildbotへの移行における私の目標の1つ(ウィズバンのエキストラをすべて楽しむ以外に)は、オーダーメイドのナイトリービルダーの不備のいくつかを克服することでした。 私をちょっとユーモアして、私が受け継いだものを説明させてください。私の会社のコードベースは約150のユニークなc ++ Windowsアプリケーションで、それぞれが1ダース以上の内部ライブラリ(および多くのサードパーティライブラリ)に依存しています。これらのライブラリーの一部は相互依存しており、依存関係のあるアプリケーションがあり(それらは相互に何の関係もありませんが)、そのライブラリーの同じビルドでビルドする必要があります。これらのアプリケーションとライブラリの半分は「レガシー」で移植不可能と見なされており、IBMコンパイラーのいくつかの異なる構成で構築する必要があります(私はの固有のサブクラスを作成しましたCompile)。残りの半分はVisual Studioで構築します。ShellCommands、VSSのサポートがないため)。 オリジナルの夜間ビルダーは、すべてのソースを単純に削除し、特定の順序でビルドしました。単一のアプリケーションだけをビルドしたり、リビジョンを選択したり、グループ化したりする方法はありませんでした。仮想マシンを起動して、多数のアプリケーションを構築します。あまり堅牢ではなく、配布できませんでした。それはひどく拡張可能ではありませんでした。私はビルドボットのこれらの制限をすべて克服できるようにしたかったのです。 私がこれを最初に行った方法は、構築したい各アプリケーション(すべて150アプリケーション)のエントリを作成し、さまざまなアプリケーションをグループとして構築できるトリガースケジューラを作成し、全体的なナイトリービルドスケジューラの下にそれらのグループを含めることでした。これらは専用スレーブで実行でき(仮想マシンシカネリーは不要)、必要に応じて新しいスレーブを追加することもできます。これで、予定外のフルビルドを実行したい場合は、ワンクリックで実行できますが、必要に応じてアプリケーションを1つだけビルドすることもできます。 ただし、このアプローチには4つの弱点があります。1つは、ソースツリーの複雑な依存関係のWebです。設定のメンテナンスを簡略化するために、すべてのビルダーは大きな辞書から生成されます。依存関係は、それほど堅牢ではない方法で取得およびビルドされます(つまり、ビルドターゲットディクショナリ内の特定のものをキーオフします)。2つ目は、各ビルドに15から21のビルドステップがあり、Webインターフェイスで閲覧および確認するのが難しいことです。約150の列があるため、ロードに永久に時間がかかります(30秒から数分と考えてください)。3つ目は、ビルドターゲットの自動検出機能がなくなったことです(ただし、同僚の1人が私にこのことを気にかけているのと同じように、そもそも何が私たちにもたらされたのかわかりません)。最後に、 現在、新しい開発に移行し、g ++とsubversionを使用し始めています(古いリポジトリは移植しないでください。新しいものに限って)。また、より多くの単体テスト( "more"は誤った結果をもたらす可能性があります...それは他のものに似ています)、および統合テスト(pythonを使用)を開始しています。これらを私の既存の構成にどのように組み込むかを理解するのに苦労しています。 それで、私はここで哲学的にどこが間違っているのですか?どのようにすれば、自分の構成を実際に保守可能にするために(buildbotを使用して-これは私が取り組むライセンスを持っている唯一のパズルのピースです)先に進むことができますか?デザインの弱点に対処するにはどうすればよいですか?大規模な(おそらく過度に)複雑なコードベースのCI戦略に関して、実際に機能するものは何ですか? 編集: 私は自分の問題を説明したと思ったが、明らかに十分に明確ではなかった。私はない CIのプラットフォームを変更するための提案を探しています。それは起こらないでしょう、そしてそれが受け入れられないことを示唆する答え。私が知りたいのは、他の人々がCIを使用して複雑なコードベースをどのように管理するかです。私は十二乗の異なる製品を持っています、そして依存関係が風に散らばっていて、それらはすべて異なります。これは私がどのように対処するか知りたいものです。

3
継続的インテグレーション(iOSおよびAndroidプロジェクトを使用)[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 私は会社にプラスの変更を加えようとしており、その変更の1つは継続的インテグレーションの実装です。モバイル開発(iOS / Android)を行っているので、両方のタイプのプロジェクトをサポートするCIが必要です。ご存知のように、CIについてはあまり詳しくありませんが、少しググってみましたが、JenkinsとHudsonの2つが最も人気があると思います。 2つの質問があります。 ジェンキンスについてのあなたの考えは? CIがプロジェクトが コーディング標準に従ってコンパイルされているかどうか(疎結合など)を確認する方法はありますか?

1
TFSがあるときにPowerShellで展開スクリプトを作成するのはなぜですか?
自動展開/継続的インテグレーションを実験しており、チームリーダーと話し合いました。 PowerShellでビルド/デプロイメントスクリプトを作成することを調査していることを彼に伝え、自動デプロイメントはGUIを使用してTFSで非常に簡単に設定できるので、代わりに調査する必要があると述べました。VSからソース管理にコミットする以外は、TFSの経験はありません。 TFSが失敗するのはどのような場合で、自動展開のためにPowerShellを使用した方がよいでしょうか。TFSの代わりにPowerShellを選択する他の理由と利点は何ですか? そして別のこと:たとえば、TFSからJSファイルを縮小するサードパーティツールを実行できますか? 私が考えることができるPowerShellのいくつかの利点: PowerShellは最大の柔軟性を提供します Mercurialなどの別のソース管理システムに簡単に切り替えることができます スクリプトはTFSが生成するものよりも保守が容易になります PowerShellは軽量です。どのPCでもスクリプトを実行できます

4
どの時点で継続的インテグレーションサーバーが興味深いのでしょうか。
私はJenkinsのようなCIサーバーについて少し読んでいますが、疑問に思っています。 確かに、クラスが5つと単体テストが10つしかない小さなプロジェクトの場合は、実際には必要ありません。 ここでは約1500のユニットテストがあり、(古いCore 2 Duoワークステーションで)約90秒で合格します(実際に「ユニット」をテストしているため、非常に高速であるため)。私たちのルールは、テストが失敗するとコードをコミットできないということです。 したがって、各開発者はリグレッションを防ぐためにすべてのテストを開始します。 明らかに、すべての開発者が常にすべてのテストを起動するため、ある開発者が別の変更を(ある場合)プルするとすぐに、変更の競合によるエラーをキャッチします。 それでもまだはっきりしていません。JenkinsのようなCIサーバーをセットアップする必要がありますか?それは何をもたらすでしょうか? 速度向上に役立つだけですか?(私たちのケースでは問題ではありません) 古いビルドを再作成できるので便利ですか?(ただし、Mercurialでこれを行うには、古いリビジョンをチェックアウトします) 基本的に私はそれが役立つことを理解していますが、正確な理由はわかりません。 上記で提起したポイントを考慮した説明は大歓迎です。

4
継続的ビルドサーバー(cc.net、hudson、bambooなど)のリモートビルドエクスペリエンス?
現在、ビルドプロセスには.net(msbuild&nantを使用)とjava(mavenとantを使用)の両方をビルドするcc.netサーバーを使用しています。 CC.netはソース管理を監視し、別のサーバーで実行されているリモートビルドをトリガーします。CC.netは結果を照合します。 リモートビルドを実行すると、通常は次のようになります。 模擬データを使用してnunitまたはjunitまたは類似のものを実行します オプションでDBスクリプトを実行して、新しいデータベースインスタンスを作成するか、既知の位置からデータベースを復元します。 セレンなどを実行してUIをテストする コードカバレッジのためにemmaまたはncoverを実行します さまざまなデプロイメント環境(テスト、受け入れ、本番)向けのシステムを構築します いくつかのビルドを同時に実行している場合があります。.netとjava(別のプロジェクトチームからの)があります。 新しいプロジェクトをセットアップするときにリモートビルドを動作させるにはかなりの時間がかかり、cc.netよりもリモートビルドに適したものがあるはずだと感じています。 継続的インテグレーションシステムを使用したリモートビルドの経験はありますか? CIサーバーの機能リストは本当に欲しくありません。多言語、マルチサーバー環境でCIサーバーをどのように使用したかについて聞いていただければ幸いです。

2
サービスの構成変更をテストする方法は?
新しい構成を追加するときにサービスをテストする最善の方法は何ですか?たとえば、私のサービスは顧客にサービスを提供し、顧客の構成に基づいて、異なるタイプのサービスを提供します。たとえば、顧客が特定の通貨を選択した場合、別の通貨と比較して20%の割引が提供されます。 上記の例は重要ではありません。重要なのは、CI \ CDを行うときに人々がとるアプローチです 割引を計算するロジックはドメイン内にあり、その周りに単体テストがあります。私の質問は、割引を把握するためにさまざまなルールで構成されたマーチャントがいる場合(すべて構成に基づいており、ドメインがそれを解決する場合)、構成を変更する要求が来た場合、どのように確認しますか? もっとテストを書きますか? 単体テストと同じようにテストしませんか? 変更を手動でテストしますか? その他の 私は多くの記事と共にxUnitテストパターンとテスト駆動開発の本を読みましたが、人々がこれをどのように管理するか(サービス内の構成変更と正確性の検証)に遭遇していません。 私はこれが継続的デリバリー・ブックで扱われるのを見ません。

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