翻译:s1mple_zj 编辑:Yanjun Shi 责编:LinuxSuRen
最近我写了一篇关于 CI 和 CD 之间核心区别的文章,我觉得是时候把这些理论运用到实际当中了。
在我印象中我参与开发的所有项目使用的源码控制平台都是使用的 Artlassian 的 Bitbucket。对于想要寻找一款免费、UI 整洁、能够为追踪你的代码提供了所有必要功能的版本控制系统来说,它是一个再棒不过的选择了。
除了所有版本控制系统提供的基本功能以外,Bitbucket 添加了一些扩展比如集成了 CI/CD 功能,可以让我们推送代码之后将变更更准确的部署上去。
好处就是不需要额外的工具了,只需要 Bitbucket 以及 JavaScript。
仓库设置完成后,剩下需要完成的工作就是在配置你的仓库允许使用 Pipelines。滚动到 PIPELINE 部分点击 Settings。你会看到如下所示配置:
点击切换开关,你会得到一个配置 bitbucket-pipelines.yml 文件的选项。这个文件将会告诉 Bitbucket 在代码推送到仓库后需要执行哪些命令。点击 “Configure bitbucket-pipeline.yml” 按钮会指引你转到 Pipeline 菜单:
这里你可以选择多种语言模板。我们这里最感兴趣的就是 JavaScript 的。我们可以使用它作为基础然后依据我们自己的喜好进行修改。
修改模板以及添加一些另外的步骤,我们得到如下文件:
image: node:10.15.3
pipelines:
default:
- step:
name: Deploy
caches:
- node
script:
- npm install
- npm run build
- npm run test
- npm run deploy
我们将每一行进行拆分,看看都做了哪些事情:
为了确保有效,将配置文件放到你的项目的根目录上提交到仓库里面。
最终的步骤里,我们调用 npm run deploy,它是在我们的 package.json 中定义的,使用下面命令运行一个 JavaScript 文件: node tools/deploy.js 这个文件。这个文件将会处理我们组件的部署工作:
const FtpDeploy = require('ftp-deploy');
const ftpDeploy = new FtpDeploy();
const config = {
user: process.env.FTP_USERNAME,
password: process.env.FTP_PASSWORD,
host: process.env.FTP_HOST,
localRoot: __dirname + '/../dist/',
remoteRoot: process.env.FTP_REMOTE_PATH,
include: ['*']
};
ftpDeploy.deploy(config, (error) => {
if (error) {
console.log(error);
} else {
console.log('deployed successfully');
}
});
正如你所看到的,我使用了一个名为 ftp-deploy 的包,你可以使用 npm i ftp-deploy 安装它。我们在 line:1 导入它,在 line:4 为其创建一个配置对象。
配置对象里面包括创建一个 FTP 连接所需要的所有字段。为了避免在代码中存储凭据,我们从环境变量中传递这些值。这些变量从 Bitbucket 中获取。你可以在 PIPELINE 的 Repository variables 处定义它们。
设置部署脚本使用的环境变量名以及它们的值。选中 Secured 将会永久隐藏这些值。
回到配置部分,localRoot 的值用来告诉 ftpDeploy 需要拷贝哪一个目录。使用 __dirname 参数指向的是部署脚本的目录。我的项目配置如下所示:
这里印证了我为什么在例子中返回上一级目录使用的是 /../。
另一方面,remoteRoot 指向了 FTP 服务器的一个目录。最后,使用 include 我们可以定义哪些文件需要拷贝。使用星号说明我们将复制 dist 目录下的所有文件。
然后我们在 ftpDeploy 调用 deploy 然后传给我们的配置对象和一个回调函数。本例这里有一个错误,我们将其日志打印出来了。除此之外,这个部署是成功的。
我们可以在 Pipeline 菜单下监控部署情况。你会注意到开始的一个新的构建名称是我们在 bitbucket-pipelines.yml 文件中事先定义好的。
将变更推送到远程仓库自动触发部署操作,如果你的部署文件正确配置了–当然你运行的测试也通过了–流水线会显示绿色然后本地推送的变更几秒内就会应用到产品中。✅
- END -
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有