前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Coding Devops+自动构建以及部署博客

使用Coding Devops+自动构建以及部署博客

原创
作者头像
jcjyxjs
修改2021-09-16 17:30:42
1.6K2
修改2021-09-16 17:30:42
举报
文章被收录于专栏:毫无作为毫无作为毫无作为

看前须知

本文只是我使用Coding Devops+部署博客以及自动PushGitHub的过程记录,我只用到了repoci功能,不需要一模一样,hexo等可以效仿,其他仅作参考,有问题评论留言即可。

开始

实现的最终效果如图。

Coding这个实现起来不是很难,我自己用也不需要什么测试,迭代。

在想要构建的仓库里创建构建计划自定义构建过程不使用代码仓库。不适用代码仓库的原因是如果一开始就使用选定的仓库,运行CI会全局覆盖Git信息导致后续无法PushGithub

不选代码仓库就没有检出这一步骤,第一步创建执行Shell脚本,内容就是clone托管在Coding的仓库,不使用SSH方式,改成账号密码。除了账号密码以外的部分可以在仓库里找到。

git clone https://账号:密码@e.coding.net/用户名/项目名/项目名.git

Coding CI的初始目录如下,所有的操作都会在这个目录里进行,需要注意的是:如果有cd操作,cd结束之后会自动回到这个目录,所以所有的步骤都要cd或者直接把内容拖到这个目录。

/root/workspace

然后先删除项目内的.git文件夹(改也行),然后就是设置Git信息。在Coding CI内无法输入账号密码,所以PushGithub需要GithubPersonal access tokens。在这里新建tokenhttps://github.com/settings/tokens 并把对repo的控制勾上。

格式跟Coding那个仓库差不多,可以免密ClonePush等。

https://token@github.com/用户名/项目名.git

所有Git的操作就跟在本地一样,唯一的区别就是CI的服务器PushGithub很快hhh,格式如下,最后分支那里不用加HEAD

git push https://token@github.com/用户名/项目名.git branch

整仓Push到我的Github之后,开始构建并生成我的静态内容。我的博客和GitHub Pages是两个仓库所以我最终会提交两次,博客那个仓库主要做个备份。

我的博客用的Maverick,所以需要用到Python,版本只要大于3.6就可以,CI默认就有环境SDK内置。具体看官方文档。没有想要的环境或版本可以用自定义docker

https://help.coding.net/docs/ci/ways.html?&_ga=2.233204055.856802041.1631519683-1446587655.1624866774#%E9%A2%84%E8%A3%85%E7%9A%84%E8%BD%AF%E4%BB%B6-SDK

查看文档可以看到和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目录内的东西移动到工作目录,然后cloneGitHub的仓库,把.git移动到工作目录,删除clone的产物,最后git pushgit 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命令粘贴进来然后保存就可以。

最终就会是:我本地提交gitCoding的仓库,触发器这个CI检测到仓库变化然后运行,运行的内容就是启动另外一个CI,触发器结束任务,主要的CI开始运行我指定的内容。官方文档写的非常好,可读性极强。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 看前须知
  • 开始
相关产品与服务
CODING DevOps
CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档