2012-10-02 13 views
6

Potrzebuję stworzyć chmurę agentów Jenkins, która działa pod Windows VM na Amazon EC2.Chmura agentów Jenkins Amazon EC2 - niewolnicy Windows

Moim zdaniem tego jest prosty scenariusz:

Mam kilka wstępnie konfiguruje Amis, każdy z VM mieć konkretnego środowiska, które pasuje do jednego z moich projektów. Mam kilka projektów do zbudowania wystarczająco często, aby utrzymać maszynę wirtualną. Ale niektóre kompilacje będą się uruchamiać co tydzień, inne zaś ... Jenkins powinien móc automatycznie uruchamiać maszynę wirtualną, gdy projekt ma zostać zbudowany i zakończyć maszynę wirtualną po zakończeniu kompilacji. Mam kilka projektów BCB i wiele projektów .NET, Windows jako niewolnik VM OS jest absolutnie niezbędny.

Przygotowanie wstępnie skonfigurowanego AMI, w którym Jenkins slave jest zainstalowany i skonfigurowany, nie stanowi problemu. Ale nie mam pojęcia, jak zarządzać takimi maszynami wirtualnymi podrzędnymi od master (je uruchomić/zakończyć)

Znalazłem wtyczkę Amazon EC2, która może być używana do uruchamiania i zamykania maszyn wirtualnych. Ale próbuje także zainstalować i uruchomić tam slave. Niestety, niewolniki Windows nie są jeszcze obsługiwane. Czy istnieje sposób użycia wstępnie skonfigurowanych AMI lub umożliwienia agentowi Amazon EC2 zainstalowania wtyczki na Windows VM?

Próbowałem również użyć TeamCity - może uruchomić wstępnie skonfigurowane okno AMI i budować tam projekty (dokładnie mój scenariusz). Ale potrzebuję zbyt wielu maszyn wirtualnych, a mój szef nie jest gotowy zapłacić za licencje (3 bezpłatne licencje to za mało).

Czy mogę używać Jenkinsa do mojego scenariusza? Czy to jakieś inne alternatywy?

+0

Z jakiego rozwiązania skorzystałeś? – Zac

+0

Używamy Scripted Cloud Plugin [link] (https://wiki.jenkins-ci.org/display/JENKINS/Scripted+Cloud+plugin) –

Odpowiedz

0

boto.ec2 może być doskonale używany do uruchamiania/zatrzymywania/kończenia instancji w ruchu.

Używam skryptu do tego. Oto fragment tego, co mogę udostępnić. Nie mogę podzielić się niektórymi częściami. Dziękuję za zrozumienie.

#!/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()