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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 每次创建服务器都需要一步一步点,比较麻烦,本文介绍如何使用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

创建成功

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
弹性计算 关系型数据库 API
ECS安装问题之安装资源编排服务(ROS)如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
3月前
|
Ubuntu 应用服务中间件 API
将网易云API通过宝塔布署到云服务器
将网易云API通过宝塔布署到云服务器
|
前端开发 API
WordPress建站教程:如何使用插件管理 WordPress Heartbeat API
WordPress Heartbeat API 已经存在了将近十年。它提供了 WordPress 仪表板和主机服务器之间的无缝实时通信。Heartbeat API 内置于 WordPress 核心,提供强大的功能,可以显着改善网站管理体验。
WordPress建站教程:如何使用插件管理 WordPress Heartbeat API
|
弹性计算 关系型数据库 MySQL
部署Javaweb项目到阿里云ECS服务器
部署Javaweb项目到使用阿里云ECS服务器的Tomcat上
738 2
部署Javaweb项目到阿里云ECS服务器
|
弹性计算 NoSQL Java
|
弹性计算 运维 jenkins
Flow vs Jenkins 实操对比,如何将Java应用快速发布至ECS
Jenkins 由于其开源特性以及丰富插件能力,长久以来都是中小企业搭建 CICD 流程的首选。不过 Jenkins 存在维护成本高、配置复杂等缺点,云效 Flow 较好地解决了这些问题。 本文从一个 Java 应用部署到云服务器(ECS)的场景切入,对比使用阿里云云效流水线 Flow 和 Jenkins 两种构建部署方式,供大家选型参考。
1830 1
Flow vs Jenkins 实操对比,如何将Java应用快速发布至ECS
|
弹性计算 运维 Java
Java应用构建并部署ECS
如果你 使用Java进行开发 使用Jar/War的制品形式进行交付 制品最终会运行在ECS或者自有主机上 那么本文档可以帮助您实现研发流程的协同自动化。 用户诉求 一般来说,用户使用主机部署场景如下: 对源代码进行一定的质量检测,比如单元测试,代码扫描 将源代码构建成为可交付的制品,比如Jar/War 对制品进行测试环境验证 使用完成验证的制品进行线上部署 上述活动需要有不同角色的参与:开发、测试、运维。如何保证不同参与者可以使用统一的交付流程来进行协作,是云效Flow交付流水线要解决的主要问题
Java应用构建并部署ECS
|
弹性计算 API
自己实现 ECS 购买页需要用到的 API
1. 查询可购买的地域 DescribeRegions 入参: 付费类型: instanceChargeType(选填),取值:PrePaid|PostPaid,分别代表 包年包月|按量付费 2.
1231 0
|
弹性计算 Ubuntu 应用服务中间件
在阿里云ECS上安装Docker、Tomcat并部署官网(无后端交互)
在阿里云ECS上安装Docker、Tomcat并部署官网(无后端交互)
3950 0
|
Web App开发 应用服务中间件 数据库
如何在云服务器上部署你的web项目和一些常见问题
第一次写博客,写的不好的地方请见谅。 1、首先你的云服务器一定要打开 2、然后远程桌面连接你的云服务器(它就像是一台电脑一样)通过给你的外网ip地址连接,密码如果给你了的话你就用给你的密码登录,如果没有给密码就重置密码(这个可以在你的云服务器的管理中心里面弄),我的是百度云的,找不到重置密码的可以看图: 3、服务器连接上之后你会发现里面什么都没有,就是一台新的电脑,既然想让它运行web项目那你首先就需要搭建好项目需要运行的环境。
2447 0