基于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. 单击模板示例>模板。
  3. 单击基于ECS和RDS创建WordPress环境
  4. 单击创建资源栈。
  5. 输入密码和实例类型等相关参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。基于Jenkins+OOS+OSS的镜像自动更新
  6. 其中输出的WordPressUrl值是单机版wordpress地址,通过浏览器访问可以看到网站已经部署好。
    基于Jenkins+OOS+OSS的镜像自动更新

创建并配置Jenkins资源

此处展示通过ROS快速创建一台安装有Jenkins的ECS实例,并完成配置,本示例所用操作系统为Aliyun Linux。

  1. 登录ROS(资源编排)控制台
  2. 单击模板示例>模板。
  3. 单击Jenkins 单机版(已有VPC)
  4. 单击创建资源栈。
  5. 输入参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。
    基于Jenkins+OOS+OSS的镜像自动更新
  6. 打开本机浏览器,访问资源输出的JenkinsUrl ,形如http://39...168:8080
  7. 复制资源输出的InitialAdminPassword,将其填入管理员密码,单击继续。基于Jenkins+OOS+OSS的镜像自动更新
  8. 选择安装推荐的插件。
  9. 设置用户名和密码后登录。基于Jenkins+OOS+OSS的镜像自动更新

确认Git安装情况

  1. 连接到Jenkins实例,确认Git安装情况。
git --version 
  1. 若提示git未安装,请通过如下命令安装。
yum install git -y
  1. 确认安装成功后,进行后续步骤。

安装并配置Aliyun Cli

  1. 参考授予实例RAM角色,为上文创建的Jenkins实例授予RAM角色。
  2. 确定实例RAM角色授予成功后,连接到Jenkins实例,为jenkins实例安装配置ALiyun Cli,相关命令如下。
mkdir -p  $HOME/aliyun
cd $HOME/aliyun
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-3.0.51-amd64.tgz
tar xzvf aliyun-cli-linux-3.0.51-amd64.tgz
sudo cp $HOME/aliyun/aliyun /usr/local/bin

