CIツールでプロセスを実行するのは合理的ですか?


29

私の会社では、さまざまなcronジョブ(複数のシステム上)の泥沼があり、長年の適切な開発とその後の怠慢の結果として、ビジネスを機能させるプロセスを手動で開始しています。

いつか、明らかな理由から、より集中化されたソリューションを考え出す必要があります。

私たちが蹴っているのは、継続的インテグレーションソフトウェア(Jenkins)を使用してこれらのプロセスを実行することです。

私の質問は、他の企業がこれを行っているのですか?これは一般的に受け入れられている慣行ですか?これは、名前に暗黙的に含まれるCIツールの定義と矛盾しませんか?他のオプションはありますか?

注:https : //wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins

Jenkinsは、「cronジョブやprocmailジョブなどの外部で実行されるジョブの実行の監視」に焦点を当てていると主張しています。これがまさに私が話していることであるかどうかはわかりません。


2
考えているさまざまなタスクとプロセスの性質を明確にできますか?
スティーブングロス

さまざまな言語のスクリプト、Javaプロセス、Linuxコマンドの
混合

詳細が必要です。タスクの性質は何ですか?彼らは何をしますか?彼らはどのように管理されていますか?
スティーブングロス

@StephenGrossローカルストレージ用に外部システムからデータを収集し、ビジネスルールに基づいてユーザーに通知を送信し、ディスクの使用状況を確認し、孤児を削除します。この時点ですべて管理されている場合、それらはすべてcronによって管理されます。なぜこれらの詳細が必要なのですか?スケジュールに沿ってビジネスに不可欠な機能を実行すると想定できます。
smp7d

2
これらの詳細が必要な理由は、問題を解決するために、問題を理解する必要があるためです。これらのタスク/プロセスについては十分に知っていますが、私は知りません。どのような技術的解決策が最適に機能するかを評価する際に、実行するタスクの性質を理解しておくと役立ちます。
スティーブングロス

回答:


17

私たちはここ数年、ジェンキンスをcronドロップインとして使用していますが、ここに賛否両論があります:

長所

  • 多数のサーバーと複数の環境で多数のプロセスを管理している場合、多くのことが簡単になります。すぐに使用できる電子メールアラート、すべての共通ダッシュボード、ログ用のWebインターフェイス、およびジョブを実行するための追加ノードをセットアップする簡単な方法を取得できます。サポートチームは、問題をチェックし、ジョブを再実行するためにこの中心的な場所にあることに特に感謝しています。

  • Jenkinsプラグインエコシステムは非常にアクティブで、多くの追加機能を提供します...これは本当にJenkinsの「キラー」機能だと思います。多くの場合、そうするプラグインがあります。私のお気に入りのいくつか:Cron Column、Rebuild、NodeLabel Parameter、Log Parser、およびEmail-ext。

  • 高度なスケジューリング/トリガーのサポート:スケジュール構文は基本的にcronであるため、同じ柔軟性がありますが、これはトリガー、REST API、およびGroovy / Java APIによって補完されます

短所

  • 障害の中心点:すべてのジョブが1台のサーバーによって開始されるため、そのボックスがダウンして誰も気付かない場合は、Big Trouble。したがって、ソース管理に保存されているすべての構成と同様に、停止をすぐにキャッチするための適切な監視が必要です。元のサーバーをバックアップできない場合でも、ジョブの構成があれば、別の場所にセットアップするのは簡単です。解決までの時間が問題になる場合は、どこかにスタンバイを事前に設定しておくこともおそらく良い考えです。

  • 複数の環境(Dev、UAT、Prod)がある場合、通常は各環境で実行されるジョブのバージョンがわずかに異なります。これらすべてのジョブを1つのJenkinsで処理すると、扱いにくくなる可能性があり、それらを手動で構成するのは非常に苦痛になります。この場合、環境ごとに個別のJenkins 'Cron'インスタンスを実行します。インスタンスは、社内展開ツールを使用して自動的にインストールおよび構成されます。そのようなものはないかもしれませんが、同様のことを行う(テンプレートを使用して構成を生成する)オープンソースツールがあります。構成生成の問題を解決できる場合、これによりJenkinsのセットアップとデプロイがはるかに簡単になり、ソース管理ですべてのものを保持しやすくなります。

  • Jenkinsをアップグレードすると、特にプラグインで機能が壊れることがあります。最初に新しいバージョンを試してみるまで、ミッションクリティカルなJenkinsインスタンスをアップグレードしないでください。これは、独自のJenkinsインスタンスを備えたミラーDev環境を持つことが非常に便利な場所です。

強調すべきことの1つは、CIにもJenkinsを実際に使用していることですが、これは別のインスタンスです...「cron」インスタンスはジョブ管理専用であり、「CI」インスタンスはCI専用です。懸念を分離することは、物事をよりきれいにするようです。

サイドノートとして、私は自宅のLinuxボックスでcronの代わりにJenkinsを使用しています:)

ちなみに、これは実際にはかなり一般的なジェンキンスのユースケースです。たとえば、Sandia National LabはJenkinsを次のように使用しています:https : //software.sandia.gov/trac/fast/wiki/Hudson

