release-me-tips

在配置 releaseme 跑起来的时候遇到的坑

frontend

1. TS2339

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ npm run build

> release_me@0.1.0 build
> node prebuild.js && react-scripts build

Creating an optimized production build...
Failed to compile.

C:/Users/yunhaoliu/Projects/releaseme/frontend/src/Model/BackendMapper.ts
TypeScript error in C:/Users/yunhaoliu/Projects/releaseme/frontend/src/Model/BackendMapper.ts(20,55):
Property 'releaseme' does not exist on type 'string'. TS2339

18 | "Firstpartynucleus": "FirstPartyNucleus"
19 | }
> 20 | static originDeployMapper: DeployMapper = backend.releaseme.flow.deployMapper as DeployMapper
| ^
21 | static imageKeyTranslation: Record<string, string> = {};
22 | static Component: Record<string, string> = {};
23 |

复制一份 Backend 里的 Application.yml 到 Frontend 里覆盖

如果开了 win10 的 Developer Mode,

git win 会在 Clone 的时候把软连接变成 Symbol link

如果不在就摆烂

2. localhost 启动

猛击 F12,Application -> Storage -> Local Storage 里面有个 token

Chrome 的快捷方式里,加上 --disable-web-security

开个新的窗口,在转圈圈的时候眼疾手快,猛击 STOP

F12, 同样的位置加入自己的 Token

3. localhost 直接启动了 PROD

本地 npm run build 了前端

后端的部分部署在了 linux 上

直接 serve -s build 的话,直接打开了 PROD

在相同域名下不同端口,依然会触发跨域

真正需要做的事情是,

要在 src/Model/Request.tsx 里加上 endpoint,是 application.yml 的后缀

1
2
3
4
5
6
7
static endpoints: Record<string, string> = {
"development": "https://releaseme.citools.ea.com",
"local": "http://local-releaseme.citools.ea.com:8080",
"lyh": "http://localhost:8080",
"alpha": "http://alpha-releaseme.citools.ea.com",
"production": "https://releaseme.citools.ea.com"
};

还有 App.tsx 里去掉 token 为空时的判断

1
2
3
4
5
6
7
render() {
// if (Request.token)
// return <MainPage />
// else
// return <RedirectPage />
return <MainPage />
}

然后最后才是

1
2
npm install
REACT_APP_NODE_ENV=local npm run-script build

这里 local 是 application-env 的 env

4. prod 上发的请求 401 Unothorized

期望的 status 是 409 或者 200

在 Requests.tsx 里如果直接用 fetch,默认是不带 token 的

用 this.releaseMeFetch 的话,会把 409 当作异常抛出来

同时拿到的 response 是个 json 而不是我要的 status 和 text

所以我需要自己在 header 里加上 token 发出去

backend

1. ENC 的密码设定

必须指定 -DJASYPT_ENCRYPTOR_PASSWORD, application.yml 里所有的 ENC 都必须 match

本地测的时候就不要这么麻烦了,直接在自己的 yml 里写明文

另外,密码给个简单的就好,别给自己找麻烦

2. application.yml

同一个目录下,application-xxx.yml 里面的内容会覆盖 application.yml 的

需要指定 ENV_NAME

里面 localhost ,想要在其他机器上跑的话就需要替换成它的 ip

3. mysql docker

VM 分的磁盘太小了,docker 起不来

检查 log 就能知道原因

虚拟机,是存在极限的

所以我不用虚拟机了!!!

捡了台退役服务器装了 linux

ssh上去简单弄了下 docker

4. insert dummy data

测试用的假数据不知道怎么插进去…

它用了 webhook 去探 gitlab 上的新改动

而且 label 是一定要包含 releaseme 的

component 也必须要在列表里

直接往数据库里插表是不行的

5. Okta Auth

本地测的时候一般是设置成 false 的

为了避免奇奇怪怪的麻烦

远古开发者【超哥】写的时候在本地是自己搭了一套独立的 Okta

所以会出现 client-id 和 client—secret 的设定

还是 ENC 加密过的

如果我这里要开着测试的话,需要在前端设置一下重新登录

test-day-64

搞了一整天的 release me

让它跑起来了

终究还是用了真正的物理机 linux

虚拟机的根目录只分了 16GB ,尽管整块盘有 100GB

扩大了重装也依然如此,于是直接用真机了

然后在 Application.yml 和密码上花了很多不必要的时间

自己本地开发的话,搞个简单的就好

甚至可以明文写进去,不要给自己找麻烦

要用刀片去刮,这是坠痛苦的

