研究

将自建jenkins注册到百度效率云的ipipe

对应百度效率云的这个文档:https://cloud.baidu.com/doc/XLY/s/Fjwvy8aq6#jenkins-%E6%8F%92%E4%BB%B6%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97 由于官方的文档用起来很多误解,这里做一下简单的说明,方便大家使用。 首先是jenkins的安装。由于百度效率云目前的jenkins插件比较老,用最新版的jenkins无法配置成功,所有需要为百度效率云部署一个专用的jenkins,这里我称之为中继jenkins。最初,我是按百度的文档所提到的方式,下载jenkis.war,并使用 nohup java -Dfile.encoding=utf-8 -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war –httpPort=8888 & 这个命令来部署,同时我的业务jenkins是用docker的方式部署。后来,我将业务jenkins改为yum install jenkins直接安装在宿主机了,于是需要把这个效率云jenkins改为docker,避免冲突。 部署中继jenkins,我使用的是以下命令: docker run -d -u root –restart=always -p 8888:8080  -v /jenkins_xly:/var/jenkins_home –name jenkins_xly -idt jenkins:2.19.1 运行后打开IP:8888,即是通常的账户密码初始化过程,接下来是插件,我取消了所有插件的安装,因为这个jenkins实例只用来转发百度效率云的构建推送。 下载百度效率云的jenkins插件 ipipe-agent.hpi,地址在文章开头那个链接中,通过百度网盘下载。在系统管理-插件管理-高级那里上传这个插件。 回到系统管理,找到iPipe agent management,按照提示填写几个字段。 点击Save,正常的情况下就直接跳转了,没有报错,如果有问题,会有报错,比如用最新版的jenkins,可以装上这个插件,但在这里提交时会报错,问题出在有一个JenkinsUUID的参数,在最新版的jenkins上是空的,我跟百度效率云团队提过这个问题,但至今尚未修复。所以只好多此一举,继续用jenkins2.19.1来中继。 创建jenkins的job item name即项目名称,尽量用英文字母写清楚,前面提到了,这个名字会出现在效率云中作为选择job的依据。 因为我前面部署这个中继时没有安装其他插件,所以我这里只需要选择构建一个自由风格的软件项目即可。而实际上,这个job需要做的也只是转发一下请求。 在job的General配置中,找到iPipe配置,只需要填写项目标识,这个项目标识跟ipipeUrl中那个项目名是一回事儿,但实际上效率云在相应的项目中显示相关job时应该是以这个job中配置的项目名为准,而前面ipipeUrl中那个项目名应该是插件的历史遗留问题,早期只考虑到一个项目的注册方式。 然后在构建Build中添加一个执行shell,只添加一行命令: curl {你的业务jenkins的某个job的webhook地址} job的配置到此结束。 接下来,我们先去效率云验证下这个job能否被触发。 按照百度效率云的文档配置流水线即可,需要注意的是我开始有一个误区,就是代码触发时要选merge,而不是change。否则提交代码到代码库时不会触发流水线。 最后,简单提一下我们的业务jenkins需要做什么配置来响应中继jenkins的curl请求,这个未必是最好的方式,因为不能传递参数了,也许应该用触发远程构建之类的实现,我对jenkins还不够了解。 假定按curl的话,我们需要在业务jenkins安装一个generic-webhook-trigger插件,然后在业务jenkins的job中启用这个插件的配置,填写token这个参数,这个token只要在当前的jenkins的jobs中不重复即可,但为了方便识别,我一般会加上项目标识,比如itemname-rR74nddfdsfs23mm 然后上面curl后面的网址就有了,格式是 http://JENKINS_URL/generic-webhook-trigger/invoke?token={token}

民宿

前几年先后经营过三个公寓型民宿,后来因为政策原因被关闭,到去年又被通知可以登记后再开,但已经没有房源。 待到瘟疫期间,还得庆幸手上已经没有房源,否则短期出租肯定收到很大影响,能否转为长租也不好预期,至少在比较紧张的阶段是不好租的,连看房都困难。 到现在为止,尚未能找出什么适合作为工作外收入的方式,开淘宝店和做无人机生意都是过去式了。 目前陷入了一个停滞期,工作上似乎也很难有什么突破,尽管还有项目可做,但没有什么创新性能够带来实质性的提升空间。 对无线电有一点兴趣,了解到SDR,但是那些开发板不便宜,还是有比较高的进入成本的,而且往后推导也看不到能玩出什么花样来。

关于长毛象

