基于Jenkins+OOS+OSS的自动化部署

通过Jenkins、OOS、OSS快速实现自动化部署。

本文以WordPress博客系统为例,来构建基于Jenkins + OOS + OSS的自动化部署最佳实践,示例涉及如下产品。

  • wordpress github地址

  • OOS 系统运维管理,阿里云的自动化运维服务,用于管理软件版本和分批发布。

  • OSS 对象存储, 用于存储构建的软件包。

  • Jenkins 自动化构建,并触发更新OSS和OOS的软件包。

  • ROS 资源编排服务,阿里云提供的云资源的自动化部署服务,可以帮您一键部署系统所依赖的云资源(ECS,RDS,SLB等)。

环境准备

WordPress云上服务器

如下步骤为通过ROS,创建了一套包含ECS和RDS的WordPress环境。

  1. 登录ROS(资源编排)控制台

  2. 单击模板->模板示例->基于ECS和RDS创建WordPress环境->创建资源栈image

  3. 输入密码和实例类型等相关参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。

    1

  4. 其中输出的WordPressUrl值是单机版WordPress地址,通过浏览器访问可以看到网站已经部署好。

2

安装并配置阿里云CLI

本文以Mac-os为例。

  1. 首先为阿里云CLI创建一个RAM用户来获取AK,详细操作请参考创建RAM用户。

  2. 安装阿里云CLI。

    brew install aliyun-cli

  3. 配置CLI。

    aliyun configure

  4. 验证CLI可用,若可用,可在终端看到输出当前支持的多个地域。

aliyun ecs DescribeRegions

安装并配置Jenkins

本文示例为Mac-OS,其他系统可参考Jenkins安装

  1. 安装最新版本

    brew install jenkins

  2. 安装 LTS 版本

    brew install jenkins-lts

  3. 启动Jinkens

    brew services start jenkins-lts

  4. 在本机浏览器打开localhost:8080。

  5. 根据提供的目录复制并填入密码,单击继续。

    3

  6. 安装插件,选择默认插件。

    4

  7. 设置用户名和密码后登录。

Jenkins更新应用包

  1. 单击Newitems。

  2. 选择Freestyle project 并输入项目名

  3. 单击Source Code Managerment,选择Git地址并配置。

    https://github.com/WordPress/WordPress.git

  4. Build内选择Add build step,添加Execute Shell步骤,配置Command贴入如下脚本,脚本功能(将wordpress master的数据打包并拷贝到oss://wordpress-test-oos路径下,然后在OOS创建名为wordpress的软件包。)

    version=`date +%s`
    # 打包命令
    tar -cvf wordpress_$version.tar `find .|grep -v wp-config-sample.php|grep -v targets|grep -v .git|grep -v ^\.$`
    # 拷贝到OSS上
    /usr/local/bin/aliyun oss cp wordpress_$version.tar oss://wordpress-test-oos/wordpress_$version.tar
    templateName=wordpress
    # templateContent指定Location地址,并配置安装时候执行的脚本
    # {
    #   "FormatVersion": "OOS-2020-01-01-Package",
    #   "Description": "",
    #   "Packages": [{
    #       "Name": "wordpress_$version.tar",
    #       "Location": "oss://wordpress-test-oos/wordpress_$version.tar",
    #       "InstallScript": "test -e wordpress || mkdir wordpress && cd wordpress && mv ../wordpress_$version.tar . && tar xvf wordpress_$version.tar > /dev/null && rm wordpress_$version.tar && cp -rf * /var/www/html/",
    #       "UninstallScript": "echo uninstall",
    #       "Targets": [{
    #           "PlatForm": "centos",
    #           "Architect": "x86_64"
    #       }]
    #   }]
    # }
    templateContent="{\"FormatVersion\":\"OOS-2020-01-01-Package\",\"Description\":\"\",\"Packages\":[{\"Name\":\"wordpress_$version.tar\",\"Location\":\"oss://wordpress-test-oos/wordpress_$version.tar\",\"InstallScript\":\"test -e wordpress || mkdir wordpress && cd wordpress && mv ../wordpress_$version.tar . && tar xvf wordpress_$version.tar > /dev/null && rm wordpress_$version.tar && cp -rf * /var/www/html/\",\"UninstallScript\":\"echo uninstall\",\"Targets\":[{\"PlatForm\":\"centos\",\"Architect\":\"x86_64\"}]}]}"
    # 更新OOS上的软件包
    /usr/local/bin/aliyun oos CreateTemplate --TemplateName=$templateName --Content "$templateContent" || /usr/local/bin/aliyun oos UpdateTemplate --TemplateName=$templateName --Content "$templateContent"
    # 清理打包临时文件
    rm wordpress_$version.tar

  5. 单击Save。

  6. 配置好后单击Build Now触发部署流程,然后单击Build History可查看部署情况。

    5

  7. 在Console Output里我们可以看到本次部署的日志,整个过程包括从Git拉取代码,执行tar打包,将包拷贝到OSS上,以及在OOS上创建(更新)一个名为wordpress的软件包,软件包在OOS控制台我的软件(注意切换地域)可查看到。

    6

  8. 单击详情可查看软件的详情,包名、存储位置、安装脚本、卸载脚本,以及历史版本。

7

OOS部署软件

  1. 登录OOS控制台,单击常用运维任务->批量管理软件>创建>WordPress一键安装,单击安装软件,选择要安装在的目标实例(本示例选择上文ROS创建得到的实例id)。

    image

  2. 我们发现选择实例按钮是灰色的,这个时候需要给实例配置一个角色,OOS会使用这个角色来获取软件包信息以及下载OSS的权限,单击授权。

    9

    13

  3. 这时候我们跳到了添加角色的界面。

    • 若有已准备好的RAM角色(应被授予AliyunOOSReadOnlyAccess及AliyunOSSReadOnlyAccess的系统权限,且信任服务为ECS云服务器),单击执行,执行列表里可以看到执行成功。

    • 如果没有准备好的角色,参照如下步骤,创建角色。

      1. 登录RAM控制台,单击创建角色,受信服务选择云服务器。

      2. 为新建角色授予AliyunOOSReadOnlyAccess和AliyunOSSReadOnlyAccess。

        10

      3. 回到为批量操作实例-实例操作-添加角色,完成实例的角色授予。

  4. 实例配置好角色后,回到我的软件执行安装软件,选择已授予instanceRole的实例,配置完后,单击立即执行。

    11

  5. 最后我们看到执行结果成功了,并且机器上的wordpress /var/www/html里的内容也变成了最新的,在执行详情可查看具体信息。12

总结

以上我们完成了基于OOS+Jenkins的CICD流程,通过OOS我的软件功能,可以进行软件版本的管理和应用分批部署,在Jenkins中,也支持设置为直接调用OOS我的软件自动安装,以此来完成部署的全自动化,后续我们还将介绍如何用OOS+Jenkins自动更新镜像。