2012-10-02 20 views
6

मुझे जेनकिन्स एजेंट क्लाउड बनाने की आवश्यकता है जो अमेज़ॅन ईसी 2 पर विंडोज वीएम के तहत चलता है।जेनकींस अमेज़ॅन ईसी 2 एजेंट क्लाउड - विंडोज गुलाम

मैं के कुछ पूर्व कॉन्फ़िगर एमिस, वीएम से प्रत्येक जो अपनी परियोजनाओं में से एक से मेल खाता है विशिष्ट वातावरण है है:

इस का मेरा विचार सरल परिदृश्य है। वीएम चलने के लिए अक्सर पर्याप्त बनाने के लिए मेरे पास कुछ परियोजनाएं हैं। लेकिन कुछ बिल्ड साप्ताहिक चलाएंगे, अन्य लोग मौत से ... जेनकींस स्वचालित रूप से वीएम शुरू करने में सक्षम होना चाहिए जब परियोजना का निर्माण किया जाना चाहिए और निर्माण पूरा होने पर वीएम को समाप्त कर देना चाहिए। मेरे पास कई बीसीबी परियोजनाएं हैं और कई .NET परियोजनाएं हैं, विंडोज़ दास वीएम ओएस के रूप में बिल्कुल जरूरी है।

पूर्व-कॉन्फ़िगर किए गए एएमआई को तैयार करने में कोई समस्या नहीं है जहां जेनकिन्स गुलाम स्थापित और कॉन्फ़िगर किया गया है। लेकिन मुझे नहीं पता कि मास्टर से ऐसे दास वीएम को कैसे प्रबंधित करें (उन्हें चलाएं/समाप्त करें)

मुझे अमेज़ॅन ईसी 2 प्लगइन मिला जो वीएम को चलाने और समाप्त करने के लिए उपयोग किया जा सकता है। लेकिन यह वहां गुलाम स्थापित करने और चलाने की भी कोशिश करता है। दुर्भाग्यवश, विंडोज दास अभी तक समर्थित नहीं हैं। क्या पूर्व-कॉन्फ़िगर किए गए AMI का उपयोग करने या Windows VM पर अमेज़ॅन EC2 प्लगइन इंस्टॉल एजेंट का उपयोग करने का कोई तरीका है?

मैंने टीमसिटी का भी उपयोग करने की कोशिश की - यह पूर्व-कॉन्फ़िगर किए गए विंडोज एएमआई चला सकता है और वहां परियोजनाएं बना सकता है (सटीक मेरा परिदृश्य)। लेकिन मुझे बहुत से वीएम की जरूरत है और मेरा मालिक लाइसेंस के लिए भुगतान करने के लिए तैयार नहीं है (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()