Openshift E01 最常见的使用场景

暂时不介绍 openshift 的概念,也不介绍如何安装、部署,先使用一个例子来看看 openshift 能做什么。

新建一个项目

在我的本地,使用developer/developer登陆 OpenShift控制台,右上角点击 +Create Project

  • Name -> mybank
  • Display Name -> MyBank
  • Description- > MyBank Application

新建之后,去到 MyBank project, Overview, Browse Catalog Wildfly;补充如下截图的信息

slR7a4.png

Application github repo url: https://github.com/nichochen/mybank-demo-maven

点击 Create 按钮后,OpenShift就会创建一系列的后台对象,进而出发S2I流程。构建的过程需要连接互联网下载应用的源代码、Maven构建所需要的Jar包以及镜像。在我的电脑上clone后大概等待了20min,然后才继续后面的步骤。

slIrq0.png

我本地使用minishift搭建的OpenShift实验环境

1
2
3
4
5
6
# login vm
minishift ssh

# grep the image
[docker@minishift ~]$docker images | grep bank
172.30.1.1:5000/mybank/mybank latest 9f9a257dce21 8 minutes ago 961 MB

一切便都结束了,不要太省心~
slTjbt.png

可以直接从浏览器访问应用程序了
sl7ZV0.png

Excel常用函数

查找一一对应的关系

=VLOOKUP(F1,configs!$D:$E,2,0) $用来保持D E不动

=VLOOKUP(B9,configs!A:B,2,0)

=MID(K2,1,1) 从第一位开始,取1位

=MID(K2,1,3) 从第一位开始,取3位

Validate a Jenkinsfile

问题

总是在运行jenkins pipeline时,才发现语法问题。能不能在运行前发现问题呢

方法

方法之一如下,更多方法可参考链接

