使用API结合Jenkins一键创建云服务器

简介: 每次创建服务器都需要一步一步点,比较麻烦,本文介绍如何使用API接口配合Jenkins来创建服务器,提升开发运维效率。

每次创建服务器都需要一步一步点,比较麻烦,本文介绍如何使用API接口配合Jenkins来创建服务器,提升开发运维效率。

作者:张** 电商行业运维

使用python脚本创建服务器

一共调用两个API,一个创建服务器,然后根据创建好的服务器的ID,去启动服务器

前提准备

1.交换机,安全组需要提前创好,并记录ID。注意交换机的可用区是什么,脚本要写交换机所在的可用区

2.使用镜像创建,镜像ID需要记下来

3.需要在选择的可用区下,提前查看有没有相关规格服务器,没有会报错

脚本内容

# !/usr/bin/env python
# coding=utf-8

'''
为了能新增服务器方便,进行API创建服务器
注意 使用前需要先安装sdk
pip install aliyun-python-sdk-ecs==4.24.17(ecsc)
(如果是python3 就用pip3)
1.使用镜像创建ecs
2.根据前面创建好生成的id来启动服务器(刚创建好默认是关机状态)


'''
import json
import sys
from time import sleep
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkecs.request.v20140526.CreateInstanceRequest import CreateInstanceRequest
from aliyunsdkecs.request.v20140526.StartInstanceRequest import StartInstanceRequest


#1.使用镜像创建ecs
def createcs():
    credentials = AccessKeyCredential(access_key_id, access_key_secret)
# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
    client = AcsClient(region_id='cn-hangzhou', credential=credentials)

    request = CreateInstanceRequest()
    request.set_accept_format('json')
    #是否自动续费
    request.set_AutoRenew(True)
    #是否使用镜像预设密码
    request.set_PasswordInherit(True)
    #实例资源规格
    request.set_InstanceType(InstanceType)
    #镜像id
    request.set_ImageId(ImageId)
    #安全组
    request.set_SecurityGroupId(SecurityGroupId)
    #服务器名字和实例名
    request.set_InstanceName(Name)
    request.set_HostName(Name)
    #可用区
    request.set_ZoneId(ZoneId)
    #交换机id
    request.set_VSwitchId(VSwitchId)
    #内网ip
    request.set_PrivateIpAddress(ip)
    #实例付费方式
    request.set_InstanceChargeType(InstanceChargeType)
    #如果包年包月,选择购买时间,默认为月,如果按量请注释掉
    #request.set_Period(Period)
    response = client.do_action_with_exception(request)
    # python2:  print(response) 
    #转成json格式
    response = json.loads(response)
    instanceId = response["InstanceId"]
    return instanceId


#2.启动(刚创建好默认是关机状态)
def run():
    credentials = AccessKeyCredential(access_key_id, access_key_secret)
    # use STS Token
    # credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
    client = AcsClient(region_id='cn-hangzhou', credential=credentials)

    request = StartInstanceRequest()
    request.set_accept_format('json')

    request.set_InstanceId(instanceId)

    response = client.do_action_with_exception(request)
    # python2:  print(response) 
    print(str(response, encoding='utf-8'))

