简介
下面以wordpress博客系统为例,来构建基于Jenkins + OOS+OSS的镜像更新。
- wordpress github地址。
- OOS 运维编排服务,阿里云的自动化运维服务,用于管理软件版本和分批发布。
- OSS 对象存储, 用于存储构建的软件包。
- Jenkins 自动化构建,并触发更新OSS和OOS的软件包。
- ROS 资源编排服务,阿里云提供的云资源的自动化部署服务,可以帮忙您一键部署系统所依赖的云资源(ECS,RDS,SLB等)。
WordPress服务器准备
此处展示通过ROS创建了一套包含ECS和RDS的WordPress环境。
- 登录ROS(资源编排)控制台。
- 单击模板示例>模板。
- 单击基于ECS和RDS创建WordPress环境。
- 单击创建资源栈。
- 输入密码和实例类型等相关参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。
- 其中输出的WordPressUrl值是单机版wordpress地址,通过浏览器访问可以看到网站已经部署好。
创建并配置Jenkins资源
此处展示通过ROS快速创建一台安装有Jenkins的ECS实例,并完成配置,本示例所用操作系统为Aliyun Linux。
- 登录ROS(资源编排)控制台。
- 单击模板示例>模板。
- 单击Jenkins 单机版(已有VPC)。
- 单击创建资源栈。
- 输入参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。
- 打开本机浏览器,访问资源输出的JenkinsUrl ,形如http://39...168:8080。
- 复制资源输出的InitialAdminPassword,将其填入管理员密码,单击继续。
- 选择安装推荐的插件。
- 设置用户名和密码后登录。
确认Git安装情况
- 连接到Jenkins实例,确认Git安装情况。
git --version
- 若提示git未安装,请通过如下命令安装。
yum install git -y
- 确认安装成功后,进行后续步骤。
安装并配置Aliyun Cli
- 参考授予实例RAM角色,为上文创建的Jenkins实例授予RAM角色。
- 确定实例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
更新镜像
- 单击新建Item。
- 输入一个任务名称,并选择Freestyle project,单击确定。
- 单击源码管理,选择Git,并配置Repository URL,本示例填写如下URL
https://github.com/WordPress/WordPress.git
。 - 单击构建,单击增加构建步骤,添加执行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}"
- 单击保存。
- 配置好后单击立即构建触发部署流程,然后单击Build History可查看部署情况。
- 在Console Output里我们可以看到本次部署的日志,整个过程包括从git拉取代码,执行tar打包,将包拷贝到OSS上,以及在OOS上创建(更新)一个名为wordpress的软件包,软件包在OOS控制台我的软件(注意切换地域)可查看到,最后执行OOS的公共模版ACS-ECS-UpdateImage,生成安装了最新应用代码的镜像。
- 点击详情可查看软件的详情,包名、存储位置、安装脚本、卸载脚本,以及历史版本。
- 单击执行管理可以查看到jenkins触发的镜像更新,若此时使用生成的镜像创建实例,则可发现实例内/var/www/html/文件夹的数据已在更新镜像时完成更新。