问题标签 [continuous-delivery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 持续集成环境中的 iOS App Store 发布
我目前在独立服务器上使用 Jenkins 进行 iOS 持续集成。Jenkins 构建、测试和创建 HTML 链接,以便可以从临时设备(持续交付)下载应用程序。
每当我发布 App Store 版本时,我都会得到我想要的构建代码,并从中构建。这带来了一个问题,因为尽管代码相同,但由于涉及两台不同的机器,因此不能保证二进制文件相同。
您通常会读到,在持续集成中发布应该是非事件。这适用于我的日常构建,但是,在持续集成环境中发布 App Store 的最佳方法是什么?
java - 如何让 Jenkins 将 Maven -SNAPSHOT jar 工件的两个不同构建视为持续交付的一部分?
编辑:这是关于使用 Maven 进行持续交付并与 Jenkins 进行协调。Maven 绝对不是为此而设计的,这个问题是我们在不使用 Maven 版本的情况下获得高效工作流程的一部分。帮助表示赞赏。
我们在主要版本中使用 Maven -SNAPSHOTs,以确保客户始终获得该给定版本的最新代码,该版本运行良好。出于技术原因,我们有两个独立的 Maven 作业 - 一个用于将源代码编译为 jar,另一个用于将适当的 jar 组合到给定的部署中。这也很有效。
然后我们让 Jenkins 编排何时调用各个步骤,这有点棘手,因为如果我们mvn clean install
在第一步中执行正常操作,这意味着所有快照工件都会重新编译,这反过来又让 Jenkins 认为所有即使用于生成工件的源没有更改,快照也会更改(因为它们的指纹 - 也称为 MD5 校验和 - 已更改),从而触发所有下游构建,而不仅仅是那些依赖项确实发生变化的构建。
到目前为止,我已经确定这些东西在构建之间有所不同:
- META-INF/maven/.../pom.properties(因为它包含时间戳)
- META-INF/MANIFEST.MF(包含 JDK 和用户)
- jar 文件中的时间戳
我首先找到了解决这两个问题的方法,但后者有点困难。似乎 AbstractZipArchiver (它在 zipFile() 和 zipDir() 中完成所有工作)不是为了允许对存档的生成方式进行任何类型的扩展。
现在我可以想象四种方法(但非常欢迎更多想法):
- 创建当前 maven-jar-plugin 实现的派生,允许一个
timestamp=<number>
属性,然后将其用于插入到 jar 文件中的所有条目。如果未设置,则保留当前行为。 - 修改 Jenkins 指纹方案,使其了解 jar 文件并且只查看条目内容,而不查看它们的元数据。
- 将插件附加到
prepare-package
负责touch
生成具有特定时间戳的文件的阶段。这要求当时所有文件都存在(意味着不允许 jar 插件接触 MANIFEST.MF 文件) - 将一个额外的插件附加到“包”阶段,它会重写完成的 jar 文件,将过程中的所有 zip 条目时间戳归零。
同样,目标是使 maven SNAPSHOT 工件完全独立于时间,因此在相同的源下,您将获得具有相同 MD5 校验和的工件。但是,我也相信这可能对发布版本有益。
我应该如何处理这个?
continuous-deployment - 定义持续部署
我们经常收到的问题:
- 什么是持续部署?
- 我们“持续”部署什么?
- 它与持续交付有何不同?有区别吗?
我试图在我的博客文章中回答这些问题:什么是持续部署?
持续交付和持续部署之间普遍接受的定义和区别是什么?
continuous-integration - 持续交付 - 处理 svn 提交之间
假设一个部署管道正在进行中。SVN 标记和开发版本更改正在进行中。那时,开发人员正在提交他的更改。因此 CI 服务器有可能将新提交的未经测试的更改发布到生产环境或发生其他一些冲突。我该如何处理这种情况。在构建管道完成之前,我是否需要锁定整个主干。有没有其他解决方法。
java - AWS VPC 中的 docker 容器,好主意与否?
我想知道这是否是个好主意?
我现在有几个 java 服务在 aws vpc 的不同盒子中运行。最近我读到了 docker,觉得它真的很棒。所以我的问题是,如果用 docker 框替换这些当前的框并将我的 java 服务放在它们之上是个好主意吗?当然还是在vpc中。
我可以想象的最大好处是这样做可以节省我们在测试集成和调试等方面花费的工作量。
但我确实关心像这样的事情
性能损失(如果有)?网络配置?服务状态监控?
我真的是 docker 的新手,所以请指点我任何你认为可能有帮助的资源,谢谢。
java - 使用 java 管理计划的作业
我在 java 上有一个复杂的 Web 应用程序。它包含:
- 由maven存储和管理的不同库模块
- 可扩展到云中的许多服务器的 Web 模块
- 数据库:sql + nosql
- 许多不同的计划作业与数据库一起工作。
我需要建议如何开发和管理这个预定的工作。我的要求:
- 作业应该与 Web 模块分开,因为 Web 层会在 amazon ec2 insanses 上自动扩展。
- 有些工作用钱做非常重要的工作,所以我需要一个非常好的工具来监控工作结果、工作状态、日志等。我需要能够快速修复和停止\启动\取消(如果它冻结出于某种原因)实时单独的特定工作。
- 当一切正常时,我需要使用持续交付(CD)。这意味着作业构建在 CI 服务器上并自动部署到测试\生产服务器。预定时间的配置也必须在版本控制之下。
我看了一些解决方案:
- 像黑曜石这样的工作服务器。不要认为使用这样的怪物解决方案是个好主意。
- 石英。我找不到一种简单的方法来合并需求 2 和 3。使用石英,我可以实时管理我的工作或为工作制作良好的 CD 版本。不在一起。也许我想念什么?
- 使用所有库将作业 jar 部署到目标服务器并运行脚本从 cron 运行该脚本。这个解决方案看起来很难看。首先,我需要在每次部署时将我的所有库从 CI 服务器部署到测试\生产服务器,以保持 CI 流程清洁。其次,我真的不认为这是一个好主意。我真的认为我错过了一些东西,对于这个常见的问题有一个很好的解决方案。
你能给我建议吗?开发人员通常如何使用 CD 流程管理计划作业?
jenkins - 使用 Jenkins 并行化测试
我正在使用 Jenkins 进行集成测试。
只是为了给出上下文。目前我有一个单独的构建服务器,它每天生成构建,Jenkins 不用作构建服务器。构建服务器在我的例子中执行单元测试。
构建过程完成后,它会调用 Jenkins 作业。在这项工作中,Jenkins 开始将构建部署到虚拟机中。我有一个这样做的脚本。
随后我的计划是运行几个脚本来进行端到端测试。
现在我在这方面有几个问题:
- 如何并行执行端到端测试?
- 当我在脚本之后添加脚本时,我开始担心它的可管理性如何?
- 我总是使用 Web 界面来添加和更改脚本。如何从命令行执行此操作?
有什么好的教程的想法吗?大家有什么指点吗?谢谢!
看起来构建流程插件是我需要的。 https://github.com/jenkinsci/build-flow-plugin
jenkins - 如何远程触发 Jenkins 构建并传递参数
我正在使用以下方法远程调用 Jenkins 作业:
这里Test-Jenkins
调用了作业,并且DOIT
是我使用的安全令牌。
现在我需要将一些参数传递给这个作业的 build.xml 文件,即Test-Jenkins
。
我还没有弄清楚如何传递变量。
chef-infra - 多节点 SOA 应用程序的配置管理
所以这似乎是当今软件中的一个常见问题。许多公司似乎使用 AWS、Azure 或 Heroku 等云平台来解决这个问题。然而,对于需要私有云的数据安全来说,这些选项似乎不太发达。
详细地说,我的具体需求是管理独立于节点(物理/虚拟服务器)的应用程序。目前我们使用 Chef,这似乎不太适合这项任务。在 Chef 中,我需要在环境中的每个单独节点上都有一个运行列表。当我有一个依赖于许多不同服务的 SOA 应用程序时,出于显而易见的原因,我不想将其安装在同一节点上,Chef 无法将其提供给我。我必须手动完成。我必须在内部记录所有依赖项,并且在为每个节点创建运行列表时,必须有人做出决定。没有多节点类型配置选项(环境变量之外)或跨多个节点安装我的服务的自动方式。
这似乎是一个常见的问题,我不得不相信我只是错过了一些东西。肯定有一个工具可以让我比 Chef 更轻松地管理私有云上的 SOA 应用程序。
有人知道这样的工具吗?对我来说,Chef 如此受欢迎并且没有此功能似乎很疯狂。我想假设 Puppet 或其他一些工具可以,但与 Chef 不同,我想在深入尝试使用它之前先了解一下。
用厨师的术语浓缩我想要的东西:
我想要映射到封装应用程序的环境的角色。我想在 THE ENVIRONMENT 上运行安装,而不是在单个节点上运行。在内部,配置管理软件将对实际安装服务的节点做出某种明智的决定,并相应地更新服务依赖项(例如,通过环境变量)。
换句话说,我希望 CD 成为托管在私有云上的 SOA 应用程序的 CD;不是我与 Chef 一起使用的半手动、主要不是连续交付的技巧。
如果有任何来自 opscode 的人(或其他厨师迷),我很容易承认我可能没有使用 Chef 提供的所有功能,在这种情况下,我想知道目前使用它的人如何处理我的具体问题。
此外,如果重要的话,我所有的服务器都是 Windows 2008 R2 或 Windows 2012。
azure - 我可以在每次提交后使用 TFVC 和 Azure 自动更新实时站点吗?
对于每次提交,我都希望使用 TFVC 和 Windows Azure 获得带有已提交代码的实时版本。
如果开发人员提交了某些内容,我希望能够在 dev.mysite.com 上对其进行测试。如何使用 azure 和 TFVC 进行设置?