
本文只是我使用Coding Devops+部署博客以及自动Push到GitHub的过程记录,我只用到了repo和ci功能,不需要一模一样,hexo等可以效仿,其他仅作参考,有问题评论留言即可。
实现的最终效果如图。

Coding这个实现起来不是很难,我自己用也不需要什么测试,迭代。
在想要构建的仓库里创建构建计划→自定义构建过程→不使用代码仓库。不适用代码仓库的原因是如果一开始就使用选定的仓库,运行CI会全局覆盖Git信息导致后续无法Push到Github。
不选代码仓库就没有检出这一步骤,第一步创建执行Shell脚本,内容就是clone托管在Coding的仓库,不使用SSH方式,改成账号密码。除了账号密码以外的部分可以在仓库里找到。
git clone https://账号:密码@e.coding.net/用户名/项目名/项目名.gitCoding CI的初始目录如下,所有的操作都会在这个目录里进行,需要注意的是:如果有cd操作,cd结束之后会自动回到这个目录,所以所有的步骤都要cd或者直接把内容拖到这个目录。
/root/workspace然后先删除项目内的.git文件夹(改也行),然后就是设置Git信息。在Coding CI内无法输入账号密码,所以Push到Github需要Github的Personal access tokens。在这里新建token,https://github.com/settings/tokens 并把对repo的控制勾上。
格式跟Coding那个仓库差不多,可以免密Clone,Push等。
https://token@github.com/用户名/项目名.git所有Git的操作就跟在本地一样,唯一的区别就是CI的服务器Push到Github很快hhh,格式如下,最后分支那里不用加HEAD。
git push https://token@github.com/用户名/项目名.git branch整仓Push到我的Github之后,开始构建并生成我的静态内容。我的博客和GitHub Pages是两个仓库所以我最终会提交两次,博客那个仓库主要做个备份。
我的博客用的Maverick,所以需要用到Python,版本只要大于3.6就可以,CI默认就有环境SDK内置。具体看官方文档。没有想要的环境或版本可以用自定义docker。
查看文档可以看到和Python有关的环境有:python3/pip3: 3.9、3.8、3.7。
首先我更新默认的pip版本,其实这个无所谓。
python3.9 -m pip install --upgrade pip然后就是安装依赖
pip3.9 install -r requirements.txt最后生成
python3.9 mvrk.py --config ./demo_src/config.py --source_dir ./demo_src/ --build_dir ./dist/部署完成之后我需要推送到我的服务器,创建执行 Pipeline 脚本,可以用私钥也可以用账号密码,具体参考官方文档:https://help.coding.net/docs/ci/deploy/ssh.html
如果是图形化编辑器,复制从def开始的内容即可,文本编辑器参考文档。填写好IP,端口等之后,可以看到credentialsId,凭据ID可以在当前项目页面左下角找到项目设置,开发者选项,就有凭据选项。新建凭据,可以用私钥也可以设置账号密码。添加完成后把凭据ID替换到执行的Pipeline脚本内。
链接格式:
https://jcjyxjs.coding.net/p/项目名称/setting/connection?page=1成功连接服务器之后,就等于直接操作服务器,首先我需要把生成的内容传输到我的服务器上,form就是CI目录,into就是我服务器目录。然后就是替换操作了。
sshPut remote: remote, from: '/root/workspace', into: '/xxxxxxxx/'def remote = [:]
remote.name = '名字随便'
remote.allowAnyHosts = true
remote.host = '服务器IP'
remote.port = SSH端口
remote.user = '用户'
// 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 id_rsa 无需修改
withCredentials([sshUserPrivateKey(credentialsId: "xxxxxxxxxxxxx", keyFileVariable: 'id_rsa')]) {
remote.identityFile = id_rsa
// SSH 上传文件到远端服务器
sshPut remote: remote, from: '/tmp/tmp.tar.gz', into: '/tmp/'
// 解压缩
sshCommand remote: remote, command: "tar -zxf /tmp/tmp.tar.gz -C /tmp/"
sshCommand remote: remote, sudo: true, command: "mkdir -p /var/www/example-site"
sshCommand remote: remote, sudo: true, command: "cp -R /tmp/site/* /var/www/example-site/"
sshCommand remote: remote, sudo: true, command: "cp -R /tmp/apache2/ /etc/"
// 重启 apache2
sshCommand remote: remote, sudo: true, command: "a2ensite example.com"
sshCommand remote: remote, sudo: true, command: "a2enmod headers rewrite ssl"
sshCommand remote: remote, sudo: true, command: "systemctl reload apache2"
}最后回到CI,还是创建Shell命令,我也不会其他方法,只能先删不需要的然后把dist目录内的东西移动到工作目录,然后clone在GitHub的仓库,把.git移动到工作目录,删除clone的产物,最后git push,git init然后添加远程仓库就是push不上去也不知道什么原因,我只能先这样。其他东西参考上文。
在每个步骤的最后我都添加了一步,推送消息到企业微信,这还挺方便的,执行到哪里了也都知道。
这个CI没有用代码仓库所以不会检测repo然后触发自动构建,所以在触发规则中,选择API触发,可以直接生成CURL触发命令,项目令牌和密码也可以一键生成,时间可以自定义。然后复制这个触发命令。
curl -u <项目令牌用户名>:<项目令牌密码> \
-v -X POST '自己的CI点生成可以看到' \
-H 'Content-Type: application/json' \
-d '
{
"ref": "master",
"envs": []
}'再次创建一个CI,使用Coding的仓库,然后创建一个Shell命令,把刚刚复制的CURL命令粘贴进来然后保存就可以。
最终就会是:我本地提交git到Coding的仓库,触发器这个CI检测到仓库变化然后运行,运行的内容就是启动另外一个CI,触发器结束任务,主要的CI开始运行我指定的内容。官方文档写的非常好,可读性极强。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。