Mastudon是microblog的一个衍生版。 十几年前博客火,到了2007年前后出现微博客,也出现了一批实例,后来剩下新浪和腾讯还有人民啥的,到最后只剩下新浪。 博客在完成了中心化之后死掉了,微博也走向了中心化,短期看还不会死掉,但已经有趋势。 云的兴起带来了中心化,但同时区块链的出现代表了去中心化的趋势。Mastudon就是微博去中心化的一种版本。 在开放网络环境下,用一个树莓派就可以搭建一个大家都用访问的实例,但在管制网络下所有端口都被屏蔽,几乎成了单向网络。所以长毛象前几年出来后在中文圈没有多少用户,只是到了最近有一些较有影响力的人开始关注和开设实例,才有了成千上万的人去注册。 目前还看不到长毛象能带来多少实质性的影响力,主要观察两点,一个是是否提供丰富的事实信息,一个是能否提供话题讨论的支持。这一波用户更多的只是出来抒发一下憋闷的心情,有点像监狱里的短暂放风,既掌握不到什么有效信息,也因为仍然身处监狱,并不是真正自由的,顶多原地跑跑跳跳。

如何修理不平衡的平衡車

女儿的小伙伴有一个平衡车,她很快就学会了怎么玩,也想拥有一个,我看了看,没舍得买个新的,果断下手一个100元的故障机,就当自己练手,修好了就赚了。 结果买的时候也没通电,拿回来开机根本站不住,比视频里跑的快多了,一直滴滴响。 于是拆机检查,发现螺丝不全,电池固定扣已经损坏,壳里面有沙子,是否进水不好说,至少是打开修过。心一下子就凉了。 接下来用万用表反复测试,观察板子上的电压,逐步搞清楚哪个板子管姿态,哪个板子是主控,按照pcb上的一些字样查到是A8这样一个比较典型的早期型号。 买一套新的主板需要两百多,老婆不同意,三百块可以买个新的了。 于是抱定决心一定要修好,然后开始继续研究。 通过观察姿态板不同角度下的反应发现有一个角度似乎可以让平衡车稳定下来,但又很难保持,初步怀疑是陀螺仪坏了,这东西在玩无人机的时候接触过,要是坏了肯定炸鸡。但如何确认是陀螺仪坏了挺麻烦,光看电压看不出来。 万用表不够用就需要示波器了,那个玩意不便宜,接下来两天就研究示波器,选型,看教程,然后发现,如果是数字信号还要用逻辑分析仪,那玩意也不便宜。两个都买个要一两千,还是基础版。 没办法,回头补基础电路知识,看看能否在其他方面找找线索。然后就看了好几天电感和电容的东西,顺便说台湾的视频讲得比较好。 其实买平衡车的时候就抱着一个念头,重置一下平衡就好了,但是拿到以后试了一下重置并不成功。现在看了一圈下来,还是觉得基本可以排除物理故障,正好收到阿尔郎官网一个重置办法,按开关20秒。然后,就修好了。 还有一种方法,如果带遥控的话,按一个组合键就行了。我买的这个不带遥控板。

jenkins2.220下的dingtalk2.0.0

这一版dingtalk插件发生了重大升级,以至于升级之后我一直以为不兼容,无法工作了,考虑降级测试,后来一直点到dingtalk的源代码地址,才发现是配置确实变了。怎么就不能在里面提示一下呢? dingtalk插件的地址:https://plugins.jenkins.io/dingding-notifications/ github的地址:https://github.com/jenkinsci/dingding-notifications-plugin 注意源代码那里的使用说明: 1.在 系统管理 > 系统设置 > 钉钉配置 中添加机器人 全局配置 -> 测试经测试,钉钉机器人的安全策略配置的选项属于与 关系,即如果勾选了多个策略,则需要同时满足。 所以,插件的配置最好与钉钉机器人上保持一致。 2.在项目配置页面中勾选机器人 项目配置 测试 其中需要设置name,在具体的job任务中可以看见这个名字,就可以勾选了。 id空着,保存的时候由插件自己生成。 webhook就是钉钉中机器人的地址。 下面就是安全设置,这个不清楚为什么还有需要,暂时按照钉钉里机器人的配置一样填的。 然后点test成功,钉钉群里收到消息。

用jenkins获取git change log推送给钉钉机器人

