【转载】阿里云 CodePipeline 持续集成之发布静态网站到OSS

本文涉及的产品
对象存储 OSS,20GB 3个月
.cn 域名,1个 12个月
对象存储 OSS,内容安全 1000次 1年
简介: 本文转载自 阿里云CodePipeline客户“小草”的个人博客,Step By Step的呈现了从0配置一个nodejs 静态网站发布到OSS,并通过CDN回源加速的过程。

本文转载自 阿里云CodePipeline客户“小草”的个人博客,原文地址: http://www.forkjoin.org/2017/08-21-CodePipeline-ossweb/


现在流行前后端彻底分离,前端生成webpack 打包的静态文件。可以通过 CodePipeline构建后发布到oss 进行发布前端。下面进行详细讲解

第一步 申请开通 CodePipeline

CodePipeline 地址

第二步 创建CodePipeline任务

1. 创建一个nodejs任务

image

2. 详细设置

如下图,配置好git仓库和账号,以及分支

image

配置项目构建命令,比如我的项目修改成

npm i
npm run deploy:test

image

3. 部署方式 选择不需要部署

image

第三步 准备oss

1. 新建 Bucket 选择标准存储,权限配置成公共读

下面测试都默认 bucket 名字为 test-weiapp-web

2. 配置访问控制 RAM

配置ram账号权限给构建使用,一定要配置好ram 权限。理由如下

  • 防止误删除了其他 bucket 的文件等
  • ossutil 工具太危险!!!
  • 安全

3. 创建策略

在访问控制界面选择 > 策略管理 > 新建授权策略 > 选择空白模板 > 输入策略 > 创建成果

策略配置参考如下:

{
  "Statement": [
    {
      "Action": [
        "oss:GetBucketAcl",
        "oss:GetObject",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:AbortMultipartUpload",
        "oss:ListObjects",
        "oss:ListParts"
      ],
      "Resource": [
        "acs:oss:oss-cn-beijing:*:test-weiapp-web",
        "acs:oss:oss-cn-beijing:*:test-weiapp-web/*"
      ],
      "Effect": "Allow"
    }
  ],
  "Version": "1"
}

Resource的详细格式是 acs:oss:{region}:{bucket_owner}:{bucket_name}/{object_name}

注意: bucket_name 是oss-cn-beijing,而且不是cn-beijing

访问控制参考
授权策略的图形界面生成器

4. 创建子账号并授权

在访问控制界面选择 > 用户管理 > 新建用户 > 输入用户名 > 勾选生成AccessKey > 确定 > 下载Ak 配置文件

在访问控制界面选择 > 用户管理 > 找到刚刚创建的用户 > 点击授权 > 找到上面创建的授权策略 > 添加 > 确定

第四步 修改项目

修改下面shell 内的 OSS_KEY_ID、OSS_KEY_SECRET、OSS_END_POINT和OSS_DISTPATH
并加入到自己项目的合适位置

#!/bin/sh

SYS_OS=`uname -s`
if [ $SYS_OS = "Darwin" ];then
  OSS_UTIL_URL='http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/50452/cn_zh/1502070362563/ossutilmac64?spm=5176.doc50452.2.6.wSvGp7'
elif [ $SYS_OS = "Linux" ];then
    OSS_UTIL_URL='http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/50452/cn_zh/1502070288777/ossutil64?spm=5176.doc50452.2.3.wSvGp7'
else
    exit 1
fi

OSS_KEY_ID='312312fdsfds' #--access-key-id
OSS_KEY_SECRET='sfsdfsdf3123dsfdf' #--access-key-secret
OSS_END_POINT='oss-cn-beijing.aliyuncs.com' #endpoint
OSS_BUCKETINT='test-weiapp-web' #Bucket
OSS_DISTPATH='publish/www' #相对于脚本位置的静态网页路径

echo '开始下载ossutil命令行工具'
curl -o ossutil ${OSS_UTIL_URL}
chmod +x ossutil

echo '配置AK'
./ossutil config -e ${OSS_END_POINT} -i ${OSS_KEY_ID} -k ${OSS_KEY_SECRET}