新建一个文件,JenkinsfileA,添加以下正确的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pipeline {
agent any
environment {
MY_ENV = 'my-test'
}

stages {
stage("Open the door") {
steps {
echo 'Open the door ..'
bat label: '', script: 'chdir'
bat label: '', script: 'set'
powershell label: '', script: "echo ${MY_ENV}"
powershell label: '', script: "echo \\name\\folder"
powershell label: '', script: "echo //123//565"
}
}

在文件所在的目录,运行下面的命令
curl --user admin:admin -X POST -F "jenkinsfile=<JenkinsfileA" http://localhost:8080/pipeline-model-converter/validate

送上原文的链接 https://sandrocirulli.net/how-to-validate-a-jenkinsfile/

curl --user username:password -X POST -F "jenkinsfile=<Jenkinsfile" http://jenkins-url:8080/pipeline-model-converter/validate

< (尖括号)一定要,不然有问题

Note the following:

If your Jenkins is authenticating users, you need to pass the username and password otherwise you can omit that part.
By default, this command expects your Jenkinsfile to be called Jenkinsfile. If not, change the name in the command.
Replace jenkins_url and possibly port 8080 based on the URL and port where you are running Jenkins. You can also use localhost as URL if you are running Jenkins on your machine.

其他

VS Code 的插件也很不错 https://www.jenkins.io/blog/2018/11/07/Validate-Jenkinsfile/ ,但如果本地没有安装 VS Code 就还是用其他方法吧

Jenkins Error

中文乱码问题

参考
https://www.cnblogs.com/unknows/p/8519636.html

http://yeshaoting.github.io/article/jenkins/jenkins%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%90%AF%E5%8A%A8/

Jenkins console output display color

打印测试报告时jenkins console output输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> Task :cucumber

Scenario: ???? # src/test/resources/features/bta_open_an_account.feature:3
Starting MSEdgeDriver 85.0.564.51 (626274a16bb350129a74ead7a3d8d53a5ad39364) on port 5325
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping MSEdgeDriver safe.
MSEdgeDriver was started successfully.
[1605165549.451][WARNING]: This version of MSEdgeDriver has not been tested with MSEdge version 86.
Nov 12, 2020 3:19:11 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
http://10.20.159.131:8080/ifmmanage/bizframe/loginnew.jsp
Given ??BTA??????? # steps.StepDefs.login()
And ??BTA????? # steps.StepDefs.assertLoginSuccess()
When ??"????"??? # steps.StepDefs.open_tab(java.lang.String)
And ???????"????"?? # steps.StepDefs.clickClearingSystem(java.lang.String)
And ???????? # steps.StepDefs.clickDailyStartClearing()
And ?????? # steps.StepDefs.confirmWindow()
Then ???????"????"?? # steps.StepDefs.clickClearingSystem(java.lang.String)

ref: https://www.programmersought.com/article/66361313580/

How to stop an unstoppable zombie job on Jenkins without restarting the server?

Go to “Manage Jenkins” > “Script Console” and run a script:

1
2
3
Jenkins .instance.getItemByFullName("JobName")
.getBuildByNumber(JobNumber)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

You’ll have just specify your JobName and JobNumber.

ref: https://stackoverflow.com/questions/14456592/how-to-stop-an-unstoppable-zombie-job-on-jenkins-without-restarting-the-server

jenkins 的在slave node运行的 job 状态不更新

jenkins master: Windows PC
jenkins slave: linux server

某个调度到slave的运行job总是不更新状态,明明已经完成了任务,但一直在页面左下角显示的是在运行中

可尝试 https://kb.iu.edu/d/aopy

引号

// 单引号需要拼接 容易出错 不推荐使用
sh 'mkdir -p ' + VARIABLE
// 三引号支持变量等内容,引号嵌套等 推荐使用
sh """cp ${VARIABLE}/ 'abc' "123" ${VARIABLE_1}/${VARIABLE_2}"""

IntelliJ 与 Gradle版本不兼容

问题

IntelliJ version: 2018.2.7 CE

1
2
3
4
5
IntelliJ IDEA 2018.2.7 (Community Edition)
Build #IC-182.5107.41, built on November 27, 2018
JRE: 1.8.0_152-release-1248-b22 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

Gradle version 6.1.1

报错截图如下:

error

1
2
3
4
5
java.lang.NoClassDefFoundError: org/gradle/api/internal/plugins/DefaultConvention
at org.jetbrains.plugins.gradle.tooling.builder.ProjectExtensionsDataBuilderImpl.buildAll(ProjectExtensionsDataBuilderImpl.groovy:50)
at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.buildAll(ExtraModelBuilder.java:67)
at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingToolingModelBuilder$1$1.create(DefaultToolingModelBuilderRegistry.java:104)
...

解决方法

step1

step11

step2

step2

大致原因就是版本不匹配,都是时间从中作祟。

出行清单

良久的蛰伏后,迎来一次出差的机会,时隔近2年吧。小时候梦想着能走出去,多坐坐火车、飞机、轮船等等,长大后实现了,发现并不那么美好。

1.夏季-短期-出差

1个月以内的,衣物数量包括自己身上穿的那一套

短袖3件以上
内裤3件
长裤2件
袜子3件
证件、卡照(身份证,驾照,银行卡)
毛巾
充电线(手机的,手表的)
洗漱包(牙刷,不用电动牙刷)
水杯
纸巾2包
人字拖
书2本
耳机
电脑 及 充电线

特产

修个数据

一件事,即使看似平凡,但只要你做深、做久,很快就能变成你的专业,平凡的事情做久了,也能不平凡。

最近项目中的每天都有很多sql需要执行,以便修复客户的数据,大概持续了近2个月的时间。鉴于开发人员对生产环境的隔离,一般这种修改生产环境数据的活儿就由专职的DBA,或Ops完成。但说到底,开发人员对于sql更熟悉,但这只是通常情况,所以“打铁还需自身硬”。

在没有任何数据管理系统的前提下,如何规范、准确的修复数据,便有很多细节需要我们思考,并找到合适的实践路径,不至于让某些角色花费大量的时间在这个事情上面。

1. 审批流程,反馈流程

修改数据通常涉及多方,为了保证流程规范(其实是后期甩锅),有关人员需要掌管好自己手中的小权利,通常涉及 PO, Dev, Ops/DBA, Manager等角色。其他问题:三级审批、四级审批、人多、传话丢失、语义产生歧义等;如果sql有问题,该如何找人,如何反馈,

2. 先备份

对于ops人员而言,数据无小事,但在dev眼里,有些表中的数据无足轻重,有些确实很重要,但ops/DBA是不那么了解业务的,也是或许是一些Dev没有经历过丢数据后的无奈和严重后果。

备份规则(即什么情况下需要备份,什么情况可以不备份):

  • 数据量变更大于500条时,必须备份数据
  • 无需备份的需要备注原因,以便其余人了解不备份的上下文

备份方式:

  • 在数据库里备份,例如 create table <table_a_copy_date> select * from users;
  • 少量数据,本地备份,上传到jira中,数据安全问题,
  • 备份到某个云☁️上,有需要的时候开放权限获取备份文件

3.执行,用技术去规范

对于不同的数据库引擎,sql语法有部分差异,使用不同的sql客户端工具,也有不同的差异。

吐槽遇到的问题:

  • sql中的中英文符号不区分,导致的语法问题
  • 单引号’和间隔号`
  • 看着正常,https://tool.lu/sql/ 也检查不出来的,但其实很有问题的语法 (https://blog.csdn.net/whatday/article/details/103308922)
  • 多条语句的,不用;分割
  • 自增id,不要随便插入新的id
  • 一个sql需要执行1个小时,而且不能重复执行的,确保不能断网,最好不用本地的sql客户端,而使用tmux 后台执行

pipeline化、脚本化, 需包含语法检查、备份、执行、执行后核对等功能,解放ops的双手

dbname.tablename

其他

逆流而上

0.前言

2020.7.9 又一年的高考结束了,往年都是在6月。青春,逆流而上,听起来都是这么的文艺。而这里讲到的这本书全名是《逆流而上 阿里巴巴技术成长之路》,哈哈 o(╯□╰)o。估计我是被这文艺的书名给吸引过去的。

虽然没有细读,但也看到一些很好的总结,于是想记录一下。

1.关于书的信息

时间: 2018年1月第一版

一句话概括: “本书是阿里巴巴集团荣耀背后的技术血泪史。”

适合谁看: “本书主要面向互联网技术从业人员和在校师生,使读者能够通过此书基本了解阿里在各技术领域的能力,学习在如此规模下可能出现的问题以及解决方案的探讨和沉淀分享。”

2.摘抄

  • “问题处理环节,需要以最快的时间协同不同团队之间的响应处理,避免措施问题排查的最佳时间窗口。“

  • “稳定性要做好几点:研发与运维要靠近、故障标准要统一并强化处理流程、建设统一的基础设施并完善团队融合做到“书同文车同轨行同伦”

  • “阿里巴巴集团开发规约中对于ORM规范,有明确一条强制规约:在表查询中,一律不要使用*作为查询的字段列表,需要哪些字段必须明确写明。”

  • “数据库中的参数配置对SQL执行速度快慢也有非常大的影响,常见的三个参数包括 innodb_buffer_pool_size ,tmp_table_size, query_cache_size,table_cache”
    (应该是笔误,明明后面也讲到了4个参数,具体参数讲解也自行搜索)

  • 下面的图给了我们定位问题的一些思路,遇到棘手的问题时,要全面考量,逐一排查。不能想当然的去认为“服务器怎么会有问题”,”硬盘不可能会坏“,“网络应该不会有问题吧”
    UeDKSK.png

”为了找出CPU飚高的原因,开发在重启过程中通过执行一下命令找出CPU利用率比较高的线程。“

1
ps -eL -o pid,%cpu,lwp | grep -i pid | sort -nr k2 | awk '{print("%s %s %x\n",1,1,2,$3)}' | head

3.读后

没有细读的原因,应该是鄙人才疏学浅,孤陋寡闻,很多书中的事情我也没遇上过。如果是当事人,读起来应该有一种破解一桩悬案的快感。但处理问题的思路,以及开发人员、运维人员之间的配合经验十分重要,还有复盘(类比于SRE中的验尸报告)等等都是很棒的,书中对于技术细节也有很深的研究,毕竟是要解决一些棘手的问题,代码片段、逻辑图、架构图丰富,涉及基础设施架构、mysql、中间件服务、负载均衡等等很常见的技术,确实不常见的业务量。

  • Copyrights © 2019-2024 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~