
jenkins代替品
如果你打算搭建一套发布系统,你可能会考虑jenkins,或者其他。 我要介绍的则是一些现成的,使用更简单的工具。没用特殊环境要求的情况下则完全可以代替jenkins。
- GitHub Actions
- gitlab ci
- 阿里云流水线
- coding持续部署
上面只是列举了四类,实际上你会发现市面上的云服务商和代码仓库都提供了类似的工具,虽然有些是收费的,但是也有不少免费的,对于个人来说其实大多数都是够用了。
如果你打算搭建一套发布系统,你可能会考虑jenkins,或者其他。 我要介绍的则是一些现成的,使用更简单的工具。没用特殊环境要求的情况下则完全可以代替jenkins。
上面只是列举了四类,实际上你会发现市面上的云服务商和代码仓库都提供了类似的工具,虽然有些是收费的,但是也有不少免费的,对于个人来说其实大多数都是够用了。
接上篇《博客迁移至hugo gitpage》后,因为缺失了每一篇文章的浏览量,而hugo又不具备这样的功能,原因还是gitpage不具备数据存储能力,自然就没办法统计每一篇文章的浏览量了。原本想使用自己服务器提供一个接口来记录,但发现https协议不支持调用http协议的接口,会出现block:mixed-content
错误。
错误:https页面去发送http请求报错(浏览器阻止https发送http请求)
问题是明确了,但是我也没办法提供https的接口,免费的证书也用在了www.yuedun.wang上了。
后来想到了leancloud,直接在前端调用api,将数据存储在云端。
<script src="//cdn.jsdelivr.net/npm/leancloud-storage@4.11.1/dist/av-min.js"></script>
<script>
// https://leancloud.cn/docs/sdk_setup-js.html#hash14962003
// https://leancloud.cn/docs/leanstorage_guide-js.html#hash813593086
const appId = "xxx";
const appKey = "xxx";
const serverURL = "xxx";
AV.init({ appId, appKey, serverURL });
function updateCollect() {
const collect = new AV.Query('Collect');
const url = location.pathname;
collect.select(['url', 'pv'])
collect.equalTo('url', url);
collect.first().then((col) => {
if (!col) {
// 声明 class
const Collect = AV.Object.extend('Collect');
// 构建对象
const collect = new Collect();
// 为属性赋值
collect.set('url', url);
collect.set('pv', 1);
collect.save()
} else {
col.increment('pv', 1)
col.save();
// 元素不存在的情况
try {
const context = document.querySelector('.post__meta.meta');
const pv = document.createElement('div');
pv.setAttribute('class', 'meta__item-author meta__item');
const span = document.createElement('span');
span.setAttribute('class', 'meta__text');
span.innerText = "浏览(" + col.get('pv') + ")";
pv.appendChild(span)
context.appendChild(pv)
} catch (error) {
console.error(error);
}
}
});
}
updateCollect()
</script>
因为hugo-dpsg主题没有浏览量字段,所以通过js在对应的位置插入浏览量字段即可。
6月初的时候,3年前买的阿里云服务器到期了,又买了其他服务器,但是只有1年期,于是进行了一番数据,应用迁移,这么一顿操作下来还是挺累的,尤其是在linux上安装mysql,mongodb,安装后又是连接不上,用了好几天时间才搞定,挺烦的。
再想到一年后又是一顿操作,不由得一个激灵。
经过一番的思量后,决定将自建博客迁移至gitpage上。
首先列出自己博客具备的功能:
整体比较简单,没什么复杂功能。而很多静态博客也具备这些功能,而且做的更好,所以基本不会有主要功能的缺失。所以迁移到gitpage上也不会有什么问题。
静态博客在一些细节功能上面确实会有缺失,比如:
整体来说,除了数据存储功能缺失外,其他都是可以实现的。
将mongodb数据中的博客导出为本地markdown文件。
// mongodb数据转markdown
function genMd() {
return Blog.find({ status: 1 }, null, { sort: { '_id': -1 } })
.then(data => {
data.forEach((b) => {
debug(b)
let tags = b.tags.split(",")
let blog = `---
title: "${b.title}"
description: "${b.content.replace(/<[^<>]+>/g, "").replace(/\r\n/g, "").replace(/\n/g, "").substr(0, 80)}"
date: ${b.updatedAt.toISOString()}
draft: false
authorbox: false
categories:
- "${b.category}"
tags:
- "${tags[0]}"
- "${tags[1]}"
- "${tags[2]}"
- "${tags[3]}"
---
${b.content}
`
fs.writeFileSync(`f:/workspace/yuedun\.wang/content/blogdetail/${b.id}.md`, blog, { flag: 'a+' })
// debug(b.createdAt.toISOString())
})
return "data";
});
}
ok!完成。
其实git-bash-for-windows这个git bash工具已经很好用了,不过对于平时需要开3-5的bash窗口的我来说就比较烦了,一直要不停的切换窗口,所以想找一款像linux terminal一样可以多开的工具,幸好有这样的工具,那就是ConEmu。
使用前需要一些配置,不配置也没关系,就是使用起来不方便,我是按照的习惯完全配置成了git bash的使用方式。
这样就可以完美使用git bash,不论是自动补全还是颜色主题都和git bash无异。
另外cmder其实也是我使用过的一个不错的工具,同时推荐试用。
虽然出现git did not exit cleanly (exit code 128)的情况各有不同,不过其中一种是提交时的读写权限有问题,如果本地代码连接的是SSH仓库,那么可能是服务端没有配置SSH Key。github有两个地方配置sshkey,有一个是全局的,另一个是针对单个仓库的,如果给某个仓库配置了Deploy keys(其实和SSHkey一样),提交另一个代码时就会出现git did not exit cleanly。对于我这种不熟练的人来说就想着再添加一个Deploy keys,但是又提示Key already in use,这时就要看看是不是其他仓库单独配置了ssh key。如果仓库太多具体哪个配置了也不太清楚,有个简单快读的办法是在命令行执行 ssh -T -ai .\id_rsa git@github.com,会告诉你哪个仓库在使用本地的id_rsa内容。删掉Deploy keys,配置为全局SSH Keys就行了
切换到C:\Users\\.ssh
执行命令:ssh-keygen -t rsa -C “邮箱地址”
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa):
第一次生成由于没有id_rsa文件和id_rsa.pub文件,所以需要生成这两个文件,然后手动输入:./id_rsa
Enter file in which to save the key (//.ssh/id_rsa): ./id_rsa,虽然要求输入//.ssh/id_rsa,但这种方式不是在当前目录下
接下来两部是要求输入密码,不输入直接回车就完成了。
PS C:\Users\admin\.ssh> ssh-keygen -t rsa -C "myemail@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa): ./id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./id_rsa.
Your public key has been saved in ./id_rsa.pub.
The key fingerprint is:
9c:cc:db:3e:72:82:73:2e:41:0e:17:f4:3c:ea:70:4a myemail@163.com
The key"s randomart image is:
+--[ RSA 2048]----+
| .o |
| + |
| . o + |
| O o . |
| E S |
| . = = |
| . * = + |
| = = . |
| . |
+-----------------+
最后将.ssh目录下id_rsa.pub文件中的内容复制并添加到github或其他支持资源库中就可以使用ssh的协议clone资源了,没有添加进去是不能克隆的。
查看、添加、提交、删除、找回,重置修改文件
git help # 显示command的help
git show # 显示某次提交的内容 git show $id
git co – # 抛弃工作区修改
git co . # 抛弃工作区修改
git add # 将工作文件修改提交到本地暂存区
git add . # 将所有修改过的工作文件提交暂存区
git rm # 从版本库中删除文件
git rm –cached # 从版本库中删除文件,但不删除文件
git reset # 从暂存区恢复到工作文件