また、これを説明する多数のブログ投稿とチュートリアルがあります。次に例を示します。http//blog.vuksan.com/2011/08/22/using-jenkins-as-a-cron-server/

http://morgajel.net/2011/12/12/1108

また、これは本当にすべてのCIツールではなく、ジェンキンスにのみ関係していることも付け加えてください。Jenkinsがこれを行うのに適しているからといって、他の人(TeamCity、buildbotなど)が...


8

CIツールの主なポイントは何かを監視することであるため、ここでの仕事に適切なツールを使用していないと言っていました-通常、ソースコード-そして変更があると、ビルド/デプロイ/何でも開始します。

ただし、これらのツールスケジュールされたジョブ実行できるため(たとえばTeamCity 実行します)、誰もいないときに(たとえば)Webサイトを展開できます。そのため、実際には、実行するすべてのタスクの単一の中央リストを作成することをお勧めします。また、これらのジョブを実行するタイミングと頻度をツールで決定できる必要があります。

もう1つの利点は、システムをリモートで監視できることです(希望する場合)。

ですから、バランスをとって、それは賢明なことだと思います。


主題に対するあなたの気持ちは私のものを反映しています。CIは一般的にビルドおよびテスト用であることが知られているため、非正統的なソリューションと考えています。この質問に対する他の回答は、多くの人が明らかに仕事にとって間違ったツールであると考えるように、間違いないことを示しています。TeamCityはこれらの追加タスクを実行する可能性があるため、Mavenプロジェクトを使用するCIツールはさまざまなことを実行できます。私はそれが良い考えであることをまだ不快です。
-smp7d

1
@ smp7d-同意しました。これは可能な解決策ですが、理想的な解決策ではありません。
ChrisF

6

cronはすでにニーズに適したツールのようです。システムの文書化から始めることをお勧めします。さまざまなシステムを監査し、どのプロセスがどのマシンで実行されるかの包括的なリストを作成します。

次に、これらすべてのcronプロセスを実行する専用マシンを指定することを検討してください。これがどのマシンであるかを文書化し、それを制御するための適切な管理者権限を割り当ててください。そのマシンにすべてのcronjobを配置すると、さまざまな自動化されたプロセスの中央制御点が得られます。


2

私の腸の反応は同じです。ジョブスケジューラの仕事をするために、スケジュールの概念を持つツールを使用しています。

あなたは自分の仕事が何であるかについて言及していませんが、CRONについての言及はそれらがシェルスクリプトなどであると推測させます。そこにはオープンソースと商用のジョブスケジューラパッケージがあります。バッチスケジューラと呼ばれることもあります。一部のユーザーはCRONをラップして、より使いやすくします。Quartzスケジューラーなど、ジョブの強力な管理を行うものもありますが、Javaクラスとして実装する必要があります。これを潜在的に使用し、Javaラッパーを使用してさまざまなスクリプトへのランタイム呼び出しをラップすることができます。さらに調べれば、たくさんの選択肢が見つかると思います。


ジョブは、さまざまな言語のスクリプト、Javaプロセス、Linuxコマンドの混合です。Quartzだけでは、Jenkinsが提供するフロントエンド/ビルド管理は提供されません。すべてをビルドしたくありません。Jenkinsが舞台裏でQuartzを使用しても驚かないでしょう。ただし、このQuartz Managerを確認します(terracotta.org/products/quartz-scheduler)。
smp7d

2

ビルドに関係しない定期的なタスクの実行にCIを使用しないでください。

また、システムメンテナンスに関係のないタスクについては、cronを使用しないでください。

適切なツールを使用します。アプリケーションのニーズについては、AMQPベースのソリューションを使用してみてください。

PSなるほど、そのcronはあなたのケースに合っています。一方、あなたは多くのタスクを持っています-そのため、スーパーバイザーアプリを作成してみてください。


1
答えてくれてありがとう。「スーパーバイザーアプリ」とはどういう意味ですか?
smp7d

いくつかの言葉で-それはsupervisord.orgです。他のプロセスのステータスと実行を制御するメタプログラム。ニーズに合った独自のソリューションを簡単に開発できます。私のプロジェクトには定期的なタスクのバッチがあり、github.com / ask / django-celeryはcronから抜け出すのに役立ちます。
ニコライ・フォミニー

おかげで、私はスーパーバイザーを調べます。CIツールを使用する目的は、独自のツールを作成する必要がないようにすることでした。CIツールは既に洗練されています。
-smp7d

1
これを投票する担当者がいないと思いますが、それは非常に恐ろしい答えです-残念なことに、賞金を受け取りました。ツールを「正しいツール」にするものは何ですか?必要なコンポーネントがすべて揃っていても、CIシステムと呼ばれるため、「間違ったツール」になりますか?
DougW 14年

1

このタイプのタスクには、エンタープライズサービスバス(ESB)を使用する必要があります。

現在、私の背景はwindows / BizTalkにありますが、同等のものはすべてUNIX側にも存在するはずです。通常は、BizTalkボックスでプロセスを設定します。このプロセスは、他のボックスでの処理を開始し、進行状況/エラーを監視し、SharePoint(またはWeb)ポータルにステータスを報告するか、電子メールと注意が必要な場合など。

