7

AmazonEC2のWindowsVMで実行されるJenkinsエージェントクラウドを作成する必要があります。

これについての私の見解は単純なシナリオです。

事前構成されたAMIはほとんどありません。各VMには、私のプロジェクトの1つに一致する特定の環境があります。VMを実行し続けるのに十分な頻度でビルドするプロジェクトはほとんどありません。ただし、一部のビルドは毎週実行され、他のビルドは山ほど実行されます... Jenkinsは、プロジェクトのビルド時にVMを自動的に開始し、ビルドの完了時にVMを終了できる必要があります。私はいくつかのBCBプロジェクトと多くの.NETプロジェクトを持っていますが、スレーブVMOSとしてのWindowsは絶対に必要です。

Jenkinsスレーブがインストールおよび構成されている事前構成済みAMIを準備することは問題ではありません。しかし、マスターからそのようなスレーブVMを管理する方法(それらを実行/終了する)がわかりません

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

TeamCityも使用しようとしました。事前に構成されたWindowsAMIを実行し、そこでプロジェクトをビルドできます(私のシナリオとまったく同じです)。しかし、VMが多すぎて、上司がライセンスの支払いをする準備ができていません(3つの無料ライセンスでは不十分です)

シナリオにJenkinsを使用することは可能ですか?他の選択肢はありますか?

4

1 に答える 1

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()
于 2014-06-09T19:39:20.090 に答える