私网环境下如何使用云效流水线进行CI/CD?

更新时间:
复制为 MD 格式

如何在私网环境下使用云效流水线进行CI/CD。

场景介绍

代码库、制品库等数据资产托管在内部办公网,公网不能访问,希望能够使用云效流水线进行CICD的编排和控制。

整体方案

云效流水线可以托管用户的私网环境内的机器,并将构建任务调度到这些机器上,从而确保整个构建过程,和代码库和制品库的交互在私网环境下进行。

image.jpeg

在主机上安装 Runner 程序, 该程序需要能够访问到云效流水线的服务端,以便从服务端获取任务,并在执行任务的过程中上报日志和状态。

操作实践

1.创建私有构建集群

进入云效 Flow 首页 -> 全局设置 -> 构建集群管理 页面:

  • 单击 新建构建集群,填入基础信息之后,完成私有构建集群创建。

    操作路径:全局设置 > 构建集群管理,该按钮位于页面下方 私有构建集群 区域。

  • 进入私有构建集群,单击 接入新节点,可以选择不同的方式接入构建节点。支持阿里云 ECS 的 Linux 和 Windows 机器,或者自己的 Linux、Windows 及 macOS机器,可以按需选择。

    • 如果是自己的机器,则可以选择 手动安装Runner 方式添加机器。复制 Runner 安装命令,在机器上执行,即可安装好 Runner 程序,该程序会是以服务的形式常驻在机器上,详见Runner文档。

    • 如果是阿里云 ECS 机器,则可以选择 阿里云ECS 方式添加机器,流水线会调用云助手 API 自动安装好 Runner 程序。

      如果是非阿里云 ECS 机器,则在接入新节点弹窗中选择操作系统类型(如 Linux),添加方式选择手动安装Runner。按照提示完成三步操作:检查前提条件;复制系统自动生成的安装命令(含认证信息,有效期 15 分钟)到目标主机上执行;Runner 安装成功后刷新主机列表查看节点状态。单击我知道了关闭弹窗。

      在弹窗中选择操作系统为 Linux,配置 服务连接地域,系统将展示该地域下可添加的 ECS 主机列表(包含实例 ID、IP、主机名、占用情况、主机状态),选中目标主机后单击 保存 完成节点接入。

  • 创建好私有构建集群之后,就可以创建流水线,并选择这个构建集群执行流水线任务了。

2.创建代码库服务连接

假设您内网的代码托管地址是 https://myrepo.com,为了在构建过程中和代码服务进行交互,需要配置代码库的服务连接。

云效 Flow 首页 -> 全局设置 -> 服务连接管理 页面:

  • 单击 新建服务连接,并选择 通用Git 服务连接类型。

  • 单击 下一步,单击新建 服务授权/证书 ,输入账密信息。

    设置使用范围(可选私密:仅自己可见、公开:所有人可见、自定义:指定人员可见),完成后单击创建

  • 单击 确定 完成证书创建,回到服务连接页面,该证书会自动被选中,单击 创建 即可完成服务连接的创建。

3.创建流水线,配置代码源和构建任务

进入云效 Flow 首页 -> 我的流水线 页面,单击 新建流水线,选择空模板,可以选择 可视化编排 或者 YAML化编排 任一种方式创建流水线。下面以YAML化流水线编排为示例。

  • 输入代码源配置 YAML,在 serviceConnection 关键字后面键入空格会进行自动补全,可以看到刚才创建的那个服务连接,并进行选择。

    sources: 
      my_repo:
        type: git
        name: 我的代码源
        endpoint: http://myrepo.com/ns/code-repo.git  # 请换成你自己的代码仓库地址
        branch: master
        triggerEvents: push
        certificate:
          type: serviceConnection
          serviceConnection: <your-service-connection-id>  # 请替换成上述创建好的服务连接ID
  • 输入构建配置 YAML,在 runsOn关键字后面键入空格会进行自动补全,可以看到刚才创建的私有构建集群,并进行选择。

    sources: 
      my_repo:
        type: git
        name: 我的代码源
        endpoint: http://myrepo.com/ns/code-repo.git  # 请换成你自己的代码仓库地址
        branch: master
        triggerEvents: push
        certificate:
          type: serviceConnection
          serviceConnection: <your-service-connection-id>  # 请替换成上述创建好的服务连接ID
    stages:
      build_stage:
        name: 构建阶段
        jobs:
          build_job:
            name: 构建任务
            runsOn: <your-build-cluster-id>  # 请替换成上述创建好的私有构建集群ID
            steps:
              build_step:
                step: JavaBuild
                name: java构建
                with:
                  jdkVersion: "1.8"
                  mavenVersion: "3.5.2"
                  run: "mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip\n"
                  

根据实际情况填入你自己的代码仓库地址、服务链接ID、私有构建集群ID之后,保存并运行流水线。

4.运行流水线,执行代码拉取和构建任务

运行上述配置好的流水线,单击查看构建任务日志,可以看到构建任务运行在你自己的私有构建机器上,只需要你自己的私有构建机器能够访问到你的代码仓库即可,无需代码仓库出公网。

[executionStep begins at 2024-06-25 19:33:08]
[Runner Group Info]:
>> RunnerGroupId  : LAQvjyQ3c2o6tThV
>> RunnerGroupName : xxx的私有构建机
[Runner Info]:
>> ID        : c9eb21da7632472b8ce008309f4b4b4a
>> Tenant    : be-ohcezchm4lvoyrwyoicqzfnw
>> Server    : https://pre-devops-build1.aliyuncs.com
>> Version   : v0.1.2
>> CommitId  : e034663
>> BuildTime : 20240604102811
>> Workspace : /root/yunxiao/be-ohcezchm4lvoyrwyoicqzfnw/runner
>> InstanceId : i-m5e47rpumrh7hqkyotg0
[Build Machine Info]:
>> OS        : linux
>> Arch      : amd64
>> Hostname  : iZm5e47rpumrh7hqkyotg0Z
>> CPU       : 1 package(s), 2 core(s), 4 hardware thread(s)
>> Memory    : 8GB physical, 8GB usable
[Build Job Info]:
>> ID        : 26764fe5-a8bb-476c-9a41-35ab6bfb9d9a
>> Namespace : be-ohcezchm4lvoyrwyoicqzfnw
>> Executor  : Docker

更多参考

在了解了上述基本用法后,可以继续阅读以下文档,以探索更多使用场景:

  1. YAML语法介绍

  2. 流水线 Runner

  3. 流水线缓存