Coding代码仓库及CICD
因为我最后还是没有使用Coding的CI/CD进行自动部署Hexo,所以最后放弃了,选择了AzureDevops自动部署,成功了。不仅免费的CI/CD时间(免费的1800分钟)比Coding(免费的CI/CD的1000分钟)长,而且功能更加的丰富,我对于AzureDevops使用也是有一点经验的,毕竟自己也在服务器上搭建了相应的服务器。
coding提供了私有仓库的设计,同时还提供了类似于Jenkins的持续集成和部署工具。我使用coding的目的,其实就是因为使用Hexo搭建博客的时候,运行hexo d进行博客部署,会出现非常的慢的情况,有人说是因为网络的问题,那么能不能有什么自动化的方法进行自动部署呢?为什么不选择gitlab,gitlab也支持CI/CD,但是我家里的网络,和公司的网络,都无法向gitlab推送代码,所以非常的蛋疼。还有一个选择就是使用Travis CI,但是这个网站或者是工具
1.持续集成的构建环境
2.自定义 Docker 构建环境
3.enkins 自动化部署
4.部署流程
5.用Travis CI自动部署网站到Github (这篇文章使用的是Travis CI进行的部署)
使用Docker构建环境
使用最简单的构建步骤,也还是会出现问题:## 74b8db29/script.sh: docker: not found
我的操作也很简单,就是点击构建计划,新建构建计划,然后添加构建步骤,所有的都是默认的,第二步是默认的代码检出,然后就是自定义构建过程,我根据官方文档选择了Docker,然后选择了nodejs 12版本。然后就是开始构建。结果就会报错了。
对应的Jenkinsfile文件内容如下:
1 | pipeline { |
使用官方提供的构建环境
使用Docker不行,使用官方提供的默认的构建环境,执行node –version 命令行,就可以。
执行hexo d命令
既然能运行node命令,那么接下来要做的就是尝试着让构建环境构建hexo 部署环境,因为我源码中使用了gulp进行压缩和代码混淆等功能,如果能同时运行gulp命令,那么就可以更加的轻松和愉快了。话不多说,直接尝试着写shell脚本.
1 | npm install |
但是很遗憾,就是失败了。
继续努力
经过多次尝试,在设置构建任务的时候,使用图形化工具,可以安装gulp并执行构建任务。
但是出现的主要问题是在身份认证的过程了。
因为在本机开发的时候,从github上下载和上传代码,都是用ssh,我在github上也上传了我电脑的id_rsa.pub密钥,但是使用自动构建的时候,如何上传密钥呢?
1.Jenkins - SSH认证方式拉取Git代码
2.在持续集成中使用凭据 (这里是官方说明如何添加私钥)
3.jenkins credentials & git ssh 认证 (这里主要就是Jenkins中配置凭据的过程,就是添加一个环境变量)
使用凭据
(1) 首先就是在项目设置->开发者选项->凭据管理->录入凭据,创建一个ssh私钥,也就是把电脑上的~/.ssh/id_rsa.pub中的内容复制到coding中。
(2) 第二步就是在项目的构建计划->构建任务->设置->流程配置->图形化配置->自定义构建过程中选择加号->添加其他->withCredentials,就可以使用这个密钥了
(3) 在凭据配置中,可以设置命名用户私钥路径名以及子步骤
生成的Jenkinsfile文件大致如下:
1 | pipeline { |
(4) 使用凭据拉取代码
创建了凭据之后,就可以使用凭据进行拉取代码的操作,其中的url就是远程仓库的地址,credentialsId就是密钥的id号
1 | checkout([ |
1.构建 npm 类型制品 (这里又一个在step中使用withCredentials的方法,使用的是usernamePassword用户名密码的方式,这个已经很接近了,但是不是我需要的)
2.Checkout Jenkins Pipeline Git SCM with credentials? (这其实是如何配置Jenkins检出不同代码库的方式)
3.在Docker容器中使用ssh密钥 (在Docker容器中使用ssh密钥)
4.其他凭据类型 (这是Jenkins中关于withCredentials使用的方法)
5.Jenkins的凭证管理 (这篇文章类似于翻译一样,没有什么实际的例子可以借鉴)
6.SSH 指定密钥,连接远程服务器。 (这篇文章讲的是如何在使用ssh的时候,直接指定密钥文件的路径)
7.如何告诉git哪个私钥要使用? (这里是git又变量可以指定ssh密钥)
8.Is it possible to Git merge / push using Jenkins pipeline (这里提供了一个方式就是使用sshagent,以及使用)
ssh-add和sshagent
几经周折,还是没有成功。但是我在一篇gitlab的自动化部署方案上,看到了有ssh-add这个方法,不知道能不能用。
1.使用GitLab Ci 自动部署Hexo到GitHub (这个是使用gitlab进行自动部署的文章)
2.Install SSH Key task (这个是使用Azure Devops进行安装密钥的方法)
3.Jenkins的sshagent/credential設置 (这个就是Jenkins使用ssagent进行密钥登录ssh的过程,也就是上传密钥文件,然后使用ssagent通过id引入)