Xcode Bots:为Linux构建命令行应用程序

苹果通过Xcode 9引入了XCS Bots,它使iOS开发人员能够以最小的努力在内置CI系统中维护其构建。 目前,XCS仅在Mac系统上运行,这意味着-应用只能针对Apple生态系统iOS,macOS,watchOS和tvOS的平台进行编译。 但是由于Swift是开源的,并且可以在Ubuntu等Linux发行版上运行,因此XCS缺乏为此类平台编译库和命令行应用程序的可能性。

Docker进行了救援。
Docker提供了强大的界面,可根据您的特定需求虚拟化您的构建基础架构。 Docker有点像虚拟机,但是它没有创建整个虚拟机,而是使用主机操作系统的内核,从而显着提高了性能并减小了映像的大小。

为了使用Xcode Bots构建应用程序,要在Linux发行版上运行,您首先必须创建一个具有Swift Toolchain功能的Linux映像。

如果您的目标系统上没有安装docker(= XCS的运行位置),请下载并安装Docker Desktop App。

  • 下载适用于macOS的Docker

Docker使用Dockerfile构建具有所有必需依赖项的映像。 幸运的是,Docker Hub已经提供了一个。 前往Docker Hub获取官方的Swift Dockerfile。 确保选择使用最低必需Swift版本的Dockerfile。 将其保存到您的SPM项目目录。

假设您已经配置了用于构建项目的Bot,请使用以下代码行添加一个新的post脚本。 如果您未创建一个,则可以按照本教程进行操作。

  / usr / local / bin / docker build \ 
--no-cache \
-t swift:ubuntu \
-f路径/到/ Dockerfile“ $ {XCS_SOURCE_DIR} / your-git-folder-name”

生成映像后,现在就可以运行它,并提供您在上一个命令中创建的标签。 此外,在虚拟Docker容器中挂载主机系统的两个目录。 一个目录包含您的SPM项目,另一个目录包含您的项目的linux编译版本。 (注意:您必须使用绝对路径来挂载目录)。

将以下代码添加到Bot的发布脚本中。

  / usr / local / bin / docker运行\ 
- R M \
-v“ $ {XCS_SOURCE_DIR}” / main:/ main \
-v“ $ {XCS_SOURCE_DIR} / your-git-folder-name-$ {XCS_INTEGRATION_ID}”:/ out \
--name“您的git-文件夹名称-$ {XCS_INTEGRATION_ID}” \
swift:ubuntu /path/to/your/build-in-docker.sh

最后,我提供了一个脚本,该脚本在Docker容器开始构建项目后立即执行:

 内建docker.sh 
#!/ bin / bashcd项目
swift build -c版本--skip-update
cp -v .build / x86_64-unknown-linux / release /您的二进制名称/ out

现在,已编译的二进制文件应该在先前安装的文件夹中可用: "${XCS_SOURCE_DIR}/out-${XCS_INTEGRATION_ID}" 。 在集成结束之前,将二进制文件复制到安全的地方。

您可以在每个集成上运行docker容器并在其中编译源代码。 每次运行映像时,Docker都会为您生成一个新的Container。 在路径中使用触发后环境变量,将确保它们不会干扰。