if __name__ == '__main__':


    # 定义阿里云key(创建ecs使用key)
    access_key_id = "aaa"
    access_key_secret = "bbb"

    #地域
    region_id = "ch-hangzhou"

    #镜像id,准备好的初始镜像id,可以在控制台镜像处看到文中使用的是公共镜像centos7.5
    ImageId = "centos_7_5_x64_20G_alibase_20211130.vhd"

    #可用区id,默认为g区(看交换机可用区),一般不动,先固定值吧
    ZoneId = "cn-hangzhou-g"
    #付费方式 PrePaid包年包月 PostPaid按量
    #测试的话可以按量使用
    InstanceChargeType = "PostPaid"
    #默认付费方式是按月付费,所以这个地方只选1,就是购买一个月,注意按量的话就注释掉这个参数
    #Period = 1
    #实例名称,读取输入,由于有5个必填参数,所以这边设置获取的长度少于6就相当于有参数没有输入,直接退出
    #sys.argv[0]是当前所执行的脚本,并且输入什么就是什么,输入test.py就是test.py,输入./test.py就是./test.py
    if len(sys.argv) < 6:
        print('信息不足,退出')
        sys.exit()
    else:
        #实例名称和服务器name使用同一个输入
        Name = sys.argv[1]
        #指定内网ip,要不冲突
        ip = sys.argv[2]
        #实例规格,选项,可以自己找常用的
        '''
        4核16g ecs.g5.xlarge
        8核16g ecs.c5.2xlarge
        4核8g ecs.c5.xlarge
        2核4g ecs.c5.large
        '''
        InstanceType = sys.argv[3]


        #安全组,选项,根据自己不同的安全组去设定,如果只有一个安全组也可以写成默认的
        '''
        默认安全组id sg-bp16uggk8lf3xmxacfu8
        其他安全组id sg-bp17cxmmtvxo1hv5vgm0
        '''
        SecurityGroupId = sys.argv[4]
        #交换机id 选项
        '''
        交换机id 
        192.168.2.0/24  vsw-bp1ugmfg1zny1arrzzm7v 
        192.168.1.0/24  vsw-bp189xghw2j2aiwzqx3q3
        192.168.3.0/24  vsw-bp12d27654xu002fzn5aq
        先写常用的,待补充
        '''
        VSwitchId = sys.argv[5]
        instanceId = createcs()
        #创建完等待几秒在启动,防止启动时资源还未找到
        sleep(5)
        run()

其实挺简单的,将一些参数填进去,剩下的用默认的

不过参数有5个,每次自己输入很麻烦,结合Jenkins去弄

Jenkins配置参数选项

image.png image.png image.png

使用了2个文本参数,和三个选项参数

都是必填

命令行配置

image.png
#执行构建脚本,$1:服务器名字,$2:ip ,$3:实例规格,$4:安全组,$5:局域网id
python3 /root/jenkins_script/ecs/createcs.py   ${Name} ${ip} ${InstanceType} ${SecurityGroupId} ${VSwitchId}

在启动服务器后也可以自己执行一些命令和自定义设置,可以自己定义

最后效果

image.png

填写相关信息就可以构建了

如果信息少了,会直接退出

# python3 /root/jenkins_script/ecs/test.py test 192.168.3.122 ecs.c5.xlarge sg-bp16uggk8lf3xmxacfu8 
信息不足,退出

信息对的情况下,正常创建并启动

image.png

在控制台上就可以看到,服务器创建成功了

image.png

里面的信息和上面传输的一致

image.png

创建成功

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
195 0
|
1月前
|
JSON JavaScript 前端开发
使用 Node.js 和 Express 构建 RESTful API 服务器
【10月更文挑战第3天】使用 Node.js 和 Express 构建 RESTful API 服务器
|
22天前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
15 0
|
3月前
|
运维 jenkins Linux
【Jenkins稳定运维】服务器频繁崩溃?资深管理员的应对策略
本文分享了作者作为管理员在面对服务器频繁崩溃时的应对策略,包括使用Shell脚本优化运维工作、学习Jenkins Pipeline插件以及一些运维技能扩展,强调了在运维工作中不断学习和实践的重要性。
51 0
【Jenkins稳定运维】服务器频繁崩溃?资深管理员的应对策略
|
3月前
|
缓存 测试技术 API
从零到一:构建高效的 RESTful API 服务器
在当今的软件开发环境中,RESTful API 是实现系统间数据交互的关键组件。本文探讨了如何从头开始构建一个高效的 RESTful API 服务器,包括技术选型、架构设计、性能优化等方面的内容。我们将以 Python 的 Flask 框架为例,展示如何设计一个可扩展且高性能的 API 服务器,并提供实际代码示例来说明最佳实践。
|
3月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
145 0
|
3月前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
|
5月前
|
安全 jenkins Java
Java一分钟之-Jenkins持续集成服务器
【6月更文挑战第5天】Jenkins是Java开发中的关键工具,用于自动化构建、测试和部署,确保CI/CD。本文概述了Jenkins常见问题及解决方案:安装时注意依赖和网络;谨慎选择并更新插件;正确配置SCM触发器;使用Declarative Pipeline定义清晰的Jenkinsfile;集成JaCoCo和SonarQube确保质量;采用蓝绿部署等策略避免直接在生产环境部署未经验证的代码。理解并解决这些问题能提升Jenkins的效率和可靠性。
51 3
|
4月前
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
6月前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
47 0

热门文章

最新文章