在迁移 Jenkins job 的时候也碰到了很多问题

各自整理了一份文档

test-day-63

很久之前忘记了问 DBA review Keymaster liquibase

今天的 cut 碰到了诸多问题

idgen 的 aws registry 没有对应的 pod

saola 全家桶直接 compilation failure

code redemption 和 venice STG 起不来

代码原因?可能是镜像没有 push 到 CIAWS 上

用旧机器搭了个 Linux,装好才发现其实用起来和虚拟机没什么区别

Jenkins job 迁移进度推进了一丢丢,成功地跑了 build sloth

还有 INTBVT 也得到了预期的结果

test-day-61

早上梦游 错过了 Kyle 和 Jen 的会议

可以说是十分难受了…

通过 vnc 登上 Testinfra-master 和 FR-CN-F

试着跑了一下午 lockbox-qa-v5 的 BVT case 以及 INTBVT case

但是一直不行…… INTBVT 的结果还可以,但 Preproduction 和 regression 很差

下周还要继续来看看

临走前想让 releaseme 跑起来

test-day-60

事情很多,Jenkins job 的迁移收到了非常多的阻碍

chrome driver 的版本,chrome driver 和 root 的冲突,shdev 的执行访问权限,一个接一个的坑

终究还是没能迁移成功,一个小时的估计也太乐观了……

开组会的时候饿的头晕

stg deployment 的支持和 Kyle 确认了下,又变得没什么事情可以做的了

1 月 5 日会新来校招的 FTE

在那之前有13天长假放,我其实很害怕又像国庆那样情绪崩盘

我想要好好规划一下自己的人生,不然总是看着别人,后悔自己当初的混乱的决策

踏踏实实地去做想做的事情,趁着还年轻去多掌握一些技能

test-day-59

迁移 Jenkins Job 的问题一个个在找

需要注意的细节有很多

比如先前那个改 host 的,我一直是在 master 上看的,实际上这个 job 是在 slave 上运行的

所以 host 会不一样,要在 configuration 里面指定 job 在 master 上运行

同样的问题也导致了 Master_Lockbox_BVT 找不到 maven plugin

还碰到了git fetch 日常超时,这回找到了设置

Source Code Management -> Additional Behaviours -> Advanced clone behaviours

可以设置 Timeout 的分钟数

今天同时有新 CM 的 cut build, 迁移 job 的 debug, 修改 24 个 build.sh 里面的 AWS

在等待 git clone 的过程中,倒是可以异步去执行三件事情

ChromeDriver 的版本要和 Chrome 相匹配

对于这两个 Jenkins job,用 77 或者 93 要比 96 稳妥一些

可以用 -D 来指定 Properties

test-day-58

逐渐写成了流水账

修好了 onebox setup 的表格

解决了 nucleus 的 Merge Conflict

问了 Jen 更新了 Fast liquibase 的 token

也真的用 pci 权限登上去看了一眼

迁移了两个 Jenkins pipeline

中午点了玲珑秀的外卖

芦笋炒虾仁很好吃!

秋葵炒香肠里还有彩色的甜椒

下午三点半开始无法集中精力

怀疑是低血糖(

吃了口燕麦棒,还有一盒牛奶

刚吃完是好些了

但半小时后继续晕

test-day-57

接到了新的活干

整理了下当前手头上在做的事情

既然有 PCI 权限,就可以上 prod 去 debug 了

也可以去试着解决一些问题

直接抄了个 onebox table

然后小修小改了下

stg-debug-guide

Ready Precontact

https://se-pm.iad2.infery.com

password is RSA passcode on mobile phone, after entering the 8-digit pin for the code

LDAP, Ephemeral Hosts

check slack bot message for login info

novassh, choose PCI jumpbox

login with the password set inside iad2, not the passcode

1
ssh stgk8smaster-pci-01
1
ssh stgk8smaster-nonpci-01

They are the two master nodes

PCI is for components related with credit card money

get all pods

1
sudo kubectl get pod -A

get pods inside specific namespace

1
sudo kbuectl get pod -n stg-nucleus

0/1 service down, need redeploy

ipgeo and Completed jobs can be ignored

Reboot pod

1
sudo kubectl delete pod -n stg-xxx stgxxx-1
1
sudo kubectl exec -it -n stg-xxx stgxxx-1 bash

kubectl describe pod

~/xxx.app/serv

alert.log 内有详细信息

vim -R 可以让 vim 只读

Manually Deploy image to STG

1
2
3
kubectl edit sts -n stg-xxx
kubectl delete pod -n stg-xxx stgxxx-0

edit sts !!
delete pod !!