gpt4 book ai didi

.net - Jenkins Amazon EC2 代理云 - Windows 从属

转载 作者:行者123 更新时间:2023-12-02 20:41:28 30 4
gpt4 key购买 nike

我需要创建在 Amazon EC2 上的 Windows VM 下运行的 Jenkins 代理云。

我对此的看法是简单的场景:

我有几个预配置的 AMI,每个虚拟机都有与我的项目之一匹配的特定环境。我几乎没有需要经常构建的项目来保持虚拟机运行。但有些构建将每周运行,另一些则每月运行...Jenkins 应该能够在项目构建时自动启动 VM,并在构建完成时终止 VM。我有几个BCB项目和许多.NET项目,Windows作为从VM操作系统是绝对必要的。

准备安装和配置 Jenkins 从属的预配置 AMI 不是问题。但我不知道如何从主服务器管理此类从属虚拟机(运行/终止它们)

我找到了可用于运行和终止虚拟机的 Amazon EC2 插件。但它也尝试在那里安装和运行从属设备。不幸的是,Windows 从站尚不支持。有没有办法使用预配置的 AMI 或让 Amazon EC2 插件在 Windows VM 上安装代理?

我也尝试使用 TeamCity - 它可以运行预配置的 Windows AMI 并在那里构建项目(正是我的场景)。但我需要太多虚拟机,而我的老板还没有准备好支付许可证费用(3 个免费许可证不够)

是否可以在我的场景中使用 Jenkins?还有其他选择吗?

最佳答案

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()

关于.net - Jenkins Amazon EC2 代理云 - Windows 从属,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692071/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com