背景:为了将代码提交的记录推送到钉钉群,我们可以使用钉钉自定义机器人这个功能,关于钉钉机器人这里不解释,请查阅官方文档。本来用aliyun code管理代码时可以使用webhook快捷设置钉钉机器人,但迁移到百度效率云的icode之后,暂时失去了webhook这个功能。 以下介绍解决办法:(以下内容来自https://twiceyuan.com/2017/02/21/jenkins-changelog/) Jenkins 每次构建都会根据 git 的提交记录生成一个 web 页面来显示自上次构建之后的提交记录列表。在配置 CI 工作流时,很多情况需要获取这个提交记录的 String 值,但是 Jenkins 并没有提供这个功能。 Jenkins 官方反馈中有人也提出了这一需求:https://issues.jenkins-ci.org/browse/JENKINS-12032 。下面有人给出了一个插件来解决,插件地址:https://github.com/daniel-beck/changelog-environment-plugin ,不过作者没有编译上传到 jenkins 的插件中心,也没有文档说明怎么使用,这里简单介绍一下。 首先项目拉到本地,在项目根目录执行 mvn verify 就可以编译生成我们需要的 hpi 插件文件了(编译需要很多依赖,第一次可能会比较漫长)。之后在 Jenkins 中管理插件的高级(Advanced)中,选择上传 hpi 文件,就可以安装成功了。你也可以直接下载我编译好的 点击下载 安装成功以后,在项目配置的 Build Environment 环节,会多出一个选项:Add Changelog Information to Environment。下面有三个编辑框,分别是:Entry Format、File Item Format 和 Date Format。第一个就是填写提交日志输出格式的地方,采用的是 Java String.format 占位符的形式。其中可以使用四个参数,分别是: 提交的作者 提交的 ID 提交信息 提交时间(通过 Date Format 控制格式) 例如,我在 Entry

倡议发起数字出版网络安全应急论坛

随着数字出版平台的广泛上线,网络安全问题也变得越来越突出,单靠某一个单位的安全防护是比较薄弱的,有必要组建一个相对广泛的合作组织,应对在数字出版服务过程中遇到的安全问题。 目前为个人发起,可加钉钉群:

微版云是如何用vue-electron构建mac客户端的

如何初始化项目暂且不说,请看vue-electron的官方文档。 先给大家看一下package.json的部分配置: “main”: “dist/electron/electron.js”,  “build”: {    “appId”: “ink.weiban.portal”,    “productName”: “WeiBan”,    “copyright”: “Copyright © 2019 北京商连信息科技有限公司”,    “directories”: {      “output”: “./outapp”,      “app”: “./dist”    },    “win”: {      “target”: [        “nsis”      ],      “icon”: “./static/ico/favicon256.ico”,      “artifactName”: “${productName}-Setup.${ext}”,      “publisherName”: “WeiBan”,      “signingHashAlgorithms”: [        “sha256”      ],      “signDlls”: true,      “rfc3161TimeStampServer”: “http://timestamp.digicert.com”,      “certificateFile”: “./static/codeSign/windows/shanglian.pfx”,      “certificatePassword”: “shanglian”    },    “linux”: {      “target”: [        “AppImage”      ],      “artifactName”: “${productName}.${ext}”    },    “mac”: {      “target”: [        “dmg”      ],      “icon”: “./static/ico/favicon.icns”,      “artifactName”: “${productName}.${ext}”    },    “nsis”: {      “createDesktopShortcut”: “always”    },    “publish”: {      “provider”: “s3”,      “bucket”: “electron-app”,      “endpoint”: “https://electron-app.s3.cn-north-1.amazonaws.com.cn”    }  },  “scripts”: {    “dev”: “webpack-dev-server –inline –progress –config build/webpack.dev.conf.js”,    “start”: “npm run dev”,    “unit”: “jest –config test/unit/jest.conf.js –coverage”,    “e2e”: “node test/e2e/runner.js”,    “test”: “npm run unit && npm run e2e”,    “lint”: “eslint –ext .js,.vue src test/unit test/e2e/specs”,    “build”: “node build/build.js”,    “build-electron-dev”: “node build/build-electron-dev.js”,    “build-electron-prod”: “node build/build-electron-prod.js”,    “dir”: “electron-builder –dir”,    “win32”: “electron-builder –win –ia32”,    “win64”: “electron-builder –win –x64”,    “mac”: “electron-builder –mac”,    “linux”: “electron-builder –linux”  }, 构建mac的客户端之前首先要将vue构建好,即运行: npm run build-electron-prod 然后运行: sudo yarn mac 之所以要加sudo是yarn用到一些系统目录,不加会报错。(关于如何安装yarn请看官网) yarn run v1.17.3 $ electron-builder –mac • electron-builder version=21.1.1 os=18.7.0 • loaded configuration file=package.json (“build” field) • writing effective config file=outapp/builder-effective-config.yaml • packaging platform=darwin arch=x64 electron=5.0.6 appOutDir=outapp/mac • signing file=outapp/mac/WeiBan.app identityName=Developer ID Application: Beijing Shanglian Information Technology Co., Ltd. (R65P3V6H9V) identityHash=BA45718278F5E4268071035C88A48F38A2271B1C provisioningProfile=none •

如何以正确的姿势激活百度效率云

百度效率云的具体介绍就不说了,之前是冲着icafe来的,用过一段时间,因为数据无法导出,也不方便把目前用的mantis替换掉,所以一度弃用。 现在产品发布了,面临更严重的用户需求收集和处理问题,在产品比较弱的时候,如果不能更好地把握这些需求的先后和强弱,很容易导致产品开发崩溃。icafe从story到task的过渡处理的还算不错,现在又延伸出一个效率云系列产品,按理说算是不错的敏捷开发平台了。 尽管百度说效率云是按用户收费,目前免费测试,让我有一些担忧,不过用一用也无妨,吸收一些可取之处,也为自己的协作产品找到一些灵感。 不过在初始化账户的过程中,遇到了很多困惑,以至于求助于客服依然没有解决,对接的客户经理对效率云基于没有了解,似乎是我提起她才知道。 好了,废话不多说了,下面列一下建议的步骤。假设你之前没有任何百度系的帐号的话,有的话也尽量忽略,百度系的帐号可不是那么容易注销的。 (1)创建公司/团队帐号。 https://login.bce.baidu.com/reg.html?tpl=bceplat&from=portal 建议使用以上链接直接创建百度云的帐号,百度云和百度智能云貌似是一个东西。为了方便起见,用户名建议使用公司全名,不要用自己偏好的东西,因为这个帐号无法变更主帐号,也就是基本上无法移交,只能变更绑定的手机号和邮箱。再说一遍,建议用企业全名作为用户名。 (2)登录以后在百度云一大堆产品里面找到效率云,创建的时候有个团队名称,建议也用公司全名,下面分配一个空间地址,用公司缩写字母之类比较好,一旦创建,不能修改,也要慎重,而且是全局唯一,不能跟别人重。 (3)进入效率云以后创建一个新的项目,第一个问题就是邀请团队了。找到效率云的项目设置(在左下角),找到“通用设置-权限管理”,邀请用户,这时填写的是被邀请人的邮箱,之所以这样是因为原来icafe单独部署的时候可以不依赖于百度帐号体系,就是用邮箱登录即可。假设你邀请的邮箱是fymeng@51shanglian.com,那么这个邮箱会收到一封邮件。 (4)被邀请人进入fymeng@51shanglian.com,点击邮件中的链接,提示初始化自己的密码,按照要求填写即可,然后自动登录。 (5)被邀请人激活的是一个子帐号,与用fymeng@51shanglian.com这个邮箱注册百度云帐号无关。那么当前子帐号注销了以后如何登录呢,需要请管理员照一下子帐号登录地址,管理员帐号下打开帐号控制区的多用户访问控制,会发现用户管理中的子帐号中已经有fymeng了。然后子帐号列表上方就是子帐号登录的地址,比如http://a3630175ee3744039c854eabf1d33456.login.bce.baidu.com,这里肯定不方便记忆,所以百度很贴心的给了自定义的功能,所以就可以设置为http://shanglian.login.bce.baidu.com,当然这个地址依然还是很难记的,那就需要用自己的域名解析了,比如显性URL转发。 (6)最后补充一点,子帐号登录的时候默认是用邮箱前面那个名字比如fymeng。这个可以在子帐号管理看见到底是什么。

如何使用s3cmd批量修改aws s3上的文件Content-type

首先,使用aws官方的批量处理是可以的,至少官方是这么说的,不过做文件清单然后执行,可能适合比较大量的文件。 现在用s3cmd处理可能是比较直观的方案。mac上安装s3cmd比较简单。只需要brew install s3cmd即可。安装比较慢的话设置一下brew的国内镜像源,方法:https://www.cnblogs.com/crayfish/p/6003862.html (1)s3cmd –version看看版本对不对,最好是2.0以上。 (2)s3cmd –configure启动配置引导,按提示依次输入key,没有的话去aws生成一个。 (3) s3cmd –mime-type=image/jpeg –recursive  –exclude=* –include=*.jpg modify s3://your-bucket 这就是批量的命令了。看起来还是很简单的。设置参数需要注意顺序,尤其是一定要先exclude再include,否则起不到筛选文件类型的效果,recursive保证你可以遍历bucket下的所有文件,而不是只能修改某个object的元数据。–include=*.jpg这里留意大小写,如果你的文件里有大写后缀名,需要–include=*.JPG也来一遍。