自动部署,Ci的最接底气的中文使用教程

2019-10-01 14:35 来源:未知

相信大家对Travis Ci已经不再陌生了,Github上已经有大部分的项目已经采用了它。

鉴于使用Hexo部署网站的繁琐性,便利用软件开发中的持续集成工具Travis CI来帮助完成这一繁杂过程。

Carthage v0.26.2(原文链接)

Carthage的目标是用最简单的方式来管理Cocoa第三方框架。

基本的工作流如下:

1、创建一个Cartfile,包含你希望在项目中使用的框架的列表

2、运行Carthage,将会获取列出的框架并编译它们

3、将编译完成的.framework二进制文件拖拽到你的Xcode项目当中

Carthage编译你的依赖,并提供框架的二进制文件,但你仍然保留对项目的结构和设置的完整控制。Carthage不会自动的修改你的项目文件或编译设置。

Travis Ci是一个基于云的持续集成项目,目前已经支持大部分主流语言了,如:C、PHP、Ruby、Python、Nodejs、Java、Objective-C等等,Travis Ci与Github集成非常紧密,官方的集成测试托管只支持Github项目,不过你也可以通过Travis Ci开源项目搭建一套属于自己的方案。

Travis CI


CI是Continuous Integration的缩写,持续集成之意。

持续集成是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

图片 1

Continuous Integration

Travis CI 是目前新兴的开源持续集成构建项目,用来构建托管在GitHub上的代码。它提供了多种编程语言的支持,包括Ruby,JavaScript,Java,Scala,PHP,Haskell和Erlang在内的多种语言。许多知名的开源项目使用它来在每次提交的时候进行构建测试,比如Ruby on Rails,Ruby和Node.js。

Travis CI是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在GitHub托管的代码。这个软件的代码同时也是开源的,可以在GitHub上下载到,尽管开发者当前并不推荐在闭源项目中单独使用它。

Carthage 和 CocoaPods的区别

CocoaPods是已存在很长时间的Cocoa依赖管理器,那么为什么要创建Carthage呢?

首先,CocoaPods默认会自动创建并更新你的应用程序和所有依赖的Xcode workspace。Carthage使用xcodebuild来编译框架的二进制文件,但如何集成它们将交由用户自己判断。CocoaPods的方法更易于使用,但Carthage更灵活并且是非侵入性的。

CocoaPods的目标在它的README文件描述如下:

…为提高第三方开源库的可见性和参与度,创建一个更中心化的生态系统。

Carthage创建的是去中心化的依赖管理器。它没有总项目的列表,这能够减少维护工作并且避免任何中心化带来的问题(如中央服务器宕机)。不过,这样也有一些缺点,就是项目的发现将更困难,用户将依赖于Github的趋势页面或者类似的代码库来寻找项目。

CocoaPods项目同时还必须包含一个podspec文件,里面是项目的一些元数据,以及确定项目的编译方式。Carthage使用xcodebuild来编译依赖,而不是将他们集成进一个workspace,因此无需类似的设定文件。不过依赖需要包含自己的Xcode工程文件来描述如何编译。

最后,我们创建Carthage的原因是想要一种尽可能简单的工具——一个只关心本职工作的依赖管理器,而不是取代部分Xcode的功能,或者需要 让框架作者做一些额外的工作。CocoaPods提供的一些特性很棒,但由于附加的复杂性,它们将不会被包含在Carthage当中。

如果你是Github的爱好者,那么Travis绝对值得一试,目前我已经把托管在Github上的部分项目使用了Travis Ci来做集成测试了。

工作原理


当我们每次进行push等动作时,Travis CI 会自动检测我们的提交,然后根据配置文件,搭建虚拟主机来运行测试,构建等指令。在这里,就是运行hexo g d等命令来自动生成、部署静态网页。

图片 2

Travis CI

Travis CI 官方文档:https://docs.travis-ci.com/

安装Carthage

Carthage的安装有多种选择:

1、Installer:Carthage提供OS X平台的pkg安装文件,你可以从Github的最新release中找到,按照引导一步步安装即可。

