what-did-i-see-during-sleep-at-work

在半小时内睡着了 12 次

面前的 代码展开 平铺成道路

昏暗的路灯下 骑着自行车

在上中西路路口一路向北骑车

关闭了桌面窗口 醒来发现还在

在龙腾大道路口拐弯进了伞道口

ios 输入法 选了三次哭笑不得的emoji

眼睛没法聚焦

大木桥路下外卖左转

看到一切都是两份

一秒刷一次 快疯了

看到天花板有个白色的电风扇

看到 vscode 标签页左转过了淮海中路

release-procedures-notes

命名改动对应表

Current Name Old Name Comment
FirstPartyOfferEntitlement Kanas 喀纳斯湖?
FirstPartyCheckout Venice 威尼斯商人?
PlayerSearch Chihiro 千寻找父母?
CommerceProvision Paragon 新加坡商场?
ValueTransfer Citadel
PlayerInfractionLedger Guardiola 瓜迪奥拉做假账?
PlayerOwnership Shadowbroker
PlayerControl Porpoise 江豚
PlayerSettings ibex 野山羊
SubscriptionRewards hyas 泰坦之女
Healthy-play-* saola 中南大羚

checklist

曾经有过,人工熟练后逐渐失去效用

为了避免遗漏 component,在自动化搞定之前

还是开了个 Excel

后来真的发现不好用

paragon 相关

在每次 release paragon 的时候,需要手动检查 git log

  1. 在 nucleus 下,git fetch 当前release分支
  2. git log,确认commit id是否包含当前 CHG 分支的内容
    1
    git log liquibase.data/src/main/resources/changelogs/paragon/
  3. 如果有变动更新,通知 Yanqin 或 Guangyao

Audit Tool & Component Audit

每次默认一定要有的 nucleus, nexus, paragon

DOUBLE CHECK 不要漏 component

Keymaster 和 Access 需要手动检查

Keymaster 用 releases/rel550

Access 用 releases/rel551

Saola 的 Saola.infra 下,存在其依赖组件,需要用各自单独的 Pipeline 去 build image,比如说 Kafka,Cassandra, Zookeeper

Code Merge 相关

如果遇到了权限问题, /home/${user}/code_merge/${repo} 下执行 git remote -v 确认 url 的 token 是否配置正常

如果不正常,换成带有 secret_token 的 link

如果还是遇到了权限问题,而且gitlab 的账号配置没问题的话,再重新设置一次一模一样的 url

1
sudo git remote set-url origin https://svc_candi_git_admin%40ea.com:${token}@gitlab.ea.com/eci/${repo}.git

如果 merge conflict,通知完 Yanqin / James / Kyle 之后问 Owner

然后登上 testinfra-master 进 /home/root/code-merge/ 里面找到对应 repo

git status 确认哪个冲突了,没有的话手动 merge 一把

改完之后 add, commit, push 一条龙

最后一定一定要去再执行一次 code-merge pipeline,

目的是为了删掉 CHG branch,同时保证真的所有改动都合并进 release 了

release image 相关

在 Release${repo} 执行完毕后,通常结尾会给出一个自动跳转至 upload binary 的 job

需要确认这个 job 是否执行成功,否则将不会有更新推送至 Artifactory

需要根据 commit 标识符人工确认 gitlab ,image 是否包含了目标对应的改动

如果邮件 / CM 里指定的 component 名字太模糊,需要去确认具体的内容

如果遇到了服务器磁盘容量不够,no space left 之类的情况,先问问 Jen 执行 docker prune

实在没啥办法又很紧急的话,发邮件问 24x7

STG 细节

先铺 nexus 再铺 nucleus 可以节省时间

并不能在铺完 STG 之后立马执行 Sanity Check,需要延迟 2 分钟左右,等待 service 完全启动

Sanity Check

先 disable 所有 sanity check 自动 job

触发 sync-rs,更新一下新的代码,编译一遍

然后再 enable sanity check,会自动一小时执行一次

如果和 sync 同时执行的话,会触发冲突,需要手动修

Recut 相关

Wiki page上的原有 image 记录需要用删除线划掉,并且删掉 review 标签

版本号会从 CHGxxx 变为 CHGxxx_1st_cut

Regression 注意事项

先要检查 Sanity 对应组件的部分 Job 是否 Success,确认铺 STG 是否完成

nexus ui failed, use new test cases

1
com.ea.eadp.nexus.portal.tests.newconsole.TestScenarios_Console_AccountSelfRecovery#testDisabledAccountRecovery_trustworthy_NewEmail

设置 code client for rerun,减少出错反复运行调试的准备工作时间开销

发起人的邮件填公用自动账号 EADPAutoExReportingS@ea.com

至少开 2 台 VM,可以作为一台出玄学故障的备份,通常会根据 Component 的数量和种类开 4 台

晚上开的话可以冲到 8 台 10 台,因为是使用率低谷

选择 Component 的时候要注意名字结尾是否标注了 Int,Int 仅用于 CHGxxx-INT 分支

shadowbroker 单独跑

