You sort of answered your own question: if deployments take too long, they can't be done frequently and you can't have short iterations, you can't ship the code at anytime, you can't demo progresses at the end of an iteration, etc. So, in your context, not having an automatic deployments was a major impediment that should have been identified and removed very early (through inspection and adaptation).
Back to the question now. Is automatic deployment a crucial practice? Well, as hinted, I'd say it depends on the context: a project with a simple and straightforward manual deployment process can probably live with it. Is automatic deployment a good practice? I think so: an automated process is typically faster, less error prone and humans obviously don't add much value at doing something that can be automated (see also Three Strikes And You Automate).
I'd say yes, it's an essential practice. If deployments are too complicated and taking too long you've got a bigger problem. I think you should sort that out. You have to do them sometime. Doing the work to make it possible to build at will can only help your project.
Being able to claim the "agile" label isn't important; having an automated, hands-off, repeatable build is the point.
You have to distinguish clearly two things: a shippable product increment and an actual shipment. First is what your team should produce every sprint, second is what may happen with it if it makes business sense.
In other words: what the team produces each and every sprint must be a piece of completely working code, a new increment of whatever it is that you develop. It should be fully built and tested - which is why automatic testing and building environment is a must if you are to do this. However, whether it should be deployed every sprint to production servers and whether this should be automatic is a completely different thing which has nothing to do with the development process itself.
If it is a requirement that you deploy to live production server every sprint (by all means a very good thing to do) then it would probably make sense to automatize it, but whether this process is fully automatic or no shouldn't impede your team's ability to produce fully working code every sprint.
发布评论
评论(4)
您有点回答了自己的问题:如果部署时间太长,则无法频繁完成,并且无法进行短迭代,无法随时交付代码,无法在结束时演示进度因此,在您的环境中,没有自动部署是一个主要障碍,应该尽早识别并消除(通过检查和适应)。
现在回到问题。自动部署是一个重要的实践吗?嗯,正如所暗示的,我想说这取决于上下文:具有简单明了的手动部署过程的项目可能可以接受。自动部署是一个好的做法吗?我认为是这样:自动化过程通常更快,更不容易出错,而且人类显然不会在做可以自动化的事情时增加太多价值(另请参见三击,您自动化)。
You sort of answered your own question: if deployments take too long, they can't be done frequently and you can't have short iterations, you can't ship the code at anytime, you can't demo progresses at the end of an iteration, etc. So, in your context, not having an automatic deployments was a major impediment that should have been identified and removed very early (through inspection and adaptation).
Back to the question now. Is automatic deployment a crucial practice? Well, as hinted, I'd say it depends on the context: a project with a simple and straightforward manual deployment process can probably live with it. Is automatic deployment a good practice? I think so: an automated process is typically faster, less error prone and humans obviously don't add much value at doing something that can be automated (see also Three Strikes And You Automate).
我想说是的,这是一个必要的练习。如果部署太复杂并且花费太长时间,则会遇到更大的问题。我认为你应该解决这个问题。有时你必须这样做。努力使随意构建成为可能只会对您的项目有所帮助。
能否获得“敏捷”标签并不重要;重要的是。拥有一个自动化的、不干涉的、可重复的构建是关键。
I'd say yes, it's an essential practice. If deployments are too complicated and taking too long you've got a bigger problem. I think you should sort that out. You have to do them sometime. Doing the work to make it possible to build at will can only help your project.
Being able to claim the "agile" label isn't important; having an automated, hands-off, repeatable build is the point.
至关重要的是,不,您可以在没有它的情况下逃脱,但是,正如您所发现的,您必须手动执行的所有操作都会减慢您的周期时间。
您应该致力于尽可能地实现构建、部署、回归测试等自动化,这样就不会造成不必要的延迟。
没有发布的冲刺的想法是一个……有趣的……一个。我不能说我以前见过这样的尝试:-)
Crucial, no, you can get away without it but, as you've found out, everything that you have to do manually will slow down your cycle time.
You should be aiming to automate as much as possible, build, deployment, regression testing and so forth, so that you're not unnecessarily delayed.
The idea of a sprint without a release is an ... interesting ... one. I can't say I've ever seen that tried before :-)
您必须清楚地区分两件事:可发货的产品增量和实际发货。首先是你的团队应该在每个冲刺中完成什么,其次是如果它具有商业意义的话可能会发生什么。
换句话说:团队在每个冲刺中生成的内容都必须是一段完全可以工作的代码,是您开发的任何内容的新增量。它应该被完全构建和测试 - 这就是为什么如果你要这样做,自动测试和构建环境是必须的。然而,是否应该每次冲刺都部署到生产服务器以及是否应该自动部署是完全不同的事情,与开发过程本身无关。
如果您要求每个冲刺都部署到实时生产服务器(无论如何都是一件非常好的事情),那么将其自动化可能是有意义的,但无论此过程是否全自动,都不应该妨碍您的团队能够在每个冲刺中生成完全可用的代码。
You have to distinguish clearly two things: a shippable product increment and an actual shipment. First is what your team should produce every sprint, second is what may happen with it if it makes business sense.
In other words: what the team produces each and every sprint must be a piece of completely working code, a new increment of whatever it is that you develop. It should be fully built and tested - which is why automatic testing and building environment is a must if you are to do this. However, whether it should be deployed every sprint to production servers and whether this should be automatic is a completely different thing which has nothing to do with the development process itself.
If it is a requirement that you deploy to live production server every sprint (by all means a very good thing to do) then it would probably make sense to automatize it, but whether this process is fully automatic or no shouldn't impede your team's ability to produce fully working code every sprint.