前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何接入远程 OS X 物理机进行 Jenkins 流水线构建

如何接入远程 OS X 物理机进行 Jenkins 流水线构建

作者头像
陈少文
修改2021-01-14 10:51:14
1.1K0
修改2021-01-14 10:51:14
举报
文章被收录于专栏:陈少文陈少文

本文同样适用于接入 ARM、MIPS 架构,FreeBSD、Windows 系统的物理机,如果 Jenkins 能连上构建机,可以跳过 Frp 部分。

1. 遇到的问题

在以 Kubernetes 为基础设施的场景下,Jenkins 构建流水线时,将为每一条流水线单独创建一个 Pod 用于构建。Pod 中的容器环境可以根据需要自定义设置,扩展非常方便,能够满足绝大多数的需求。

其中有一个特例,那就是构建苹果生态链的应用,例如 IOS、OS X 应用。由于没有 OS X 的容器镜像,只能采用物理机进行构建。还有一种方式是,将 OS X 安装在虚拟机中,将虚拟机接入 Jenkins 进行构建,当然也可以直接导入其他人共享的 OS X VM 。

这都会遇到一个问题,那就是 Jenkins Master 无法直接访问 OS X 系统,网络不通,无法添加 OS X 的构建节点。

本篇主要是以 Frp 作为穿透工具,打通网络,对 IOS 应用、OS X 应用提供 Jenkins 流水线构建的解决方案。

2. 解决方案

如下图,通过 Frp 可以打通 Jenkins 与物理机之间的网络。

  • 第一步,需要将 Frp 的 Server 端部署到 Jenkins Master 可以直接访问的环境上,这些环境包括物理机、VM、容器环境。
  • 第二步,在 Mac 物理机上运行 Frp Client ,将 OS X 的 SSH 服务暴露在 Frp Server 上。
  • 第三步,在 Jenkins 上添加 OS X 节点,使用 Label 选择 Mac 机器进行构建。

3. 配置相关组件

3.1 OS X 系统配置

下图是我测试的 OS X 系统版本:

  • 关闭防火墙
  • 在系统设置中,找到【Sharing】,打开 Remote Login

这一步是为了 Jenkins Master 能够远程登录到 OS X 上。这里的 172.31.140.36 是内网的 IP,Jenkins 无法直接访问。

3.2 搭建并配置 Frp 服务

Frp 服务端和客户端的配置,请参考文档 使用 frp 将本地服务发布到公网

下面贴出的是客户端的配置:

代码语言:javascript
复制
[common]
server_addr = 139.198.120.81
server_port = 5443
token = xxxxxxxxxxxx

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222

这里将本地的 OS X 的 22 端口映射到公网 139.198.120.81:2222 上。

执行命令启动 Frp 客户端。如果是生产环境,需要托管这个服务。

代码语言:javascript
复制
./frpc -c ./frpc.ini

启动之后,会弹框报错,截图如下:

需要去系统设置->安全与隐私中,解锁运行权限,再运行 Frp 。下图中,由于已经允许,因此并没有出现 Frp 相关的提示字样。

再次执行 ./frpc -c ./frpc.ini ,弹框会新增 Open 选项。

点击 Open 之后,可以看到 Frp 客户端已经正常运行。

代码语言:javascript
复制
2020/11/22 08:59:06 [I] [service.go:288] [97da648b05e7e343] login to server success, get run id [97da648b05e7e343], server udp port [0]
2020/11/22 08:59:06 [I] [proxy_manager.go:144] [97da648b05e7e343] proxy added: [ssh]
2020/11/22 08:59:06 [I] [control.go:180] [97da648b05e7e343] [ssh] start proxy success

3.3 Jenkins 新增节点配置

Jenkins 中的配置主要分为如下几步:

  1. 进入 Jenkins 后台的节点管理页面
  1. 新增 OSX 节点,勾选 Permanent Agent
  1. 配置节点信息

如图进行配置,Host 设置为 Frp Server 的地址,点击【高级】,可以配置 SSH 的端口号为 2222 。

这里需要添加一个凭证,用于登录 OS X 。为了简便,我直接使用的是账户和密码。如果对安全有较高要求,可以使用 SSH Key 进行认证。

  1. 启动节点并查看节点列表

上一步完成之后,节点默认会直接启动,也就是初始化节点,运行一个进程,用于与 Master 通信。

在初始化的过程中,在 OS X 系统上,会出现授权的弹框。如下图,点击 Open

返回节点列表页面,将会看到 OS X 节点。

  1. 查看 Mac 物理机上初始化文件

回到 OS X 上,可以看到工作目录下面,初始化了一系列文件。

代码语言:javascript
复制
cd /Users/shaowenchen/Downloads

tree -L 3

.
├── remoting
│   ├── jarCache
│   └── logs
│       ├── remoting.log.0
│       └── remoting.log.0.lck
├── remoting.jar
└── support
    └── all_2020-11-22_01.07.11.log

4. 测试流水线

创建自由风格的流水线,粘贴如下内容:

代码语言:javascript
复制
pipeline {
  agent {
    node {
      label 'osx'
    }

  }
  stages {
    stage('get env info') {
      steps {
        sh 'uname -a'
      }
    }
  stage('upload file') {
        steps {
            sh "echo `date` >> newfile.txt"
        }
   post {
    success {
        archiveArtifacts 'newfile.txt'
      }
    }
    }
  }
}

执行完成之后,可以看到如下结果:

在 OS X 的工作目录中,可以查看到相关的工作目录和文件:

代码语言:javascript
复制
 tree -L 3
.
├── newfile.txt
├── remoting
│   ├── jarCache
│   └── logs
│       ├── remoting.log.0
│       ├── remoting.log.0.1
│       ├── remoting.log.1
│       ├── remoting.log.2
│       └── remoting.log.3
├── remoting.jar
├── support
│   ├── all_2020-11-22_01.07.11.log
│   ├── all_2020-11-22_01.30.36.log
│   └── all_2020-11-22_01.35.10.log
└── workspace
    ├── aaaak2c24
    │   ├── a
    │   └── a@tmp
    ├── osx
    └── osx@tmp

从结果看,流水线在 OS X 执行命令之后,归档了构建产物,符合预期。这里如果是 IOS 构建,只需要在 OS X 系统上安装 XCode 工具,在流水线中执行构建,归档之后,同样能下载到 IOS 安装包。

作者: Shaowen Chen

原文链接: https://www.chenshaowen.com/blog/how-to-run-the-pipeline-on-remote-osx.html

更多精彩内容,请关注公众号:问其
更多精彩内容,请关注公众号:问其

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 遇到的问题
  • 2. 解决方案
  • 3. 配置相关组件
    • 3.1 OS X 系统配置
      • 3.2 搭建并配置 Frp 服务
        • 3.3 Jenkins 新增节点配置
        • 4. 测试流水线
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档