risk, risk-ui 单独运行

nexus, nexus-ui 单独运行

在 cut 当日,下午一点前发起 regression

确认 branch 设置,component list

Keymaster 跑 Local

Int-Regression 注意事项

(legacy) eaid-proxy-int 仅在 INT 时加入

如下 Components 仅在 CD Regression 时加入

  • consoletracking
  • identity
  • infra
  • batch-framework

Sign-off 相关

如果当前 production 中包含若干 INT

同一个 repo 在先前 A 版和 B 版里都有

那么 A 如果没签可以签掉

而如果这个 repo 在 C 版 里也有

但 C 不是当前 prod

那么 B 不能直接签

可以在 cm 里的详情找到其所属 production

也可以在 production 的 wiki page 里确认到

我的催命对象是 nexus 组在 US 的那批人

还有在上海的几个,主要看 bundle

周一来的时候别急着催 US 方面,他们还在周日晚上

test-day-15

手上有三个任务,一下子有点不知所措

比起每天每个任务都推进一点点而言,更希望每天可以直接解决一个

今天在 Yanqin 的帮助下准确地在 Artifactory 上找到了不同 CodeRepo 所对应的 liquibase.data , nexus 的是 liquibase.data.cassandra

然后就是在 mysql-deploy.sh 里面直接判断是哪个 repo 了

还是在 artifactory 上翻了好久,甚至还没完全找到每个 repo 各自分别在哪里

明天来也许可以解决这个 404 的故障,而另一个还得再看看会不会复现

Onebox setup 页面的 bug 今天还没成功复现出来,说是在不同的选项选中时,生成的编译命令会出错。也许和页面生命周期和 state 有关联,还涉及到了 hook 和 refs

其实完全不懂,回家还得恶补

test-day-14

又是一个新的 cut,我的分工依旧不多,其实想多做一点事情的

在 keymaster build image 的时候,发现服务器磁盘空间不足,发了邮件去问了 24x7 解决

组会的时候听 Yubo Li 介绍了他上份工作的内容,觉得很厉害

如果是我的话不知道会怎么样处理

接到了新的两个支线任务,整理 component audit pipeline 的 console output,

如果是有包含 error 或者 exception 的字样,标成红色,然后给出一个用户友好的提示

大段大段的加载内容,直接放在 log 里,就不要打印在屏幕上了

fastrun build 的 Jenkins file 这一点做的相当友好,照猫画虎试试

另一个支线任务是修 Onebox setup page,单个页面的前端 bug

回家得恶补 react

test-day-13

做 liquibase 和 刷 liquibase 的 pipeline 并不是同一个

做的是在 release 里,只要确认参数和 image 对的上就好了

刷的是要修的,发现漏了 nexus 和 catalog

刚开分支准备动手,在 nucleus/test/build_job.sh 里有个涉及到 deploy liquibase 的部分

想往里面补上 nexus 和 catalog 的部分

结果发现三个月前上一个人把这两个从里面删掉了???

明天新的 cut ,todo 估计是赶不上了

test-day-12

今天一来就发现了 nexus 需要 recut,而且test case 败了非常多

最后查明原因是没有 merge 就 build image 了

我理解错了nexus合进551,可以直接release build的意思,认为已经全部merge完毕了

其实只是一个特定的 MR 合并进去了,并没有包含新的 CHG0150419 中所有的改动

下回在 build 之前,一定要确保已经merge了

今天重新进行了参数和状态的检查,nexus 和 nucleus 甚至需要 3rd recut

用fastrun 跑 regression 的时候,可以酌情考虑用 2 - 4 台 Docker Container 来跑,这样可以尽量避免出现因为机器本身原因而导致整体 fail 的状况

今天完成了 Nucleus.solr.exporter 的 build pipeline, 直接在 solr 的 build.groovy 里添加了一部分,照猫画虎,倒也能跑

一个值得注意的细节是,在一段 if-else 里面,如果出现重复定义同名变量的话,只会保留先定义的那个变量值。也就是说,尽量换个名字吧

这几天倒是和脚本打了很多交道,逐渐熟悉了一些

而且自己的 MR 被合并进 release 居然还是挺爽的一件事情

想了想,还是得先搞个 todo list,试试 react 和 node 吧

纯靠短期记忆哪些 Component 的话,太容易出错了

之前的 fast-liquibase issue 还是没有头绪,到处都找不到涉及 Artifactory 的部分,说是在 mvn deploy 的时候会在那里创建对应版本号的文件夹

不知道应该如何解决

test-day-11

一早过来就碰到了 merge conflict,联系了 Yanqin 和 Dev 解决

merge pipeline 所使用的账号权限有点问题,所以没法删除多余分支,Kyle 解决了

也许还会有其他repo,但这回应该是没啥问题了吧

今天又可以去完善下如何解决conflict的那篇文档了

等待 nexus 的 merge 许可花了很久,就导致 regression 发起的时间极其晚

merge nexus -> stg nexus -> stg nucleus -> sanity check

就导致卡了非常久,sanity check 挂了一大片,也着实让我 insane