echo '删除之前的文件!避免文件版本冲突等问题'
./ossutil rm oss://${OSS_BUCKETINT} -r -f

echo '上传文件'
ls -al ../
./ossutil cp -r -f ${OSS_DISTPATH} oss://${OSS_BUCKETINT}

删除文件部分的shell 可以不要,具体请参考自己项目的结构。
因为我的项目生成大量hash文件名的文件,如果不删除,oss 内无用文件将会越来越多。
但是这样的删除过程会增加部署时间,且在一定时间内网站不可以访问;
所以我建议修改项目结构,加入版本,把这些变化文件加入到一个带版本号的子文件夹,这样每次只删除第n个版本前的文件。

第五步修改 CodePipeline配置

  1. 如果不需要测试可以删除测试部分
  2. 添加构建步骤"执行shell"
  3. 点击立即执行开始一次构建

添加执行第四部的sh,注意相对路径是项目根路径,在我的项目内是 publish/upload.sh

第六步 修改oss 配置

对象存储 > 域名管理 > 绑定用于域名 > 输入域名 > 开启cdn ->自动添加cname

如果域名不在当前阿里云账号下或者不在阿里云,那么亲手动添加 cname。

点击确定后多等几分钟。开启cdn 扥过程比较慢。
需要提前打开cdn功能

当域名添加完毕后

对象存储 > 域名管理 > 找到刚刚添加的域名 > 开启CDN 缓存自动刷新

第七步 router 导航的问题

如果项目使用react-router 利用history api 进行导航,那么怎么解决导航的问题?

1. 修改oss 利用404页面

对象存储 > 基础设置 > 静态页面 > 默认首页和默认 404 页都修改成 index.html

但是这种办法有一个问题,除了首页外的其他页面请求的状态码都是 404。
在某些网络情况下404 会被劫持!所以这个办法实际上不完美!

2. 利用 镜像回源

利用"镜像回源"把请求重新定向回首页

对象存储 > 基础设置 > 镜像回源 > 创建规则 > 重定向

image

第八部 cdn 配置

CDN > 域名管理 > 找到刚刚添加的域名 > 性能优化 > 开启智能压缩

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
3月前
|
弹性计算 运维 Serverless
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
81 1
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
|
17天前
|
安全 Java API
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
阿里云短信服务提供API/SDK和控制台调用方式,支持验证码、通知、推广等短信类型。需先注册阿里云账号并实名认证,然后在短信服务控制台申请资质、签名和模板,并创建AccessKey。最后通过Maven引入依赖,使用工具类发送短信验证码。
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
|
1月前
|
IDE API 开发工具
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
Alibaba Cloud API Toolkit for VSCode 是集成了 OpenAPI 开发者门户多项功能的 VSCode 插件,开发者可以通过这个插件方便地查找API文档、进行API调试、插入SDK代码,并配置基础环境设置。我们的目标是缩短开发者在门户和IDE之间的频繁切换,实现API信息和开发流程的无缝结合,让开发者的工作变得更加高效和紧密。
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
|
4月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
21天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
1月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
2月前
|
机器学习/深度学习 DataWorks 数据挖掘
基于阿里云Hologres和DataWorks数据集成的方案
基于阿里云Hologres和DataWorks数据集成的方案
71 7
|
2月前
|
存储 SQL 分布式计算
Hologres 与阿里云生态的集成:构建高效的数据处理解决方案
【9月更文第1天】随着大数据时代的到来,数据处理和分析的需求日益增长。阿里云作为国内领先的云计算平台之一,提供了多种数据存储和处理的服务,其中Hologres作为一款实时数仓产品,以其高性能、高可用性以及对标准SQL的支持而受到广泛关注。本文将探讨Hologres如何与阿里云上的其他服务如MaxCompute、DataHub等进行集成,以构建一个完整的数据处理解决方案。
86 2
|
4月前
|
开发框架 前端开发 JavaScript
ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成
ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成
ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成

热门文章

最新文章