前言
51假期回来后点击了一下我的个人博客后,卧槽??? 啥情况?怎么504啦?我没动过啥呀?
赶紧上网审查看,发现是 gitee 官网正在维护 gitee pages服务,也有网友称已经咨询过 gitee 官方客服了,得到的回复是 gitee要下线 pages服务了。 但是没任何通知,悄摸摸的就下线了,导致使用gitee pages作为个人博客的用户都挂了。
我也是第一时间去gitee官网提了 issues ,询问什么时候能恢复,但是好多天了都没有回应消息,让人叹息...
于是第一时间想到有什么替代方案,github肯定不考虑,国内访问不友好。 上网转悠一番后决定使用 gitlab 替代!
gitlab 创建项目
首先打开 gitlab 登录: 登录 · GitLab ,这里就没注册直接使用我的github账号登录。
然后就是先创建一个 gitlab 的项目了,这里与github、gitee 都是大同小异,就不多说了。不熟悉的网上一大堆教程。学就完事了!
生成git公钥(如果之前有配置,直接跳过)
1、配置本地用户名及邮箱
# 配置用户名
git config --global user.name "用户名"
# 配置邮箱
git config --global user.email "邮箱地址"
以上命令执行结束后,可用 git config --global --list 命令查看配置是否成功
2、git生成公钥
在git bash窗口输入下面指令即可生成带注释的公钥
ssh-keygen -t rsa -C '邮箱地址'
-
设置存放公钥的位置,默认的话直接回车键确认
-
输入密码和确认密码,不设置密码直接按回车键
查看本地git公钥
通过git bash命令窗口:
查看公钥:cat id_rsa.pub 或者 vim id_rsa.pub
因为在之前我的电脑上是配置过的,所以直接输入 cat ~/.ssh/id_rsa.pub 即可查看,然后进行配置
开启 GitLab Pages
由于 gitee仓库是无法自动部署的,所以在我之前的博客cicd脚本文件中使用了一个 actions 来专门实现代码提交到gitee后且自动部署;
而 gitLab 的 pages 是必须要通过 gitLab ci 来触发后才可以自动部署,所以就需要在跟目录创建一个 .yml 工作流文件
1、配置gitlab的ci文件.gitlab-ci.yml文件
由于我的这个仓库源码是从 github 项目打包后产出public 的纯html静态资源后,在通过ci脚本文件提交到gitlab仓库的,所以我这里的脚本内容就可以直接使用纯html的脚本
根目录添加 .gitlab-ci.yml 文件(根据自己的实际需求配置对应脚本内容):
pages:
stage: deploy
script:
- mkdir .public
- cp -r ./* .public
- rm -rf public
- mv .public public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
2、使用github actions 把github某个仓库代码同步到gitlab仓库
由于之前我就实现了 把 github 的仓库代码使用 actions 同步到gitee平台,如果还需要同步到 gitlab基本上操作是一样的
我这里就不同步了,因为我还是在我的github管理博客源码, 只是把hexo打包后的静态文件push到gitlab,使用gitlab的pages
参考: 如何使用Github Action同步代码到其他平台 - licyk的小窝
3、调整gitlab ci文件
由于我这样的操作不是基于gitlab托管博客源码的,所以上面第一步在仓库根目录创建ci文件是有问题的!
因为托管在 github 的博客源码的 ci文件中是每次 git push -f xxx.gitlab.git 强制提交到远程仓库的,一旦提交会使远程仓库与本地代码一致。这里只push了public下的所有文件,其中是没有.gitlab-ci.yml的!
没有的话每次是提交代码到gitlab仓库了,但是触发不了cicd!
我这里解决方法是直接把我们创建好的 .gitlab-ci.yml 放置我的博客源码目录中:
内容不变,然后就需要在博客ci脚本中 提交代码时复制指定文件到public目录下 cp config/.gitlab-ci.yml public/
这样我们在一起把hexo打包好的产物+我们写好的 gitlab 的ci文件一起提交到gitlab仓库。 这样每次提交代码后 gitlab 也会触发 cicd 从而部署我们的博客站点。
gitlab添加个人令牌(token)
在设置中找到 访问令牌、然后添加
添加令牌时需要注意 选择角色这一项,根据自己的需求选择,默认访客角色是没有权限提交代码的! 添加完成时,如果别的地方需要用(如github仓库需要存储变量时)先暂存一下生成的token值,因为刷新页面后将不可查看。
gitlab pages相关问题
GitLab Pages访问链接太长
当配置完.yml文件后,进入pages页面就会发现出现了链接,但是这个链接中会有一串 英文数字,不像之前github、gitee生成好的pages链接。
经过研究发现是上面的 使用唯一域名选项造成的,取消勾选保持就好了。
GitLab Pages链接与注册用户名不一致
由于我先开始想使用 sisi001.ghitlab.io 的链接来访问的,但是当我把仓库名称设置成 sisi001.gitlab.io 后最终生成的链接为:https://silin001.gitlab.io/sisi001.gitlab.io 原来这样是不行的!
要想使用注册用户名为访问地址,项目名称必须和用户名一致, 但是设置时需要注意项目名称和项目路径都要改成与注册用户名一致才可以。 经过修改后最终效果如下:
gitlab提交报错:HTTP Basic: Access denied.
cicd执行push 代码到gitlab时报错:
查看文档
参考发现这几个权限是必须的, 于是删除令牌,重新创建令牌勾选对应权限
但是还是报错! 仔细想了想后,我突然恍然大悟,yml脚本文件中这里使用的 secrets.GITLAB_ACCESS_TOKEN 取的是github当前仓库设置中配置的变量!而我好像还没设置。
找到当前源码仓库在 settings 设置中找到 secret 设置名称为 : GITLAB_ACCESS_TOKEN 值就是在gitlab 平台中生成的 token 的值了(gitlab添加个人令牌见上文)
gitlab push 403错误
cicd 执行提交代码到gitlab时报错403问题:
403错误原因可能有几种
1、权限问题
403错误通常表示你没有足够的权限执行特定的操作。这可能是因为你没有登录,或者你的帐户没有被授权执行该操作。解决此问题的方法是确保你已经登录到正确的帐户,并检查你的权限设置。
2、项目或分支受保护
如果你尝试对受保护的项目或分支执行操作,可能会收到403错误。这通常是由于项目管理员设置了访问限制。解决此问题的方法是联系项目管理员请求相应的访问权限。
3、令牌问题
GitLab支持使用个人访问令牌进行身份验证。如果你使用的令牌无效或过期,你可能会收到403错误。解决此问题的方法是生成一个新的访问令牌,并确保在使用令牌进行身份验证时提供正确的凭据。
4、代理问题
如果你在GitLab后面使用了代理服务器(如vpn),而代理服务器未正确配置,那么你可能会遇到403错误。解决此问题的方法是检查代理服务器的配置,或者先关闭代理。
解决gitlab push 403失败问题
首先就先去查看项目成员权限,果然,前面新建的token角色为访客!访客角色是只有只读权限,可以查看项目的内容,但不能推送代码、创建分支或创建问题。
于是删除当前令牌,重新创建新的令牌并且选择角色为维护者即可;
当解决完权限问题后,继续提交代码,结果又报错了!
查看项目分支情况发现 main 分支是受保护的分支!
解决方案有2种:
-
1、将所要push的内容所在的分支的
protected权限关闭进入所在项目的settings,设置当前项目分支权限
-
2、新建其它分支,将项目代码push到新建的分支上,然后再进行 merge 请求
因为这个仓库是我的个人博客,也只有我自己会对这个库进行操作,所以我就使用方案1,修改当前gitlab仓库的main分支的权限,允许强制推送即可。
最终hexo源码的ci github actions 执行成功:
此时在看看 gitlab仓库,发现已经把产物提交上来了,并且ci也在跑,稍等分钟后如果没有问题将完成,然后就可以访问我们的站点了。
最终效果
欢迎大家访问: 尖椒土豆sss (silin001.gitlab.io)