公司争论再次引起了谁应该编写Docker文件的争论(包括撰写,可互换的这篇文章)。
这种情况在我的工作(开发人员和顾问)中很常见,我想知道是否有严格的规定用于创建和管理Docker文件。我在以下三种情况下进行过操作:
1.)Dev-ops编写和管理Docker文件
优点:它们对生产没有什么意外,并最终控制了最终实例
缺点:开发人员对Docker /服务器的了解较少,必须等待某些更改或征求许可,或者需要操作团队人员进行诸如添加环境变量之类的操作
2。)开发人员编写和维护Docker文件
优点:开发人员可以继续工作,在团队内部可以解决冲突和冲突
缺点:开发人员操作通常会遇到不良或困扰的Docker文件进行生产。开发运营还花费时间解决Docker文件上的开发人员问题。开发人员通常不关注实例的安全性。
3.)混合方法:开发人员编写Docker文件以结合dev-ops策略或需求使用。 Dev-ops在工作Docker文件的开发人员基础上建立了一个不同的生产docker文件,但增加了秘密处理,Terraform / IaC / CI + CD的需求,并负责实例上运行的Docker文件。
在这种情况下,dev-ops团队观看了我们的(开发人员)文件,并使用差异来提出问题或深入了解更改。
-
我一遍又一遍地遇到的问题(关于Docker文件):

由于各种原因(场景1),开发人员无法进行简单更改
开发人员进行的更改会使开发人员不满意(所有情况)
开发人员需要“ 2周通知任何更改”或类似内容令人无法接受的延迟(方案1)
开发人员花费太多时间来学习如何与基础架构兼容并降低生产力(方案1)
Dev-ops获取垃圾文件(方案2)
安全责任和其他与操作有关的任务在部门之间分担(发生问题时会发生内in)(在所有情况下都存在问题)

遇到的问题列表很长,但是我希望这是足够的信息在负责Docker最多并负责正常运行时间的专业人员之间建立一个关于此主题的对话。
7月23日,对@MLu的回复:
Dev ops是“ Developer Operations”,如部署和基础架构中所述东西的。 “一起工作”总是会发生,但这是两条截然不同的职业道路和专业领域(开发人员和运营人员)。正如Wikipedia条目强调我的观点一样,有一些关于上下文对范例的依赖的说明。 Dev写代码,Ops编写实例,中间是协作。因此,我完全不同意“ DevOps模型完全是这两个角色的融合。”,而不是在我17年的许多团队中。
其中一个团队被视为“ SRE”,而另一个团队则喜欢“ Devops” ”和另一个“ Infra(甚至不回答使用devop的人)”。每个团队都有他们自己的想法,但最终在为项目的开发方面服务时会遇到相同的问题。
CI和CD中的开发和“操作”需要一起工作,但出于某种原因,只有这些“操作”团队才能参与其中。所有情况都是公认的痛点。为什么如此常见?
如果DevOps是基于开发人员实践(敏捷,依赖SCM,DRY等)而诞生的,并且通常由大量的前开发人员组成,那么为什么在构建/运输/管道方面的人员配置却是分散的通常反应或响应速度慢,需要较长的交付时间,并且通常是项目中最常见的障碍。我质疑这些行动小组的象牙城堡宣言。当一个团队超负荷工作,表现欠佳,与既定准则背道而驰时,“ X需要做Y”的(教条)可能是解决方案,也可能是吸管?我确实同意@MLu关于通过PR和其他概述方法管理Docker文件的评论。我将响应理解为我更喜欢的一种混合方法。
挫败根源于我曾经是“开发”的几个项目,而我们拥有基于云的产品,具有复杂的CI / CD和其他操作。但是我们从未遇到过发展问题。只要有专职团队处理这些要素,事情就会变慢,正常运行时间会受到影响,并且产品发布周期会变得压力更大。我们的一个干部正在讨论当前范式的替代方案,因为我们在组织中以及在不同的工作中一遍又一遍地重复着相同的问题。

#1 楼

DevOps ..是不是您知道.. Devs和Ops可以一起工作,理想情况下是在同一团队中吗?
您在帖子中所说的Dev-ops听起来很像传统的操作-开发人员自己动手做将其移交给Operations进行部署。嗯,那不是DevOps。
DevOps模型正是这两个角色的融合。不一定要一个人,最好是一个团队。团队中的一些人编写实际的代码和测试,一些人维护CI / CD管道,一些人编写Packaging / build / Docker文件,一些人负责部署。以上所有这些都是由CI / CD驱动的,因此团队中的大多数人都可以专注于编写代码。构建,打包,测试和部署是自动进行的。
在我们的团队中,Dockerfile与我们使用的软件源位于同一存储库中,并且任何开发人员都可以在需要时进行更新(当然是通过PR)。部署文件(AWS CloudFormation,Terraform等)位于另一个存储库中,并且任何人都可以通过PR更新它们。提交任何更改(源,Dockerfile,CloudFormation等)并将其推送到git后,它会自动生成并部署到Dev环境。
在CI / CD界面中单击一次即可将其升级为Test,然后单击另一次
TL; DR您所描述的不是DevOps,而是传统的Dev和传统的Ops互相抗争;)

评论


尽管您崇尚自由主义,但在/大多数/大型公司中,DevOps指的是自动化工具,而不是流程工具,而不是XFT。通常会有一个由devops成员组成的平台团队,他们发布供开发人员使用的平台。另外,我在数十次DevOps会议上发表讲话,并问了一个问题:“谁来自DevSide”,结果总是一样-没有人。 DevOps并不是您梦dream以求的-实际上它是完全不同的。一些现金拮据的业务负担不起平台团队的费用,因此Ops的责任落在了开发人员身上,但这是两全其美的做法。

–软件工程师
20年7月24日13:00



#2 楼

我同意MLu,尽管我的经验通常是在小型团队中,但他们的角色总是会变得有点模糊。
采用“基础架构即代码”的方法导致开发人员进行操作,开发人员团队应该与开发人员合作就像开发团队在内部进行协作以确保功能可以协同工作一样。
也许分开的团队是问题所在,而应该让包含所有专业的基于项目的团队一起工作。
我的经验还是很小启动环境,因此这可能是用于部门化的大型组织的一个重大转变。

#3 楼

我发现这是一个组织性问题。
有很多解决方法,但是我发现有3种独特的类型:

产品团队中的DevOps。
DevOps团队。
共享的DevOps工程师。

如果产品团队本身可以进行DevOps,则DevOps部门可能会有一个或多个负责任的人员,他们对此事受过良好的教育,并将审查拉动请求从DevOps的角度来看。
DevOps团队甚至可以将其代码存储在单独的存储库中,只有他们可以访问并且可以共同解决问题。
DevOps工程师还可以与许多团队合作,提供帮助如果需要的话负担不大。假设您有8个产品和2个DevOps工程师,每个工程师都负责支持4个产品。
关键的区别在于知识的共享方式和响应能力。专职的DevOps工程师可以专注于为产品团队解决问题,而共享的工程师和团队最终将不得不在产品之间确定优先级,这会导致延迟-DevOps应该避免的事情。因此,所有团队都应该拥有具有基本DevOps知识的人员,但也应该有具备广泛知识和经验的人员。
我个人并不认为“ DevOps团队”方法很好,我发现这几乎就是重命名运营团队-但这是一个好的开始!更好的方法可能是由DevOps领导并召开定期会议以分享知识。