问题标签 [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.
git - 如何在 TeamCity 中为多个 VCS 配置创建一个分支?
让我们假设您有一个项目,其中包含 20 多个 VCS 条目,包括 SVN 和 GIT 存储库。每个都已配置并且连接正常。
同一个项目包含大量具有工件和快照依赖项的构建配置。例如,可能有一个用于从所有 VCS 存储库构建源代码,成功后,在每个存储库中创建一个带有内部版本号的标签/标签。另一种配置取决于构建产生的工件,可以将二进制文件部署到一个或多个登台服务器,而另一种配置可以针对已部署的系统运行自动化验收测试。该过程可能会重复以测试性能、安全性等。
最后,当所有构建配置完成后,在每个 VCS 存储库中都会创建一个发布分支(例如 release-1.2.3)。这通常在一个发布周期手动触发一次。
目前我正在运行一个脚本来在每个存储库中创建分支,如果需要(如使用 Git)将其推送到源服务器。问题是我必须在多个位置维护存储库列表,这很容易出错,尤其是在安全性方面。
本质上,我想做一些类似于 VCS Labeller 的事情,除了我想在每个 VCS 存储库中创建一个分支。
不必编写自定义插件,如何使用 VCS 信息创建分支并将其推送到每个 repo?
jenkins - 我可以在没有 CRON 或 REST API 的情况下安排 Jenkins 构建吗?
要在 Jenkins 中安排构建,我需要添加一个“cron”参数,然后一切正常。但是我有很多驴用户,他们不知道如何使用 cron 进行调度。
http://jenkins/job/jobname/build?delay=4000
有没有办法在没有 API 本身(我不想要这个)或 cron的情况下安排 Jenkins 构建?也许一些詹金斯插件......
jenkins - 让 Ansible 和 Rundeck 一起工作是个好主意,还是使用其中一个就足够了?
最近我在看 Ansible,想在项目中使用它。还有另一个工具 Rundeck 可以用来做各种操作工作。我没有使用这两种工具的经验,这是我目前对它们的理解:
相似点
这两个工具都是无代理的,并且使用 SSH 在远程服务器上执行命令
Rundeck的主要概念是Node,和Ansible的inventory一样,关键思想是定义/管理/分组目标服务器
- Rundeck 可以在选定的节点上执行 ad-hoc 命令,Ansible 也可以非常方便地做到这一点。
- Rundeck 可以定义工作流并在选定的节点上执行,这可以通过编写 playbook 使用 Ansible 完成
- Rundeck 可以与 Jenkins 等 CI 工具集成来做部署工作,我们也可以定义一个 Jenkins 作业来运行 ansible-playbook 来做部署工作
不同点
Rundeck 有 Job 的概念,Ansible 没有
Rundeck 有 Job Scheduler,Ansible 只能通过 Jenkins 或 Cron 任务等其他工具来实现这一点
Rundeck 默认有免费的 Web UI,但你必须为 Ansible Tower 付费
似乎 Ansible 和 Rundeck 都可以用来做配置/管理/部署工作,也许以不同的方式。所以我的问题是:
- 这两个工具是互补的还是为不同的目的而设计的?如果它们是互补的工具,为什么 Ansibl 只与 Chef/Puppet/Slat 等工具相比,而不是与 Rundeck 相比?如果他们不是为什么他们有这么多相似的功能?
- 我们已经在使用 Jenkins 进行 CI 构建持续交付管道,使用哪个工具(Ansible/Rundeck)进行部署是一个更好的主意?
- 如果它们可以一起使用,最佳做法是什么?
非常感谢任何建议和经验分享。
email - 通过电子邮件通知失败/通过 Jenkins 作业
我们有一个用于创建生产构建的公司内部系统,我需要创建一个 Jenkins 作业来自动化这些构建。
有一种方法可以自动启动生产构建。但是您只能通过电子邮件通知了解构建的结果。此外,您只能使用您的个人域凭据订阅通知,即您用于登录计算机的相同登录名/密码(并且密码每个月都会更改)。
所以现在,Jenkins 的工作在构建启动后就被认为是“通过” ,而不是在它实际完成时。
我想知道如何让詹金斯在给定的限制下通过/失败这项工作。
此外,我想避免:
- 在任何地方硬编码我的个人凭据,
- 取决于我或其他人的个人电脑是否开启。
想法?
github - 与 github 一起使用的轻量级持续集成工具?
我正在开发一个带有大量分析代码的小型 Python Web 服务,并正在寻找一个轻量级、易于使用但全方位的持续集成工具,以与 github 一起使用。
我将我的代码推送到 github 上,希望通过每次推送持续集成都可以运行测试并检查完整性
来自 github 网站https://github.com/integrations的一些推荐工具, 例如 cloudBees、circleci 等。
目前哪种 CI 工具最适合我?多谢
如果你能提供一些关于 github 和 docker 的连续工作流(开发和部署)的提示/好的教程,那就太好了
artifactory - 为什么是神器而不是共享文件夹?
情况就是这样,当我们放置应用程序的安装程序(两个文件 .sh 一个用于 bin,另一个用于 conf)时,我们在公司中有一个共享文件夹,这是手动操作。
我们正在尝试让 jenkins 自动执行此操作。
我必须给出论据:如果我们使用 artifactory 通过 http 请求从 jenkis 发送数据来存储数据,那会有什么好处?我们可以自动将数据放入我们的共享文件夹中(如果您能告诉我更多关于进行最后一个操作的可能性,那就太好了)
有任何想法吗?
docker - 如何防止 docker hub 上的 docker 镜像被覆盖?
有什么方法可以防止将具有与现有图像相同标签的图像上传到 docker hub?我们的用例如下。
我们使用带有图像标签作为版本号的 docker-compose 文件部署到生产环境。为了支持回滚到以前的环境和幂等部署,某个标记的 docker 映像必须始终引用相同的映像。
但是,docker hub 允许使用与现有图像相同的标签上传图像(它们会覆盖旧图像)。这完全打破了对图像进行版本控制的想法。
我们目前有一些变通方法,其中涉及我们的构建脚本提取图像的所有版本并查看标签以检查是否不会发生覆盖等,但感觉必须有更好的方法。
如果 docker hub 不支持这个,有没有办法在没有 docker hub 的情况下进行 docker 部署?
jenkins - 使 jenkins 能够使用 ansible 进行持续交付
概括
我有一个 ansible 剧本,它做了一些很棒的事情。这很有效,因为我已经设置了 ssh 以允许我在我的服务器上传播令人敬畏的东西。我想设置 jenkins 以在成功构建结束时自动提供令人敬畏的功能。
这失败了,因为 jenkins 没有我所拥有的 ssh 能力。如何使用 ansible 和 jenkins 实现应用程序的持续交付?
选项:授权项目插件
https://wiki.jenkins-ci.org/display/JENKINS/Authorize+Project+plugin
我安装了这个插件,这样如果我触发工作,它就会像我一样运行。
- 在配置全局安全性下启用“以触发构建的用户身份运行”
- 在我的项目中启用了“配置构建授权”和“以触发构建的用户身份运行”
- 添加了构建步骤以运行 shell 命令
whoami
控制台输出说:
由用户我的名字开始
以我的名义奔跑
在工作空间中构建我的路径
+ 哇哇
詹金斯
我会在那里期待我的用户名,而不是詹金斯。
更新:我确实了解到这个插件是为 jenkins 应用程序授权而设计的,而不是系统身份验证。jenkins 用户需要sudo user
作为任何脚本执行的一部分。
选项:给 jenkins 用户 NOPASSWD sudo
jenkins
acct 是系统账号,默认没有tty 。我可以使它成为一个完整的用户帐户,授予 sudo 访问权限等,但这似乎比冒充用户帐户更大的安全问题。
选项:码头工人
选项:ansible 塔
- 詹金斯 1.617 版
- 授权项目插件版本 1.1.0
bamboo - Atlassian Bamboo 和静态工件以及其他持续交付的不良做法
经过一小时的搜索,我找不到在构建计划中插入静态文件的方法。
我的意思是静态文件,一个简单的 txt 文件,它不在存储库 (Git) 中,也不来自另一个构建 (工件)。
这让我想知道使用不是来自 repo 或其他构建的文件是否是一种不好的做法。
有人可以解释为什么吗?或者告诉我怎么做?
git - 使用 git-flow 进行持续集成和持续交付
一段时间以来,我们一直在使用 Subversion 提交作为管道触发器进行持续集成和持续交付。最近,我们开始在一些带有git-flow的项目中使用 git ,我们正在尝试决定应该使用 git-flow 的哪个分支来触发持续集成和持续交付管道。
这里有两种方法:
1.使用开发分支
问题:使用 git-flow 我们应该在生产中部署发布(或主)分支,所以我们必须构建两个不同的管道,一个用于持续集成(分支开发),一个用于持续交付(分支主)。这可能会在生产中引入错误,因为生产中的版本与其他环境(集成、测试、暂存)中的版本不同。
2.使用主分支:
问题:这样一来,我们就不会有真正的持续集成,因为对这些分支的更改不是很频繁地推送。
哪个是管道中使用的正确分支?