【问题标题】:Continuous Delivery with VSTS and JenkinsVSTS 和 Jenkins 的持续交付
【发布时间】:2017-06-07 15:13:03
【问题描述】:

我正在尝试通过 Jenkins(构建、部署)和 VSTS(源代码控制)实现持续交付。这是所需的工作流程:

  1. 开发人员从 master 分支,进行更改,创建拉取请求
  2. 另一位开发者审核 PR 并最终将其合并到 master 中
  3. 某些系统(Jenkins 或 VSTS)检测到 PR 已合并到 master 中,并且...
    1. 增加存储在 repo 文件中的版本号
    2. 将版本更改提交回 master
    3. 构建
    4. 部署

我在 VSTS 中使用服务挂钩来检测合并以掌握并执行 Jenkins 任务。 VSTS 有 3 个我可以使用的钩子:

  1. 构建完成
  2. 代码推送
  3. 已创建拉取请求合并提交

我的印象是第三个选项只会在 PR 被合并时出现,但事实并非如此。任何对分支的额外提交,当它与 PR 关联时都会触发钩子。这会导致一堆不必要的部署。

我想我可以让 Jenkins 检测 VSTS 中的变化。有一个“轮询 SCM”选项,它采用类似 cron 的时间表。完全令人困惑的是,我似乎无法配置每 X 分钟将轮询的确切内容(哪个 repo,哪个分支)。

只有当 PR 合并到 master 时,我有哪些选项可以触发 Jenkins 任务?我会使用 VSTS“代码推送”服务挂钩,但它会进入无限循环,因为 Jenkins 在增加版本时会推送到 master。

【问题讨论】:

    标签: jenkins azure-devops


    【解决方案1】:

    请参考以下步骤:

    1. 为 master 创建一个新的构建定义
    2. 选择触发器并启用持续集成
    3. 设置Branch Filters和Path filters(排除需要更改的版本号文件)
    4. 添加任务以修改版本号文件(例如 PowerShell)
    5. 添加命令行任务(工具:git;参数:config --global user.email “test@example.com”;工作文件夹:$(build.sourcesdirectory))
    6. 添加命令行任务(工具:git;参数:config --global user.name "Your Name";工作文件夹:$(build.sourcesdirectory))
    7. 添加命令行任务(工具:git;参数:添加[修改后的文件];工作文件夹:$(build.sourcesdirectory))
    8. 添加命令行任务(工具:git;参数:commit -m “update version”;工作文件夹:$(build.sourcesdirectory))
    9. 添加命令行任务(工具:git;参数:push origin HEAD:$(Build.SourceBranchName)”;工作文件夹:$(build.sourcesdirectory))
    10. 添加 Jenkins Queue Job task 以触发 Jenkins 作业

    【讨论】:

    • 有意思,所以使用 VSTS 的构建服务来触发 Jenkins 任务?
    • 看起来不错,感谢您的建议!它并不像你说的那么直接——有很多步骤才能让它继续进行(构建用户提交的权限,允许脚本访问 oauth 令牌,使构建能够使用 git),但你为我指明了正确的方向!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多