使用git checkout的方式进行轻量级部署

简介:

动机

很多脚本语言其实没有“编译”的过程,不需要真的输出一个“构建物”。那么在CRP上是否有更加轻量的部署方式呢?答案就是直接使用git更新的方式。本文会详细讲述这一方式。

不必要的“打包”

前面我们发表两篇文章分别描述了Ruby
Java在CRP上的持续交付实践。两篇文章中都使用了下面的配置来对代码库进行编译打包:
_2016_04_09_11_02_16

不同之处是Java打的是一个war包,而Ruby打的其实是源码的压缩包,因为Ruby不需要真正的“编译”过程。这就是编译型语言和脚本型语言之间的显著差别。

除了Ruby之外,脚本语言还包括node、python、php等。他们都可以使用统一的一种方式进行部署,那就是直接更新源码,然后执行相应的包更新操作,比如bundle installnpm installgo get等。然后再执行重启操作即可。那么更新代码应该更新到那个版本呢?如果只是简单的更新到master版本,那么在master分支上有更新之后,这个操作就不等价了。而CRP的一条工作流实例应该对应某个特定的提交版本号,无论运行过多少次rerun甚至回滚,这个版本号应该都是不变的。在部署任务中,可以使用CODE_VERSION这个环境变量来获取该版本。所以对于脚本语言的部署就可以使用如下的通用模式:

git checkout . #保证本地没有修改
git fetch #更新本地历史
git checkout $CODE_VERSION #更改到本次工作流实例所对应的版本
#更新依赖,并重启应用

package.tgz怎么办?

你可能注意到了,在这种模式package.tgz其实已经用不到了。但目前CRP还没有去除填写部署路径的选项。你仍然可以填写一个路径,但事实上没有使用这个文件,而是使用git checkout的方式进行更新和部署。

我失去了什么?

之前使用package.tgz的目的是为了保证工作流的一次运行产生一个唯一的状态,这样就能保证当我回滚时就真的回到了这个版本。那么使用git checkout的方式后,这个承载唯一状态的package.tgz就形同虚设了。但我们并没有失去这个状态的唯一性,因为我们还有CODE_VERSION。只要我checkout的是同一个版本,应用就应该展现出同样的行为。所以虽然不再使用package.tgz,但我并没有失去这个唯一性和历史的可追溯性。

目录
相关文章
|
6月前
|
测试技术 持续交付 开发工具
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
115 2
|
6月前
|
开发工具 git
git checkout (branchname
git checkout (branchname) 是 Git 中切换分支的一种命令。通过这个命令,你可以将当前工作目录切换到指定的分支上。branchname 参数是可选的,如果不指定,则默认切换到主分支(master 或 main)。
130 2
|
编译器 开发工具 git
【Git异常】You are in ‘detached HEAD‘ state, which means that you‘re not on any branch Checkout a branch
【Git异常】You are in ‘detached HEAD‘ state, which means that you‘re not on any branch Checkout a branch
204 0
|
18天前
|
开发工具 git C++
【App Service】VS Code直接部署App Service时候遇见 “fatal: not a git repository (or any of the parent directories): .git”
通过VS Code发布Python App Service的时候,遇见了发布失败错误: The deployment failed with error: fatal: not a git repository (or any of the parent directories): .git . Please take a few minutes to help us improve the deployment experience
70 24
|
6月前
|
JavaScript 数据可视化 网络安全
Hexo博客重新部署与Git配置
重装电脑后,作者更新了Hexo与NexT主题。首先,安装了Node.js和git,配置了git的用户信息,并生成SSH密钥。因旧版本导致问题,作者决定重新部署。按照步骤安装Hexo,选择了NexT主题,并安装了多个插件。遇到错误时,通过查阅资料解决了问题。此外,作者自定义了页脚、侧边栏内容,包括访客统计、词云、建站时间等,并更换了背景图,添加了Daovoice聊天界面。参考了多篇教程解决过程中遇到的各类问题。
67 6
|
6月前
|
开发工具 git 开发者
|
3月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
3月前
|
Linux 开发工具 git
【应用服务 App Service】App Service使用Git部署时,遇见500错误
【应用服务 App Service】App Service使用Git部署时,遇见500错误
|
3月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
75 3
|
3月前
|
开发工具 git
【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?
【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?