有一些细节的依赖事项,还是需要整理成文档,这样就明确许多

solr exporter pipeline 明天来写

test-day-10

坐地铁的时候迷迷糊糊眯了一会,双手交叉握着手机

所以今天右手手腕中心会有点酸痛,有点轻微的腕管综合征迹象

今天修改好了 Nucleus.solr.exporter 的 image tag pattern

和 solr 的几乎一摸一样,但因为修改的分支太旧了,落下了 120 个 commit

所以发生了 merge conflict, 因此需要 rebase

在这上面花了很多时间,所以单独开了篇笔记记录,但以后再碰到类似的事情,就有头绪解决了

另外学到了一个非常酷炫的 bash 脚本写法

1
[ ! -z $3 ] && chgNumber=$3 || chgNumber="CHGNULL"

判断第三个参数是否为空,若不为空,则将其赋值给 chgNumber

若为空,则将 “CHGNULL” 赋值给 chgNumber

另外更新了Fastrun Daily Tracking

对于各类错误发生的原因,还需要多调查

关于 fast-liquibase pipeline 的修复,还是有点棘手的,没有额外的什么思路

探索了一下 Aritifactory 的 release 部分,通过观察这个 pipeline 出错的参数,可以发现并不是所有的 Repo 其 build image version 都在 Artifactory 上有对应的文件夹,那自然是会报 404 的

修复的思路那就是把它们给补上,但不清楚具体的细节,也要再多问问

朝 Artifactory 创建目录的步骤,是 mvn deploy

那么明天来的下一步就是找到这个 mvn deploy 具体在哪里执行

临时先写了个判断 tarfile 是否存在,若不存在则 exit 1

至少在 wget 没有成功从 Artifactory 处获得 tarfile 的时候,最后不会报个 success 了吧

如何解决 git 合并冲突

同一个文件的同一行,被不同的人修改成了不同的样子

或者是修改了一个文件,另一个人删掉了它

那就不知道哪个才是正确的选项了,到底需要保留哪一个?

如果是自己的项目,个么总归自己决定咯

自己写的东西还能搞出 merge conflict 的也是精分现场了

如果是工作里碰到的,问 Owner 让他们决定留哪一个

总归是能知道要把冲突的文件怎么改的

直接进项目目录,比如说

/home/root/code_merge/${repo}

对于 testinfra-master 这台机器上的 code-merge pipeline,

需要用 root 权限来做这些事情

git status 看看哪个文件冲突了

如果 pipeline 报错但是 status 没的话

就手动 git checkout release 之后 git merge CHGxxxx

然后在对应冲突的文件里找到提示冲突的一大堆箭头

想好怎么改了以后删掉 <<<<<<<, =======, >>>>>>>

然后 git add . 或者直接 add 改动的文件

git commit -m "Resolved merge conflict by xxxxxxx"

最后再 merge 或者直接 push 就好了

test-day-9

今天cm cut,自己也体会到了fastrun run failed的感觉

下午又昏过去了一刻钟,要不中午还是趴着睡一会吧

自从开始工作了之后,每天的信息量一下子变大了许多

我也发现了自己短期记忆衰退得居然还挺明显

思考复杂的逻辑的时候反应也完全跟不上

不过至少是比第一天好用一些了

视线模糊的时候,闻到了初中四点三刻快放学的气味

精神恍惚间,又看见了物理课上影分身的摇啊摇和黑板上的咒语

心理状态实在不能说是调整到了最佳状态

虽说倒也不必强求一定是最佳状态

但最起码作息不再全球乱飞了,三餐也可以按时吃

天气好的情况下甚至可以骑车追一把风

说到骑车追风,倒也是从2011年起到现在的执念了

和维持“朋友圈运动达人”的虚假人设毫不相关

我向来也对“心灵净化”“超越自我”这类虚伪的托辞嗤之以鼻

只是因为吹吹风心里会少许舒服一些

每天15km的路程挤两个小时地铁,着实能够让我窒息

只是为了确认到那些微不足道的多巴胺释放

以及我仍旧具备合成5-羟色胺的能力

每天半夜我都会怀疑

自己现在到底踏马的在做些什么事情

自己对于未来究竟有何打算

这么菜的水平,要如何才能够变得不那么菜

21天内提高的方法倒也挺简单,每天翻翻抽屉,看看会不会有蓝胖子跳出来,借我时光机

一无所知啊

工作内容的每一个细节我并不能做到滴水不漏

大学本科的课程还欠下至少3年的青春债

曾经自己熬夜写过的项目,连语言的细节都可以忘得一干二净

7年前英语课上偷偷看 Core Java,只是因为它很有趣的少年

踏马的哪去了???

我手里的键盘正在哭泣

我甚至希望自己在时之神殿里拔出了大师之剑,时间快进了7年

平铺直叙的质朴文字,在各类App高密度快节奏的对用户降智打击下,大概也成为了我潜移默化的变化吧

每天中午用食欲掩盖深入内心的空虚与迷茫

不知不觉居然四点了,天蒙蒙亮,饿了