Jenkins+Git+ReactNative持续集成环境

如果你是刚拿到一台mini,又刚好是只有无线鼠标。这里有个小技巧,通过键盘来让mini链接鼠标
https://www.cnblogs.com/xiaoqi/p/docker-jenkins-cicd.html

1、安装Docker

2、搭建jenkins环境

http://www.cnblogs.com/zhanggui/p/6227832.html

附:
卸载Jenkins
更改jenkins主题
一些采坑记录
jenkins jobs迁移

3、安装Jenkins相关插件

jenkins初始化如果选的是新手的话,会默认安装一些常用的插件

4、安装Xcode、AndroidStudio、VSCode

5、安装ReactNative环境

// 安装brew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update // 更新brew
brew doctor // 确保brew是安全可靠的

// 使用brew安装node和npm
brew install node
brew install npm

// 安装nrm来管理npm源
npm install nrm -g
nrm add taobao https://registry.npm.taobao.org/ // 添加淘宝源

// 安装react-native环境
npm install -g yarn react-native-cli
yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global

// 安装Cocopods(Xcode包管理工具)
sudo gem install cocoapods
pod install 
// 如果pod install执行失败,就执行下面的,失败了就多执行几次
pod setup

// 私服sinopia配置
# 添加npm私有源
nrm add sinopia 私有服务地址
# 切换到私有源
nrm use sinopia
# 登录私有源
npm login
Username: 私有服务用户名
Password: 私有服务密码
Email: 私有服务邮箱

// 需要对@符号的库进行重定向到npm的公服,不然无法解析,会报错
npm config set "@babel:registry" http://registry.npmjs.org/
npm config set "@sentry:registry" http://registry.npmjs.org/
npm config set "@react-navigation:registry" http://registry.npmjs.org/
npm config set "@react-native-community:registry" http://registry.npmjs.org/
npm config set "@jest:registry" http://registry.npmjs.org/
npm config set "@cnakazawa:registry" http://registry.npmjs.org/
npm config set "@types:registry" http://registry.npmjs.org/
6、Facebook依赖库的配置

7、fastlane安装

// 安装xcode命令行工具(如果安装了Xcode,该工具会自动安装)
xcode-select --install
// 安装ruby版本管理工具rvm
 curl -L get.rvm.io | bash -s stable 
// 更新ruby到2.4.1
rvm install 2.4.1
rvm use 2.4.1
// 安装fastlane
sudo gem install fastlane -NV

常见错误和解决方案:

  • fastlane安装中遇到的问题
  • "Could not find bundler" error
    执行 gem install bundle
  • Unable to locate Xcode. Please make sure to have Xcode installed on your machine
    在Xcode中没有设置“Command Line Tools”:打开Xcode偏好设置,选择"Locations"选项卡,选择相应的“Command Line Tools”即可

8、fastlane配置

配置git
iOS使用fastlane match来管理代码签名
使用fastlane match自动和手动管理证书
iOS 用fastlane进行团队证书管理
Fastlane证书管理(二):match

常见错误和解决方案

  • Could not retrieve response as fastlane runs in non-interactive mode
    问题分析:
    这个问题是由于本地有持续集成的环境变量,导致交互模式的命令会不去执行,所以解决办法就是在执行命令前先把这些环境变量取消
    问题解决:
    unset TRAVIS CI JENKINS_HOME JENKINS_URL APPCENTER_BUILD_ID && 你的命令
    fastlane源码中的判断

9、jenkins 中 shell 脚本

暂时不公布

10、基于钉钉办公软件做打包推送

  • 在jenkins构建后操作中添加两个Post build task
  • 打包成功的脚本
if [ ${SendNotification} == true ];then

# 钉钉自定义机器人access_token
API_KEY="xxxx"

SERVER_LIST=$(cat $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log | tr "," "\n" | grep "SSH: Disconnecting configuration" | awk -F" " 'BEGIN{ORS=","} {print $4}'|sed 's/.$//'| sed "s/,grep,Disconnecting//")

