本文展示如何基于Jenkins+OOS+OSS构建自动镜像更新流程。
简介
下面以WordPress博客系统为例,来构建基于Jenkins + OOS+OSS的镜像更新。
WordPress github地址。
OOS 系统运维管理 OOS(CloudOps Orchestration Service),阿里云的自动化运维服务,用于管理软件版本和分批发布。
OSS 对象存储, 用于存储构建的软件包。
Jenkins 自动化构建,并触发更新OSS和OOS的软件包。
ROS 资源编排服务,阿里云提供的云资源的自动化部署服务,可以帮您一键部署系统所依赖的云资源(ECS,RDS,SLB等)。
WordPress服务器准备
此处展示通过ROS创建了一套包含ECS和RDS的WordPress环境。
登录ROS(资源编排)控制台。
单击
。单击创建资源栈。
输入密码和实例类型等相关参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。
其中输出的WordPressUrl值是单机版WordPress地址,通过浏览器访问可以看到网站已经部署好。
创建并配置Jenkins资源
此处展示通过ROS快速创建一台安装有Jenkins的ECS实例,并完成配置,本示例所用操作系统为Aliyun Linux。
登录ROS(资源编排)控制台。
单击
。单击创建资源栈。
输入参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。
打开本机浏览器,访问资源输出的JenkinsUrl,形如http://39.**.**.168:8080。
复制资源输出的InitialAdminPassword,将其填入管理员密码,单击继续。
选择安装推荐的插件。
设置用户名和密码后登录。
确认Git安装情况
连接到Jenkins实例,确认Git安装情况。
git --version
如果未安装执行以下命令安装:
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/文件夹的数据已在更新镜像时完成更新。