首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins和AWS interaction需要帮助

Jenkins和AWS interaction需要帮助
EN

Stack Overflow用户
提问于 2018-01-30 07:09:26
回答 1查看 27关注 0票数 0

我正在尝试让jenkins从以前的快照自动构建一个新的ec2实例。因此,从本质上讲,我希望Jenkins能够从我的快照创建一个新卷,然后将该卷附加到一个实例并引导它。这可能吗??我花了几天时间搜索所有CI页面,但无法将其拼凑在一起来完成我想要的操作

EN

回答 1

Stack Overflow用户

发布于 2018-01-31 08:02:14

我的方法是首先从快照创建一个卷,然后创建一个实例,然后将该卷附加到该实例。如下所示:

代码语言:javascript
复制
# Create a volume from a snapshot:
def createVolume(snapshot_id=None, volume_type=None, volume_size=None, region=None, az=None):
    say('Creating volume...', banner="*")
    snapshot_arg = ' --snapshot-id {}'.format(snapshot_id)
    if snapshot_id is None:
        snapshot_arg = ''

    volume_size = '' if volume_size is None else ' --size ' + volume_size
    cmd = 'aws ec2 create-volume --region ' + region + \
          ' --availability-zone ' + az + ' ' + \
          snapshot_arg + \
          ' --volume-type ' + volume_type + volume_size
    output, returncode = run(cmd, hide_command=g_hide_command, debug=g_args.debug)
    volume_id = json.loads(output)['VolumeId']
    size = json.loads(output)['Size']
    while True:
        cmd = 'aws ec2 describe-volumes --volume-ids ' + str(volume_id)
        output, returncode = run(cmd, hide_command=g_hide_command, debug=g_args.debug)
        state = json.loads(output)['Volumes'][0]['State']
        if state == 'available':
            say('Volume has been created: ' + str(volume_id))
            break
        else:
            say('Current State: ' + str(state))
            time.sleep(15)
    cmd = 'aws ec2 create-tags --resources ' + str(volume_id) + ' --tags Key=Name,Value=jenkins-volume'
    output, returncode = run(cmd, hide_command=g_hide_command, debug=g_args.debug)
    return volume_id, size

创建新卷后,您可以创建实例并将该卷附加到实例:

代码语言:javascript
复制
new_instance = createInstance(ami_id=g_args.ami_id,
                              instance_type=g_args.instance_type,
                              target_env=g_args.target_env,
                              ssh_user=g_args.ssh_user,
                              id_rsa=g_args.id_rsa,
                              key_name='jenkins.cloud',
                              tags_dict=tags,
                              security_group_ids=g_env_map[g_args.target_env]['jenkins-sg'],
                              instance_profile=instance_profile,
                              subnet_id=subnet_id,
                              debug=g_args.debug)

# Attach volume to this instance (we reset the new_instance variable because the EBS vol has been attached):
new_instance = attacheVolume(volume_id=volume_id, instance_id=str(new_instance['InstanceId']), region=g_env_map[g_args.target_env]['region'])

我没有放入各种函数的内容,比如createInstance和attachVolume (以及"say“和"run"),但是你已经明白了要点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48511497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档