このアプローチの利点は、さまざまなビジネスプロセスの構成と管理がすべて中央に配置されるため、どこから始めればよいかがわかることです。物理構成からコーディング部分を抽象化するソフトウェアが既に存在します(BizTalkでは、SQLサーバーのような論理的な「ポート」に対してプログラムできます。SQLボックスが場所を変更したり、アップグレードされたりした場合は、prodでプログラムできます。管理ツールを使用して、構成済みの物理ポートを変更できます。これも、Unix側に同等のものがあると確信しています。

CIツールを使用することの利点は、プロセスでエラーが自動的に発生した場合、メッセージを物理的に再送信し、より適切な記録およびログシステムを備えたクラスター化されたフェールオーバー環境をセットアップできることです。また、システムを導入すると、使用する組織の設計を開始したり、SOAをより有効に活用したりできます。欠点は、組織の規模によっては開発の労力が高くなり、ライセンスコストが非常に高くなる可能性があることです。


おそらくこれは適用可能ですが、CIがそうであるように、間違ったツールを適用する場合はもうありません。コミュニケーションやプロセスの振り付けが必要なときにESBが使用されるというのが私の印象です。この場合、スタンドアロンプ​​ロセスの配列の集中管理が必要です。中央管理を介してカスタムlinuxコマンドを実行するので問題ないので、OS /プログラミング言語の不可知論はおそらく過剰です。これはおそらく検討する価値があります、ありがとう。
smp7d

あなたがUnixショップなら間違いなくそれでいいのですが、IBMにはwebsphereラインに製品があり、webmethodにも商用のものがあり、appacheにはオープンソース製品があります。ESBの定義の意味では正しいのですが、残念ながらESBの使用法はやや曖昧になりましたが、最終的に集中化されたエラーレポート、またはプロセスに「実行した」などのレポートを追加するかどうかを検討してください振り付け。
-aceinthehole

@ smp7d webMethods Integration Serverにはファーストクラスのスケジューリングサポートがあることがわかっています。うまくいく。
ロバートグラント

1

理論的には、すべての異なるジョブを制御するための単一の場所があることが理にかなっていますが、「聖杯」のような業界の経験に基づいて、ここでcronジョブ、bashスクリプト、およびcliスクリプトが必要になります。

「壊れていない場合は修正しないでください」というマントラもあります。そのため、彼らはどんどん進んでいますが、最初に実行しているスクリプト、実行しているスクリプト、システムに触れて、「知っている」 「ビジネスの運営方法。

次に、長期的な戦略として、ジョブを実行するための集中型システムをセットアップします。ソリューションは適切に選択する必要があります。次に、ビジネスアーキテクチャ内に追加する変更要求、機能強化、アップグレード、バグ修正、または新しいソリューションごとに、スケジュールされ自動化されたタスクが「エンタープライズコントロールソリューション」に追加されるようにします。

そうすることで、スクリプトのバッチからより企業に優しい環境に徐々に移行できます。


これらは良い考えです。だから、私が探しているものは存在せず、CIツールは合理的な代替手段ではないと思いますか?
smp7d

存在する場合もありますが、使用するものに対するプラグマティズムにより、cronジョブとbashスクリプトがまだある場合があります。ただし、CIは主に開発ワークフロー用であり、環境が成熟するにつれて運用関連のソリューションを探しているため、CI環境の使用は後の障害になる可能性があります。後でバージョン管理/ CIをクラウドに移行することを決定する場合がありますが、組織の日常業務を実行しているため、それが行き詰まることは望ましくありません。
スティーブンSenkomago Musoke

さて、プロセス管理に別のCIツールを使用すると思っていましたが、あなたの言っていることがわかります。
-smp7d

別のCIを検討しているので、プロセス管理、監視、およびレポートに焦点を合わせたツールを検討してください。そうすれば、ジョブに適したツールを取得するためにCIをセットアップするための努力を活用できます。失敗した場合は、CIを
頼りに

これが最も合理的な道であることに同意します。Quartz Scheduler、supervisord.org、およびESBが推奨されています。これらに関する追加の推奨事項や考えはありますか?(また:別のCIを言ったとき、おそらく新しいブランドを使用した現在のツールの別のインストールを意味しました...セットアップは問題になりません)
-smp7d

0

私が使用した大企業システムでは、スケジューリング用に設計されたツールを使用する傾向があります。私が使用した中で最も人気のあるものはCA7です。これにより、すべてのシステムのすべてのスケジューリングを集中化できます。

cronは通常、単一のマシンに使用されますが、sshリモート呼び出しを行うことで「ハック」できます。ただし、依存関係などの概念はありません。範囲がさらに制限されている運用チームに関しては、ツールを使用することが最善です。


あなたの勧告は、この...に私を導いたen.wikipedia.org/wiki/Job_scheduler今までそのようなツールのためにこの名前を言及していない驚くべきことに、誰も- 。これは、私が探していることを実行するように設計されているかのように、私が探していたものかもしれません。ただし、それを確認するには調査が必要です。
smp7d
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.