搭建舞台

在过去的两年中,我一直在从事Node.js项目。 我们使用GitHub进行源管理,使用Jenkins进行持续集成。 我们还有一个基于Docker和Terraform的部署工具 。

在此期间,我们对配置进行了一些改进。 产生积极影响的更改之一是在分支上运行CI管道,并在GitHub上查看反馈。

在合并PR之前检查构建的结果可以防止由于微小错误而造成的大量损坏。 就像忘记运行lint或添加新文件一样。 一旦我们决定自动执行依赖关系的更新,反馈将使其变得快速,安全。

在这篇文章中,我将解释如何使用以下方法配置Continuos集成和部署管道:

  • Jenkins用于构建配置。 用于创建构建的多分支管道。 Jenkinsfile,用于决定在每个构建中执行什么
  • GitHub用于存储源代码,检查构建输出以及将分支合并到master
  • Docker将构建与执行环境隔离。 无论是开发人员机器还是Jenkins节点

特征

构建管道的配置与源代码一起进行版本控制。 这给您:

  • 旧配置的历史和回滚功能
  • 配置和源的原子更改
  • 使用分支来尝试配置本身

分支机构的建立和反馈意味着您可以:

  • 在代码审查期间查看构建结果
  • 如果分支破坏了构建,则防止分支合并
  • 自动合并不间断的更改

其他小事:

  • 该构建被定义为一系列步骤而不是作业,因此一旦开始就不会重新进入队列
  • 您可以通过编辑文件而不是使用Jenkins Web UI来执行大多数构建配置

缺点

  • 您需要学习Jenkinsfile的语法
  • 您需要注意两种不同的语法选项(脚本式和声明式)
  • 有关如何使用插件的文档并不总是很清楚,并且通常没有任何示例

该应用程序

我创建了一个Node.js Web应用程序作为示例。 为了简化构建,该应用程序没有外部运行时依赖项,例如数据库或服务。 可以扩展此配置以应对外部依赖性,而不会影响隔离性。 例如通过使用Docker Compose设置依赖关系。

Dockerfile

 FROM node:lts-slim  WORKDIR /opt/app  COPY package .json yarn.lock ./  RUN yarn  COPY . .  EXPOSE 8080  CMD yarn start 

Docker是最流行的应用程序容器化解决方案。 有关Docker的完整介绍,我推荐Andre Torres的Docker容器 。

在此CI管道中,Docker将应用程序代码与Jenkins节点隔离。

隔离启用复制。 如果在Jenkins中构建失败,并且我们需要调查失败,则可以在开发人员机器上将其复制,因为Jenkins节点及其软件的状态在容器内不起作用。

隔离还解决了具有不同运行时环境的问题。 每个应用程序可以在Dockerfile中指定不同版本的Node.js,以用于测试和部署。

詹金斯档案

 pipeline { agent any stages { stage( 'Build' ) { steps { sh 'docker build -t codurance/jenkins-pipeline-blog:latest .' } } stage( 'Test' ) { steps { sh 'docker run codurance/jenkins-pipeline-blog:latest yarn test' } } stage( 'Deploy' ) { when { branch 'master' } steps { sh 'docker push codurance/jenkins-pipeline-blog:latest' } } } post { failure { echo 'build is broken. notify team!' 'build is broken. notify team!' } }  } 

该常规文件替换了通常用于在Jenkins中配置作业的长Web表单。 此示例中的管道具有三个阶段(构建,测试,部署),每个阶段均由步骤实现。

部署阶段仅在主分支或中继分支受到影响时运行。 在此示例中,它将映像发布到hub.docker.com,但您可能会将其替换为用于部署应用程序的基础结构命令。

管道还具有一个称为post的部分,其中包含在构建完成后触发的诸如alwaysfailure步骤。 这些扩展点可以在您的工作流中集成消息传递系统,例如Slack。

Jenkins设置

Jenkins需要访问GitHub。 在我的情况下,有效的方法是使用新的GitHub个人令牌作为密码,在Jenkins中创建用户名和密码凭据。 这取决于在GitHub中设置用户的方式,因此它可能不适用于您的帐户。 我在CloudBees知识库中找到了详细的解释

配置完凭据后,就可以在Jenkins中创建新作业了。 当询问类型时,选择“多分支管道”


Jenkins提供的默认设置对我的工作流程很明智,因此我对其进行了很少的修改。 如果您习惯了Jenkins的自由职业,您可能会对少量可用选项感到惊讶。 那是因为我们已经在Jenkinsfile中定义了整个构建管道。


您可以配置哪些提交,分支或PR触发管道。 使用上面显示的设置,在推送到主节点,推送到分支以及创建PR时将触发管道。

保存配置后,最好在GitHub中检查webhook。 Jenkins将在存储库中配置一个Webhook,以在推送提交或创建PR后立即触发管道。 它要求Jenkins可以从Internet进行访问,最好使用有效的SSL证书。


单击自由样式的Jenkins作业时,熟悉的景象就是减少内部版本号的列表。 现在,只需单击一下即可,因为每个分支和PR都有自己的内部编号序列。

GitHub中分支的构建状态通过链接到Jenkins的叉和刻度线报告。


对于PR,管道是在与master合并之后运行的,并且与PR对话一起可见。


也可以将GitHub配置为网守,以便无法合并测试失败的PR。 此功能称为受保护分支 。


根据您的工作流程配置管道之后,您就可以开始开发应用程序了。