# 发送消息到钉钉
curl "https://oapi.dingtalk.com/robot/send?access_token=${API_KEY}"  -H 'Content-Type: application/json'  -d  '{"msgtype": "markdown",  "markdown": {"title":"有新包出炉啦(iBer)","text": "
<font color=#3396FA>'${BUILD_USER}'</font> 执行 <font color=#3396FA>'${JOB_NAME}'</font> 打包 **<font color=#3396FA>成功</font>**
   > CodeBranch:'${GIT_BRANCH}'\n
   > AppVersion:'${AppVersion}'\n
   > AppBuild:'${AppBuild}'\n
   > ProjectType:'${ProjectType}'\n
   > ReleaseType:'${ReleaseType}'\n

 [查看APP>>](https://www.pgyer.com/my)
"}}'

fi
  • 打包失败的脚本
if [ ${SendNotification} == true ];then

# 钉钉自定义机器人access_token
API_KEY="xxxx"

SERVER_LIST=$(cat $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log | tr "," "\n" | grep "SSH: Disconnecting configuration" | awk -F" " 'BEGIN{ORS=","} {print $4}'|sed 's/.$//'| sed "s/,grep,Disconnecting//")
curl "https://oapi.dingtalk.com/robot/send?access_token=${API_KEY}"  -H 'Content-Type: application/json'  -d  '{"msgtype": "markdown",  "markdown": {"title":"打包失败啦(iBer)","text": "
<font color=#FD5C2D>'${BUILD_USER}'</font> 执行 <font color=#FD5C2D>'${JOB_NAME}'</font> 打包 **<font color=#FD5C2D>失败</font>**
   > CodeBranch:'${GIT_BRANCH}'\n
   > AppVersion:'${AppVersion}'\n
   > AppBuild:'${AppBuild}'\n
   > ProjectType:'${ProjectType}'\n
   > ReleaseType:'${ReleaseType}'\n

 [查看错误信息>>]('${BUILD_URL}')
"}}'

fi

11、基于企业微信办公软件做打包推送

  • 在jenkins构建后操作中添加两个Post build task
  • 打包成功的脚本
if [ ${SendNotification} == true ];then

# 企业微信机器人api_key
API_KEY="xxxx"

SERVER_LIST=$(cat $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log | tr "," "\n" | grep "SSH: Disconnecting configuration" | awk -F" " 'BEGIN{ORS=","} {print $4}'|sed 's/.$//'| sed "s/,grep,Disconnecting//")

# 发送消息到企业微信
curl -s -X POST \
  "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
        "msgtype": "markdown",
        "markdown": {
            "content": "<font color=\"info\">'${BUILD_USER}'</font> 执行 <font color=\"info\">'${JOB_NAME}'</font> 打包 **<font color=\"info\">成功</font>**
   > CodeBranch:'${GIT_BRANCH}'
   > AppVersion:'${AppVersion}'
   > AppBuild:'${AppBuild}'
   > ProjectType:'${ProjectType}'
   > ReleaseType:'${ReleaseType}'
 
   [查看APP>>](https://www.pgyer.com/my)"
        }
}'

fi
  • 打包失败的脚本
if [ ${SendNotification} == true ];then

# 企业微信机器人api_key
API_KEY="xxxx"

SERVER_LIST=$(cat $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log | tr "," "\n" | grep "SSH: Disconnecting configuration" | awk -F" " 'BEGIN{ORS=","} {print $4}'|sed 's/.$//'| sed "s/,grep,Disconnecting//")
curl -s -X POST \
  "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
        "msgtype": "markdown",
        "markdown": {
            "content": "<font color=\"warning\">'${BUILD_USER}'</font> 执行 <font color=\"warning\">'${JOB_NAME}'</font> 打包 **<font color=\"warning\">失败</font>**
   > CodeBranch:'${GIT_BRANCH}'
   > AppVersion:'${AppVersion}'
   > AppBuild:'${AppBuild}'
   > ProjectType:'${ProjectType}'
   > ReleaseType:'${ReleaseType}'
   > HotType:'${HotType}'
   > HotBundle:'${HotBundle}'
 
   [查看错误信息>>]('${BUILD_URL}'console)"
        }
}'

fi

12、给局域网其他机器访问

13、RN报错收集

  • Android 报 glog-0.3.4/test-driver Couldn’t follow symbolic link
    解决方案:在项目根目录下执行下面命令
    unlink node_modules/react-native/third-party/glog-0.3.4/test-driver
  • Xcode10降到Xcode9.4

构建基于 Docker + Jenkins + Sahi 的 Web UI 自动化测试环境

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352