更新镜像

  1. 单击新建Item。
  2. 输入一个任务名称,并选择Freestyle project,单击确定。
  3. 单击源码管理,选择Git,并配置Repository URL,本示例填写如下URL https://github.com/WordPress/WordPress.git基于Jenkins+OOS+OSS的镜像自动更新
  4. 单击构建,单击增加构建步骤,添加执行Shell步骤,配置命令,填入如下脚本,脚本功能(将wordpress master的数据打包并拷贝到oss://wordpress-test-oos路径下,然后在OOS内创建名为wordpress的软件包,接着通过OOS执行更新镜像)。
# 制作包
version=`date +%s`

# 打包命令
tar -cvf wordpress_$version.tar `find .|grep -v wp-config-sample.php|grep -v targets|grep -v .git|grep -v ^\.$`

#授权aliyun权限
# 注意请将ramRoleName设为已授予jenkins所在实例的RAM角色,本示例使用的是InstanceRole。
ramRoleName="InstanceRole"
aliyun configure set --profile ecsRamRoleProfile --mode EcsRamRole --region cn-zhangjiakou --ram-role-name $ramRoleName

# 拷贝到OSS上
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_1594290375.tar . && tar xvf wordpress_1594290375.tar > /dev/null && rm wordpress_1594290375.tar &&  test -d  /var/www/html/ &&  cp -rf * /var/www/html/  || mkdir -p  /var/www/html && 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 && test -d /var/www/html/ &&  cp -rf * /var/www/html/  || mkdir -p /var/www/html && cp -rf * /var/www/html \",\"UninstallScript\":\"echo uninstall\",\"Targets\":[{\"PlatForm\":\"centos\",\"Architect\":\"x86_64\"}]}]}"

# 更新/创建 OOS上的软件包
aliyun oos CreateTemplate --TemplateName=$templateName --Content "$templateContent" || aliyun oos UpdateTemplate --TemplateName=$templateName --Content "$templateContent"
# 清理打包临时文件
rm wordpress_$version.tar

# OOS执行更新镜像
# 设置更新镜像模版执行所需的参数 参数介绍可参考https://oos.console.aliyun.com/cn-zhangjiakou/execution/create/ACS-ECS-UpdateImage
regionId="cn-zhangjiakou"  # 资源执行的地域
ramRoleName="InstanceRole"  # 将授予给临时实例的Ram Role
securityGroupId="sg-8vb9b*****wvnuqy6" # 请准备安全组参数用于创建临时实例
vSwitchId="vsw-8vb5p1******zv01c" # 请准备交换机参数用于创建临时实例
instanceType="ecs.g5.large" # 临时实例的实例规格

sourceImageId="centos_7_8_x64_20G_alibase_20200622.vhd" #要更新的源镜像

commandType="RunShellScript"  # 脚本类型

##commandContent脚本的内容如下
#version=v1.0.3
#utilPath=/usr/local/share/aliyun-oosutil
#binaryPath=/usr/local/share/aliyun-oosutil/$version
#test -e $binaryPath || mkdir -p $binaryPath
#test -e $binaryPath/oosutil_linux || wget "https://oos-public-cn-zhangjiakou.oss-cn-zhangjiakou-internal.aliyuncs.com/oosutil/$version/linux/oosutil_linux" -O $binaryPath/oosutil_linux -q
#chmod +x $binaryPath/oosutil_linux
#$binaryPath/oosutil_linux configure_package install wordpress
# 用于安装我的软件wordpress的脚本
commandContent='version=v1.0.3\nutilPath=/usr/local/share/aliyun-oosutil\nbinaryPath=/usr/local/share/aliyun-oosutil/$version\ntest -e $binaryPath || mkdir -p $binaryPath\ntest -e $binaryPath/oosutil_linux || wget \"https://oos-public-cn-zhangjiakou.oss-cn-zhangjiakou-internal.aliyuncs.com/oosutil/$version/linux/oosutil_linux\" -O $binaryPath/oosutil_linux -q\nchmod +x $binaryPath/oosutil_linux\n$binaryPath/oosutil_linux configure_package install wordpress\n'
parameters="{
  \"securityGroupId\": \"$securityGroupId\",
  \"commandType\": \"$commandType\",
  \"sourceImageId\": \"$sourceImageId\",
  \"regionId\": \"$regionId\",
  \"vSwitchId\": \"$vSwitchId\",
  \"instanceType\": \"$instanceType\",
  \"commandContent\": \"$commandContent\",
  \"ramRoleName\": \"$ramRoleName\"
}"

aliyun oos StartExecution --TemplateName ACS-ECS-UpdateImage --Parameters "${parameters}"
  1. 单击保存。
  2. 配置好后单击立即构建触发部署流程,然后单击Build History可查看部署情况。基于Jenkins+OOS+OSS的镜像自动更新
  3. 在Console Output里我们可以看到本次部署的日志,整个过程包括从git拉取代码,执行tar打包,将包拷贝到OSS上,以及在OOS上创建(更新)一个名为wordpress的软件包,软件包在OOS控制台我的软件(注意切换地域)可查看到,最后执行OOS的公共模版ACS-ECS-UpdateImage,生成安装了最新应用代码的镜像。基于Jenkins+OOS+OSS的镜像自动更新
  4. 点击详情可查看软件的详情,包名、存储位置、安装脚本、卸载脚本,以及历史版本。基于Jenkins+OOS+OSS的镜像自动更新
  5. 单击执行管理可以查看到jenkins触发的镜像更新,若此时使用生成的镜像创建实例,则可发现实例内/var/www/html/文件夹的数据已在更新镜像时完成更新。基于Jenkins+OOS+OSS的镜像自动更新
上一篇:SP.NET 进阶】获取MP3文件信息并显示专辑图片


下一篇:运维编排服务系列-----自动启动意外停止的ECS实例