然后去哪儿?

最先进的技术并不意味着完美。 这是我目前所知道的最好的事情,我想学习更多,并回顾这是迈向更好的一步。

Jenkins是我在该领域使用最多的工具。 使用不同的工具很有可能会获得更好的结果。 我狭窄的经验是限制因素。

这篇文章中未涉及的领域是如何使用具有外部依赖项的应用程序。 我将在以后的文章中介绍。

在@jaramir或@codurance上发推文,让我知道您的想法。

快乐黑客!

资源资源

  • 示例Node.js项目https://github.com/codurance/jenkins-pipeline-blog
  • Jenkinsfile语法https://jenkins.io/doc/book/pipeline/syntax/
  • Jenkinsfile步骤参考https://jenkins.io/doc/pipeline/steps/
  • 多分支管道https://jenkins.io/doc/book/pipeline/multibranch/

翻译自: https://www.javacodegeeks.com/2019/05/continuous-integration-deployment-pipeline-jenkins-github-docker.html

使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道相关推荐

  1. .NET Core 从 Github到 Nuget 持续集成、部署

    一.前言 Nuget 作为一个.NET研发人员,我想你都不会陌生,他为我们提供非常方便的程序包管理,不管是版本,还是包的依赖都能轻松应对,可以说是我们的好助手.而 Nuget 除了官方nuget.or ...

  2. jenkins 插件目录_10 个 Jenkins 实战经验,助你轻松上手持续集成

    众所周知,持续构建与发布是我们日常工作中要面对的的一个重要环节,目前很多公司都采用 Jenkins 来搭建符合需求的 CI/CD 流程,作为一个持续集成的开源工具,它以安装启动方便,配置简单,上手容易 ...

  3. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天

    目录 主题 路线图 Jenkins 先决条件 使用Jenkins Azure Pipeline在Azure上的ASP.NET Core应用程序的CI/CD 创建新的管道作业 添加参数 添加管道脚本 运 ...

  4. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天

    目录 主题 路线图 先决条件 Azure Active Directory和服务主体 创建一个Azure Active Directory和服务主体 将应用程序集成到角色 将Jenkins与Azure ...

  5. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第2天

    目录 主题 路线图 先决条件 将ASP.NET Core应用发布到Azure应用服务 在Azure上配置Jenkins 在Azure上创建Jenkins服务器 解锁Jenkins 结论 主题 本系列文 ...

  6. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第1天

    目录 介绍 路线图 DevOps 持续集成 持续部署 Jenkins Azure Web App服务 主题 先决条件 安装Jenkins 先决条件 下载并安装 Jenkins插件 让它运行 安装自定义 ...

  7. 如何做好持续集成和部署?你不容错过的持续集成工具—Jenkins

    持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地 ...

  8. CI持续集成系统环境---部署Jenkins完整记录

    最近在看CI/CD集成的相关部分,发现几篇好文,转载分享一波. 来源网络:[原创]CI持续集成系统环境---部署Jenkins完整记录 - 散尽浮华 - 博客园 Jenkins通过脚本任务触发,实现代 ...

  9. GitHub之GitHub Actions的项目自动化持续集成和部署

    一.基本概念 GitHub Actions 是一个由事件驱动的自动化平台,通过设置触发条件,在某些事件发生时自动运行指定的操作.换言之,GitHub Actions 不仅允许开发人员在平台上托管代码, ...

最新文章

  1. 基于容器的ETCD集群脚本
  2. 【JZOJ1637】【ZJOI2009】狼和羊的故事
  3. 汉诺塔java程序_Java编写一个汉诺塔的过程
  4. Netty的EventLoop
  5. http抓包实战 pdf_抓包实战 | 浏览器里的HTTP请求到底是如何完成的?
  6. 人工智能技术与计算机科学区别,智能科学与技术与人工智能的区别
  7. 计算机无法安装网卡驱动,电脑经验遇到网卡驱动安装不上的问题,该如何解决呢?一起来看看...
  8. php 不报notice错误,PHP新手NOTICE错误常见解决方法_PHP教程
  9. 百度2017春招笔试真题编程题集合--买帽子
  10. 2022年9月改名字这件事的流程亲历和体会
  11. win8.1系统自带微软拼音输入法卸载教程
  12. 安卓开发无线连接设备进行调试(adb)
  13. 中国物料喷射(MJ)市场趋势报告、技术动态创新及市场预测
  14. 【LOJ573】「LibreOJ NOI Round #2」单枪匹马
  15. 代码题 10进制转任意进制
  16. 管家婆软件生产管理的简单方案
  17. 数据库(十)-单表查询(1)条件查询
  18. 发送内容让Android手机QQ崩溃
  19. Oracle 常用函数总结(持续更新)
  20. 全球社交软件月活排行 微信排第五

热门文章

  1. jzoj1478-堆排序【堆】
  2. OJ8462-大盗阿福【各种dp之5】
  3. 2020 China Collegiate Programming Contest Qinhuangdao Site 补题部分
  4. 【DP】划分数列(ybtoj DP-2-1)
  5. 【栈】【字符】匹配(jzoj 1612)
  6. 【动态规划】 数字游戏 (ssl 1653)
  7. 【动态规划】 石子合并问题(环形) (ssl 1597)
  8. 解决mybatis generator无法覆盖XML
  9. C#基础知识详解之【字段与属性】
  10. Mybatis(笔记)