2、Homebrew:你可以在你的OS X平台中简单的使用Homebrew命令行brew updatebrew install carthage来安装Carthage工具。(注意:如果在此之前你已经安装了二进制版本的Carthage,你应该删除它/Library/Frameworks/CarthageKit.framework

3、From source:如果你想安装最新的开发版本(可能存在稳定性和兼容性的问题),你只需要clone本仓库的master分支,然后运行make install.。需要Xcode 9.0 (Swift 4.0)

如下图:

具体配置


添加框架到应用程序

安装完Carthage后,你能够使用它来添加框架到你的项目。注意Carthage只支持动态框架,而后者只存在于iOS 8以上(以及任意版本的OS X)。


Hexo 搭建

这里使用Hexo+Next+GitHub Pages组合示范过程,具体过程不再赘述。网站源码放到Hexo分支,博客的静态文件部署到master分支。

图片 3

hexo源代码

开始使用

如果你构建的平台是OS X

1、创建一个Cartfile,将你想要使用的框架列在里面

2、运行carthage update,将获取依赖文件到一个Carthage.checkout文件夹,然后编译每个依赖

3、在应用的targets--“General”设置下,在“Embeddel Binaries”组下,将你想使用的framework从Carthage/Build目录下拖拽进去。

另外,你需要去copy调试符号,以便在OS X上调试和生成崩溃报告。

1、在你应用target的“Build Phases”设置标签中,点击“+”号并选择“New Copy Files Phase”。

2、点击“Destination”下拉菜单并选择“Products Directory“。

3、为每个你使用的框架拖放相应的dSYM文件。

如果你构建的平台是iOS, tvOS, or watchOS

1、创建一个Cartfile,将你想要使用的框架列在里面

2、运行carthage update,将获取依赖文件到一个Carthage.checkout文件夹,然后编译每个依赖

3、在应用的targets--“General”设置下,在“Embeddel Binaries”组下,将你想使用的framework从Carthage/Build目录下拖拽进去。

4、在项目的targets--"Build Phases"设置下,点击“+”并选择"New Run Script Phase",然后创建一个运行脚本,在其中指定shell(例如/bin/sh),将以下内容添加到shell下面的脚本区域:

/usr/local/bin/carthage copy-frameworks

5、在“Input Files”下添加你想使用的framework的路径。例如:

$(SRCROOT)/Carthage/Build/iOS/Result.framework

$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework

$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework

6、Add the paths to the copied frameworks to the “Output Files”, e.g.:

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Result.framework

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveCocoa.framework

With output files specified alongside the input files, Xcode only needs to run the script when the input files have changed or the output files are missing. This means dirty builds will be faster when you haven't rebuilt frameworks with Carthage.

This script works around anApp Store submission bugtriggered by universal binaries and ensures that necessary bitcode-related files and dSYMs are copied when archiving.

With the debug information copied into the built products directory, Xcode will be able to symbolicate the stack trace whenever you stop at a breakpoint. This will also enable you to step through third-party code in the debugger.

When archiving your application for submission to the App Store or TestFlight, Xcode will also copy these files into the dSYMs subdirectory of your application’s.xcarchivebundle.

那么问题来了,Travis Ci的中文文档太少了,于是我硬着头皮写了一篇简洁的教程,如有不足之处,请勿吐槽!

设置 Travis CI

登陆 Travis CI,使用 GitHub 账户登录,它会自动关联 GitHub 上的仓库。点击右上角用户查看 GitHub 仓库,并选择要启动的项目,这里选择yourname/yourname.github.io

点击设置按钮,进入设置选项,开启相关服务,Build only if .travis.yml is present:指只在有.travis.yml时改变了才构建;Build pushes:push 完分支后开始构建。

图片 4

设置

访问仓库是需要权限的,下面配置权限信息。

对于上述的两个平台

在整个过程当中,Carthage将创建一些build artifacts,其中最重要的是Cartfile.lock文件,里面将列出每个框架的具体版本,确保你提交了这个文件到版本控制工具里面(如Git、SVN),因为每个用到项目的人都需要它来编译相同版本的框架。

(可选地)添加build phase以警告过时的依赖项

您可以添加一个Run Script phase,当你依赖项过时的时候会自动警告您。

在项目的targets--"Build Phases"设置下,点击“+”并选择"New Run Script Phase",然后创建一个运行脚本,在其中指定shell(例如/bin/sh),将以下内容添加到shell下面的脚本区域:

/usr/local/bin/carthage outdated --xcode-warnings

首先我们的要有一个Github账号,接下来就打开Travis Ci的官网,通过Github进行授权登录,一系列的验证过后。

配置 Acess Token

登陆GitHub,进入设置界面,在Personal access tokens页面下点击右上角的Generate new token按钮会生成新的token,随后输入密码,取个名字,勾选一些权限

图片 5

Personal access tokens

拷贝 token 并在 Travis CI 页面中配置Environment Variables

图片 6

Environment Variables

Travis CI 已获得仓库权限,现在可以给它相关操作指令了。

Swift二进制框架下载兼容性

Carthage将确认下载的Swift(和混合的objective - c / Swift)框架是与本地使用的相同版本的Swift构建。 如果有版本不匹配,Carthage将继续从源代码构建框架。 如果框架不能从源代码构建,Carthage将失败。

因为Carthage使用xcrun swift --version的输出来确定本地Swift版本,确保使用您想要使用的Swift工具链运行Carthage命令。对于大多数情况,不需要额外的去注意整个问题。但是,举例来说,如果你使用Xcode8.x 去编译一个Swift2.3的项目,一种为carthage bootstrap指定默认swift的方法是使用以下命令:

TOOLCHAINS=com.apple.dt.toolchain.Swift_2_3 carthage bootstrap

我们得把Github的项目同步到Travis Ci的管理后台,然后针对某个项目打开开关。

配置 .travis.yml

.travis.yml 内容如下:

language: node_js  #设置语言

node_js: stable  #设置相应的版本

install:
  - npm install  #安装hexo及插件

script:
  - hexo cl  #清除
  - hexo g  #生成

after_script:
  - cd ./public
  - git init
  - git config user.name "yourname"  #修改name
  - git config user.email "your email"  #修改email
  - git add .
  - git commit -m "update"
  - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master  #GH_TOKEN是在Travis中配置token的名称

branches:
  only:
    - hexo  #只监测hexo分支,hexo是我的分支的名称,可根据自己情况设置
env:
 global:
   - GH_REF: github.com/yourname/yourname.github.io.git  #设置GH_REF,注意更改yourname

.travis.yml 配置完成后,还需要注意一个问题,即 Travis 在创建虚拟机后,如何利用npm install安装 Hexo 及其依赖文件。进行过本地部署的话就不难发现,我们所需要的依赖文件会自动添加到 package.json 列表中,因此 package.json 文件不可少。

图片 7

package.json

配置Hexo时还会生成node_modules文件夹,这是 Hexo 及其依赖包的位置,它和 package.json 文件列表是对应的。因此 node_modules 文件夹不需要 push 远程仓库,CI平台的虚拟机会自己创建的。

另外注意这些文件的格式,尤其是.yml的格式,稍有偏差就有可能出问题。

使用Carthage去运行项目

在你完成上述步骤并将你的改变推送后,项目的其他使用者只需要获取存储库,并且运行carthage bootstrap来开始使用你添加的frameworks。

例如:MessageDisplayKit已经打开了开关,进行持续继承项目了。

Push 到 GitHub

在_posts目录下新建文章并 push 分支,登陆 Travis CI 即可发现已经检测到分支变化并开始构建,其中job log记录了构建的过程。

图片 8

hexo deployer

自动部署完成,打开网页查看效果

图片 9

post

向单元测试或框架添加框架

对任何任意target的依赖性使用Carthage非常类似于前面提到的给应用添加frameworks。 主要的区别在于frameworks如何在Xcode中设置和链接。

因为单元测试target在其“General”设置选项卡中缺少“Linked Frameworks and Libraries”部分,所以必须将构建的frameworks拖动到“Link Binaries With Libraries”构建阶段。

在“Build Settings”选项卡下的测试目标中,将@ loader_path/Frameworks添加到“Runpath Search Paths”(如果尚未存在)。

在极少数情况下,你可能想将每个依赖复制到你构建的产品中(例如,在外部框架中嵌入依赖项,或确保测试包中存在依赖性)。 为此,使用“Framework”目标创建一个新的“Copy Files”构建阶段,然后在那里添加框架引用。


参考资料

  • Hexo 自动部署到 Github
  • 手把手教你使用Travis CI自动部署你的Hexo博客到Github上
  • 使用 travis-ci 自动部署 hexo 博客

升级框架

如果你改动了你的Cartfile,或者你想升级到框架的最新版本(服从于你指定的需求版本),执行carthage update命令可以达到目的。

如果你只是想更新一个或者

如果您只想更新一个或特定的依赖项,在update命令后面使用空格分隔开。例如:

carthage update Box

或者

carthage update Box Result

接下来我们就一一详细讲解怎样加入Travis Ci持续集成工具的过程。

嵌套依赖关系

如果你想添加到项目中的框架的依赖已经出现在Cartfile中了,Carthage将会为你自动检索它们。然后,你必须从Carthage/Build 文件夹将它们自己拖动到你的项目中。

如果项目中的嵌入框架具有对其他框架的依赖性,则必须将它们链接到应用程序目标(即使应用程序目标对该框架没有依赖性,也从不使用它们)。

步骤:

使用子模块的依赖关系

通常,Carthage将会直接到你项目的目录下检查依赖的源文件,让你在选择时提交或忽略它们。如果你想有依赖项作为Git子模块(或许这样你可以提交和推送改变),你可以运行carthage update或者带有--use-submodules标志的carthage checkout。

当你运行上述命令后,Carthage将.gitmodules和.git/config文件写入你的存储库,并在依赖项的版本更改时自动更新子模块。

1.先创建.travis.yml文件(使用VIM也可以,你爱怎么来就怎么来吧!)

自动重建依赖关系

如果要在开发期间处理依赖项,并希望在构建你的父项目时自动重新构建它们,则可以添加调用Carthage的 Run Script构建阶段,如下所示:

/usr/local/bin/carthage build --platform "$PLATFORM_NAME" --project-directory "$SRCROOT"

需要注意的是,在执行此操作之前应该使用子模块,因为不应直接修改简单的检出。

TAG标签:
版权声明:本文由金沙澳门官网4166发布于文物考古,转载请注明出处:自动部署,Ci的最接底气的中文使用教程