2012-10-02 17 views
6

Amazon EC2でWindows VM上で動作するJenkinsエージェントクラウドを作成する必要があります。このJenkins Amazon EC2エージェントクラウド - Windowsスレーブ

私の見解では、単純なシナリオです:

私は、事前に設定したAMIのいくつかを持っているVMのそれぞれが私のプロジェクトのいずれかに一致する特定の環境を持っています。 VMを稼働させておくために十分な頻度でビルドするプロジェクトはほとんどありません。しかし、いくつかのビルドは毎週実行され、他のビルドはmounthly ... Jenkinsは、プロジェクトがビルドされるときに自動的にVMを開始し、ビルドが完了したときにVMを終了することができるはずです。私はいくつかのBCBプロジェクトと多くの.NETプロジェクトを持っていますが、WindowsはスレーブVM OSが絶対に必要です。

Jenkinsのスレーブがインストールされ、構成されている事前に設定AMIを調製する問題ではありません。しかし、私はマスターから、このようなスレーブのVMを管理する方法は考え(それらを終了/実行)

を持っていない私は、VMを実行し、終了するために使用することができAmazon EC2のプラグインを見つけました。しかし、そこにスレーブをインストールして実行しようとします。残念ながら、Windowsスレーブはまだサポートされていません。 事前設定済みのAMIを使用する方法、またはAmazon EC2プラグインをWindows VMにインストールする方法はありますか?

は、私はまた、チームシティーを使用しようとした - それは、事前に設定されたWindows AMIを実行し、そこに(正確に私のシナリオを)プロジェクトをビルドすることができます。しかし、私はあまりにも多くの仮想マシンを必要と私の上司は、ライセンス(3つの自由ライセンスは十分ではありません)

それは私のシナリオでジェンキンスを使用することが可能ですために支払う準備ができていないのですか?それは他の選択肢ですか?

+0

あなたが一緒に行くどのような解決策を終了したのですか? – Zac

+0

スクリプトクラウドプラグイン[リンク](https://wiki.jenkins-ci.org/display/JENKINS/Scripted+Cloud+plugin)を使用しています。 –

答えて

0

boto.ec2は、外出先でインスタンスを開始/停止/終了するために完全に使用できます。

私はそのためにスクリプトを使用しています。 ここに私が共有できるものがあります。私はいくつかの部分を共有することはできません。理解していただきありがとうございます。

#!/usr/bin/python 
import boto.ec2 
import sys 
import time 

# specify AWS keys 
auth = {"aws_access_key_id": "YOUR_KEY", "aws_secret_access_key": "YOUR_SECRET_KEY"} 

def main(): 
    # read arguments from the command line and 
    # check whether at least two elements were entered 
    if len(sys.argv) < 2: 
     print "Usage: python aws.py {start|stop}\n" 
     sys.exit(0) 
    else: 
     action = sys.argv[1] 

    if action == "start": 
     startInstance() 
    elif action == "stop": 
     stopInstance() 
    else: 
     print "Usage: python aws.py {start|stop}\n" 

def startInstance(): 
    print "Starting the instance..." 

    # change "eu-west-1" region if different 
    try: 
     ec2 = boto.ec2.connect_to_region("eu-west-1", **auth) 

    except Exception, e1: 
     error1 = "Error1: %s" % str(e1) 
     print(error1) 
     sys.exit(0) 

    # change instance ID appropriately 
    try: 
     instances = ec2.start_instances(instance_ids="ID_INSTANCE TO START") 

     instances[0].update() 
     while instances[0].state != "running": 
      print instances[0].state 
      time.sleep(5) 
      instances[0].update() 

#this part manage the association of Elastic IP 
     ec2.associate_address("ID_INSTANCE","ELASTIC IP") 


    except Exception, e2: 
     error2 = "Error2: %s" % str(e2) 
     print(error2) 
     sys.exit(0) 

def stopInstance(): 
    print "Stopping the instance..." 

    try: 
     ec2 = boto.ec2.connect_to_region("eu-west-1", **auth) 

    except Exception, e1: 
     error1 = "Error1: %s" % str(e1) 
     print(error1) 
     sys.exit(0) 

    try: 
     ec2.stop_instances(instance_ids="INSTANCE_ID") 

     instances[0].update() 
     while instances[0].state != "stopped": 
      print instances[0], instances[0].state 
      time.sleep(5) 
      instance.update() 

     print "Instance stopped : " 

    except Exception, e2: 
     error2 = "Error2: %s" % str(e2) 
     print(error2) 
     sys.exit(0) 

if __name__ == '__main__': 
    main() 
関連する問題