1、 Mac下如何更改brew地址源
cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
echo $SHELL
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc
2、添加gitlab 官方库&安装gitlab-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
brew install gitlab-runner
3、初始化gitlab-runner
cd ~
gitlab-runner install
gitlab-runner start
4、gitlab-runner 注册
gitlab页面 上获取 url 和token
gitlab-runner register
注意: tags 是指定的执行器标签,shell 是执行的容器Executor,下面有用
YML中的数组写法
stages:
- build
- code_check
- test
- deploy
YML中的对象写法
people:
name: zhangsan
age: 14
gitlab-ci.yml配置的特定关键字
stages // stages定义在YML文件的最外层,它的值是一个数组,用于定义一个pipeline不同的流程节点
stage // 当前脚本所处的阶段,在script内部
script // 当前执行的脚步命令
tags // 指定当前脚本被哪个runner执行
sudo gitlab-runner verify
sudo gitlab-runner restart
# linux分两大类
# 1、RedHat系列:Redhat、Centos、Fedora等使用yum来管理包
sudo yum install apache2
# 2、Debian系列:Debian、Ubuntu等使用apt-get
sudo apt-get install apache2
(3)然后,安装完后的apache会在服务器下新增/var/www/html/目录, 这个目录就是存放网站资源的位置。
(4)最后我们只需要在每次部署的时候把生产的单页面拷贝到这个页面下,就能在浏览器上通过对应的 IP+路径 来访问Web页面了
B. 部署资源(每次pipeline都进行)
我下面的示例中,是通过 scp 这一命令,将本地机器代码远程拷贝到云服务器上。
因为这一命令需要输入密码,所以通过 sshpass 命令携带密码再执行scp:
sshpass -p $PASSWORD scp -r ./build $CUSTOM_USERNAME@$CUSTOM_IP:/var/www/html
这里说明一下,Gitlab有自定义变量的功能,例如我们觉得直接在YML中写入密码/账号等信息不太好,那么可以通过美元符号$写入一个预定义的变量,然后在Gitlab面板上输入它
stages: # 分段
- install
- eslint
- build
- deploy
cache: # 缓存
paths:
- node_modules
- build
install-job:
tags:
- sss
stage: install
script:
- npm install
eslint-job:
tags:
- sss
stage: eslint
script:
- npm run eslint
build-job:
tags:
- sss
stage: build
script:
- npm run build
deploy-job:
tags:
- sss
stage: deploy
script:
- sshpass -p $PASSWORD scp -r ./build $CUSTOM_USERNAME@$CUSTOM_IP:/var/www/html
使用 &符号可以定义一个片段的别名
使用 <<符号和 * 符号可以将别名对应的YML片段导入
.common-config: &commonConfig
only: # 表示仅在develop/release分支上执行
refs:
- develop
- release
install-job:
# 其他配置 ....
<<: *commonConfig
build-job:
# 其他配置 ....
<<: *commonConfig
YML的模块化功能
├── .gitlab-ci.h5.yml'
├── .gitlab-ci.bd.yml'
├── .gitlab-ci.wx.yml
└── .gitlab-ci.yml
.gitlab-ci.yml中这么写
include:
- '/.gitlab-ci.wx.yml'
- '/.gitlab-ci.bd.yml'
- '/.gitlab-ci.h5.yml'
gitlab-ci还提供了extend关键字,它的功能和前面提到的YML的片段导入的功能是一样的,
.common-config:
only: # 表示仅在develop/release分支上执行
refs:
- develop
- release
install-job:
# 其他配置 ....
extends: .common-config
build-job:
# 其他配置 ....
extends: .common-config
为什么要做缓存呢? 当然是为了重复运行pipeline的时候不会重复安装全部node_modules的包,从而减少pipeline的时间,提高pipeline的性能
问题: 它在运行下一个Job的时候,会默认把前一个Job新增的资源删除得干干静静
cache的作用就在这里体现出来了:如果我们把bulid生产的包的路径添加到cache里面,虽然gitlab还是会删除bulid目录,但是因为在删除前我们已经重新上传了cache,并且在下个Job运行时又把cache给pull下来,那么这个时候就可以实现在下一个Job里面使用前一个Job的资源了
这个关键字的作用是:将生成的资源作为pipeline运行成功的附件上传,并在gitlab交互界面上提供下载
Build-job:
stage: build
script:
- 'npm run build'
artifacts:
name: 'bundle'
paths:
- build/
这两个关键字可使用Docker的镜像和服务运行Job,具体可参考Docker的相关资料,这里暂不多加叙述
这两个关键字后面跟的值是tag或者分支名的列表
job:
# use regexp
only:
- /^issue-.*$/
- develop
- release
值为true/false, 表示当前Job是否允许允许失败。
job1:
stage: test
script:
- execute_script_that_will_fail
allow_failure: true
当前Job的失败重试次数的上限
Job:
script: rspec
timeout: 3h 30m
表示当前Job在何种状态下运行,它可设置为3个值
on_success: 仅当先前pipeline中的所有Job都成功(或因为已标记,被视为成功allow_failure)时才执行当前Job 。这是默认值。
on_failure: 仅当至少一个先前阶段的Job失败时才执行当前Job。
always: 执行当前Job,而不管先前pipeline的Job状态如何。
参考资料:
https://docs.gitlab.com/runner/executors/#selecting-the-executor
https://zhuanlan.zhihu.com/p/184936276
https://www.jianshu.com/p/2b4c44babbbd