在Bitbucket Pipeline中结合Jenkins和Yocto实现持续交付

108次阅读
没有评论

问题描述

希望为一个在Bitbucket仓库中进行版本控制的Yocto项目设置一个持续交付(CD)系统。他计划使用Bitbucket Pipeline触发一个在构建服务器上运行的Jenkins作业,该作业将启动Yocto构建。由于Yocto构建可能需要长达6小时的时间,使用Bitbucket Pipeline进行构建变得相对耗费资源。他的想法是使用Docker容器来测试整个设置,以便可以通过ngrok在本地测试。以下是他的一些关于这个设置的问题:

  1. 这种基于容器的设置是否合理?
  2. 我是否可以从外部标记Bitbucket Pipeline的构建状态为“进行中”/“已完成”/“失败”?
  3. 从Bitbucket Pipeline触发Jenkins作业的最佳方式是什么?Webhooks?
  4. 当Bitbucket Pipeline触发时,如何让Jenkins区分两个不同分支的构建?

此外,用户考虑的设置是两个Docker容器。一个容器运行Jenkins服务器,另一个容器运行具有自定义镜像的构建服务器,用户已经验证了该镜像的可行性。他发现可以使用docker-compose来管理多个容器,因此他创建了以下的docker-compose.yml文件:

version: '3'
services:
  yocto-server:
    build: .
    container_name: yocto-server
    networks:
      - build-network
  jenkins-master:
    image: jenkins/jenkins
    privileged: true
    working_dir: /home/jenkins
    depends_on:
      - yocto-server
    ports:
      - 8080:8080
    networks:
      - build-network
    links:
      - yocto-server
networks:
  build-network:
    driver: bridge

用户还在思考这样的设置下,Jenkins是否可以通过SSH/Telnet/Docker命令在第二个容器中执行命令?因为从他的描述中,他需要执行以下操作:

  1. 将Bitbucket Pipeline的构建标记为“进行中”
  2. 如果仓库存在于容器中,拉取并检出特定分支
  3. 如果仓库不在容器中,首先克隆仓库,然后运行Jenkins提供的参数进行构建
  4. 根据构建的退出代码,标记Bitbucket Pipeline的构建为“完成”/“成功”
  5. 将构建产物上传到Bitbucket

他希望能够获得关于Docker-compose和Jenkins的指导,因为他在这方面的知识有限。值得注意的是,他在使用Bitbucket Cloud。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

Docker容器化设置

在你的情况下,使用Docker容器化设置是有意义的。这样可以实现本地测试和开发环境的一致性,同时也更容易在不同环境中部署和管理。容器化还可以提供隔离性和可移植性,有助于简化开发和构建流程。

Bitbucket Pipeline与Jenkins集成

为了实现Bitbucket Pipeline与Jenkins的集成,可以遵循以下步骤:

  1. 使用Bitbucket Cloud:
  2. 使用Bitbucket Branch Source插件,自动为项目或仓库的每个分支(和PR)设置Jenkins作业。该插件还会处理构建状态的更新。
  3. 插件会自动创建Webhooks以触发Jenkins构建。

  4. 使用Bitbucket Server:

  5. 如果使用Bitbucket Server,需要其他方法来触发构建。你可以使用一些适合你的插件或工具,如pull request notifier插件等。

Jenkins触发命令和参数

使用Jenkins来触发容器中的命令需要一些准备。你可以考虑以下步骤:

  1. 使用Jenkins SSH插件:
  2. 通过Jenkins SSH插件,可以在容器中执行远程命令。这可以用于执行构建等操作。

  3. Jenkins构建参数:

  4. 在Jenkins作业中配置构建参数,使得可以根据需要选择克隆特定的分支或执行其他操作。

  5. 自定义Jenkins Pipeline:

  6. 可以使用Jenkins Pipeline来更精确地控制构建过程,包括构建步骤、参数、触发操作等。

Docker-compose管理多容器设置

你已经在docker-compose.yml中定义了两个服务,可以考虑以下步骤:

  1. 使用docker-compose up命令启动容器。
  2. 在Jenkins作业中配置触发构建的步骤。可以使用docker exec命令在第二个容器中执行必要的构建操作。

Bitbucket Pipeline构建状态更新

要标记Bitbucket Pipeline构建状态为“进行中”/“完成”/“失败”,可以考虑以下方法:

  1. 使用Bitbucket API:
  2. 通过Bitbucket API,可以在Pipeline运行期间更新构建状态,例如使用”POST /rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pipelines/{pipelineId}/builds/{buildNumber}/progress”来更新构建进度。

  3. 使用Jenkins插件:

  4. 使用Jenkins插件来更新Bitbucket Pipeline的构建状态。你可以查找现有的插件或根据需要开发自定义插件。

构建产物上传至Bitbucket

为了将构建产物上传到Bitbucket,你可以考虑以下步骤:

  1. 使用Bitbucket API:
  2. 使用Bitbucket API上传构建产物,例如使用”POST /rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pipelines/{pipelineId}/steps/{stepId}/artifacts”来上传产物。

  3. 使用Bitbucket插件:

  4. 在Jenkins作业中使用Bitbucket插件来自

正文完