专栏首页Jenkins使用 Bitbucket 流水线创建最简单的 CI

使用 Bitbucket 流水线创建最简单的 CI

翻译:s1mple_zj 编辑:Yanjun Shi 责编:LinuxSuRen

最近我写了一篇关于 CI 和 CD 之间核心区别的文章,我觉得是时候把这些理论运用到实际当中了。

在我印象中我参与开发的所有项目使用的源码控制平台都是使用的 Artlassian 的 Bitbucket。对于想要寻找一款免费、UI 整洁、能够为追踪你的代码提供了所有必要功能的版本控制系统来说,它是一个再棒不过的选择了。

除了所有版本控制系统提供的基本功能以外,Bitbucket 添加了一些扩展比如集成了 CI/CD 功能,可以让我们推送代码之后将变更更准确的部署上去。

好处就是不需要额外的工具了,只需要 Bitbucket 以及 JavaScript。

配置 Bitbucket

仓库设置完成后,剩下需要完成的工作就是在配置你的仓库允许使用 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

我们将每一行进行拆分,看看都做了哪些事情:

  • 我们在配置文件里面使用 node: 10.15.3 作为 docker 镜像。这里你可以自定义 docker 镜像。
  • 下一步,我们为 default 部分定义了一个步骤,这部分包括所有定义的代码分支,也就是说如果我们触发了推送动作,它将自动触发流水线。
  • 我们可以使用 step 关键词定义步骤。这里我们为其指定一个“*Deploy*” 名称,并告诉它在 caches 关键字内部缓存节点。
  • 最后,在 scripts 关键词内,将会指定一些我们想要执行的命令。首先安装依赖、构建项目、运行测试、最后部署到我们的站点。

为了确保有效,将配置文件放到你的项目的根目录上提交到仓库里面。

配置部署脚本

最终的步骤里,我们调用 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 -

本文分享自微信公众号 - Jenkins(Jenkins-Community),作者:Ferenc Almasi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 都2021年了,你还在用Jenkins?赶快看看这些替代方案吧!

    Jenkins 是目前最常用的持续集成工具,拥有近 50% 的市场份额,它还是很多技术团队的第一个使用的自动化工具。但是随着自动化领域的持续发展,Jenkins...

    dys
  • 使用 Jenkins 实现 CI/CD 多分支流水线

    Jenkins 是一个持续集成服务器,用于从版本控制系统(VCS)中获取最新代码,然后对其进行构建、测试并将结果通知给开发人员。除了作为一个持续集成(CI)服务...

    LinuxSuRen
  • 在 Kubernetes 上使用 Argo 实现 CI/CD

    持续集成和持续交付是一些人努力的目标。它让一切事物变得更简单。市面上有许多 CI/CD 工具,但是随着 Kubernetes 的日渐盛行,所有这些工具都需要做相...

    LinuxSuRen
  • 2020年10种最佳持续集成工具

    技术正呈指数级增长,并且要参与其中,组织别无选择,只能采用技术。谈论“技术”基本上意味着创建“更快,更方便”和“定性”的解决方案。为了跟上高要求的技术动态,不仅...

    DevOps云学堂
  • 21 个好用的持续集成工具,总有一款适合你

    市场上持续集成工具众多,找到一个合适的工具并非易事,下面介绍了 21 个比较受欢迎的 CI 工具,并附上了下载链接。

    DevOps时代
  • 印记中文推出文档CDN + COS部署方案

    本文主要描述方案大体的实现过程,如果你是技术文档的管理者,苦于没有优秀的文档部署方案,可以联系印记中文(docschina),我们会提供接入服务。如果你遇到性能...

    李成熙heyli
  • 还不知道什么是CI/CD?看这篇就行了!

    在CI/CD和DevOps领域中,持续交付和持续部署是一个老生常谈的话题。持续集成这个术语最早是在1994年由Grady Booch提出。微服务提出者Marti...

    用户5927304
  • Webhook 通用触发插件

    这篇文章将介绍我在 Jenkins 上遇到的一些常见问题,以及如何通过开发通用 Webhook 触发插件来解决这些问题。

    LinuxSuRen
  • 从零搭建前端持续集成环境: github+jenkins+nodejs+nginx

    本文将展示整个持续集成过程的搭建,这对于devops运维工程师来说是很轻松的事情,这里更想给新手开发人员,特别是前端开发人员对于CICD的基础参考,整个过程实践...

    志亮

扫码关注云+社区

领取腾讯云代金券