RPMおよびDEBパッケージでプロジェクトをビルドするには、Jenkinsを使用します。Jenkinsには特別なマシンが割り当てられています。
最初は、CentOS 6のみのプロジェクトをビルドしました。次に、CentOS 5のサポートが追加されました。特定のバージョンのライブラリによっては、同じバイナリがCentOSの異なるバージョンで動作しないため、異なるRPMをビルドする必要がありました。 これは、CentOS 5ノードをVirtualBox仮想マシンで使用されるjenkinsに追加することで決定されました。 次に、Suse、Debianのサポートを追加しました。
RAMの量はゴムではなく、アセンブリのみに仮想マシンを使用することは明らかなオーバーヘッドであり、 Dockerを使用してスクリプトを書き換えることが決定されました。
Jenkinsを使用して継続的な統合を行うと、ノードを必要なオペレーティングシステムに接続してタスクを割り当てることができます。いくつかのオプションがあります。
- インスタンス/コンピューターをレンタルし、ノードとして使用する
- 標準の仮想化を使用する(ハイパーバイザー)
- コンテナ(lxc、jailなど)
この場合、コンテナの仮想マシンに対する利点は明らかです(RAMは共有され、動的に変化し、仮想マシンとは異なり、多数のコンテナが発生してもシステムが遅くなることはありません)。
- プロジェクトをビルドするには、ビルドスクリプト自体が起動されますが、それ以上は実行されません。 一方、仮想マシンを使用すると、すべてのシステムプロセスとデーモンが起動され、ホストリソースが浪費されます。
- 多数の独立したマシンクローンの「安価な」作成-プロジェクトをビルドするためにアセンブリ環境が必要になる場合があります。
ジェンキンスノードとしてのDocker
ジェンキンスの奴隷には次のものが必要です。
- Java
- エントリポイント-ssh
- 組み立てツール
エントリポイントは、Dockerでプロセスを開始し、アセンブリセッション内でファイルシステムを保存するために必要です(LXCはinitプロセスを使用しますが、システム全体は役に立ちません)。 jenkinsは引き続きノードと通信するためにSSHを必要とするため、このデーモンがエントリポイントになります。
Dockerは、マシンを構築するために、マシンアセンブリ命令でDockerfileファイルを使用することを推奨しています。
このリポジトリ: https : //github.com/antigluk/docker-jenkins-slaveビルドルールが利用可能になりました
- CentOS 5
- CentOS 6
- スーズ12
- Debian 6
新しいシステムでのプルリクエストとスクリプトの修正は大歓迎です:)
組み立てと使用
DockerとJenkinsがインストールされていることを前提としています
1)JenkinsにSwarmプラグインをインストールします(APIを使用してスレーブをJenkinsに自動的に追加できます)
2)$ git clone git@github.com:antigluk / docker-jenkins-slave.git; cd docker-jenkins-slave 3)目的のシステムのルールフォルダーに移動します。 $ cd centos6 4)$ sudo bash build.sh
イメージを組み立てたら、このタイプのノードを好きなだけ追加できます。
sudo bash add_slave.sh SlaveName
このコマンドを実行すると、Jenkins-eに新しいノードが表示されます。
これで、新しいノードを使用するには、目的のタスクをアセンブルするためのタグに「docker-tagname」を指定するだけで十分です。タグ名はフルバージョンのシステムの名前です。タグのリストは、wikiの特別ページで表示できます