基于Jenkins+OOS+OSS的镜像自动更新

本文涉及的产品
对象存储 OSS,20GB 3个月
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本文展示如何基于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. 输入密码和实例类型等相关参数,然后单击创建,等待片刻后,若环境创建成功,资源栈的输出结果样式如下。image.png
  6. 其中输出的WordPressUrl值是单机版wordpress地址,通过浏览器访问可以看到网站已经部署好。
    image.png

创建并配置Jenkins资源

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

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

确认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.gitimage.png
  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可查看部署情况。image.png
  3. 在Console Output里我们可以看到本次部署的日志,整个过程包括从git拉取代码,执行tar打包,将包拷贝到OSS上,以及在OOS上创建(更新)一个名为wordpress的软件包,软件包在OOS控制台我的软件(注意切换地域)可查看到,最后执行OOS的公共模版ACS-ECS-UpdateImage,生成安装了最新应用代码的镜像。image.png
  4. 点击详情可查看软件的详情,包名、存储位置、安装脚本、卸载脚本,以及历史版本。image.png
  5. 单击执行管理可以查看到jenkins触发的镜像更新,若此时使用生成的镜像创建实例,则可发现实例内/var/www/html/文件夹的数据已在更新镜像时完成更新。image.png
相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
存储 运维 NoSQL
通过OOS实现定时备份Redis实例转储到OSS
基于阿里云 Redis 备份功能,现结合 OOS 推出自动转储至 OSS 的新方案,解决了数据安全风险、运维繁琐、成本增加和效率低下等问题。新方案亮点包括: 1. 数据安全性提高:备份文件自动上传至OSS,利用OSS的数据冗余存储,保证数据在硬件故障时的持久性和可用性。 2. 完全自动化:设置好定时规则后,备份和转储过程无需人工干预。 3. 多实例多地域集中管理:支持一次选择多个实例和跨区域备份,简化管理。 4. 灵活的备份策略和成本控制:自定义备份频率,并通过OSS生命周期管理策略控制成本。 5. 监控和告警:集成OSS和云监控,实时掌握备份状态,及时处理异常。
131 0
|
5月前
|
Java jenkins 持续交付
jenkins构建jar包为镜像并上传到docker仓库
jenkins构建jar包为镜像并上传到docker仓库
124 0
|
7月前
|
对象存储
OSS镜像回源不支持HEAD请求吗
OSS镜像回源不支持HEAD请求吗
|
8月前
|
jenkins Java 持续交付
Docker常用镜像的构建脚本及jenkins手动触发镜像构建
Docker常用镜像的构建脚本及jenkins手动触发镜像构建
|
Java jenkins 持续交付
Jenkins使用pipeline自动打包Docker镜像
Jenkins使用pipeline自动打包Docker镜像
816 0
Jenkins使用pipeline自动打包Docker镜像
|
jenkins Java 持续交付
jenkins-CICD系列之-jenkins构建镜像并且推送到阿里云镜像仓库
jenkins构建镜像并且推送到阿里云镜像仓库
|
jenkins Java 持续交付
jenkins-CICD系列之-jenkins 打包maven项目并且构建镜像
使用jenkis 直接在本地机器上构建maven镜像
|
jenkins Java 程序员
Jenkins把GitHub项目做成Docker镜像
利用Jenkin的流水线脚本,从GitHub的私有仓库下载一个Java工程,将其编译构建成Docker镜像,然后推送到私有镜像仓库里
380 0
Jenkins把GitHub项目做成Docker镜像
|
监控 jenkins Java
Jenkins部署及使用(安装maven配置阿里云镜像、git工具)
Jenkins部署及使用(安装maven配置阿里云镜像、git工具)
Jenkins部署及使用(安装maven配置阿里云镜像、git工具)
|
jenkins 持续交付
jenkins 修改插件下载镜像
jenkins 修改插件下载镜像
707 0
jenkins 修改插件下载镜像