Jenkins指南

396 阅读4分钟

持续继承

CI/CD 翻译过来是持续集成/持续交付,本质就是将代码打包部署到服务器环境(前后端项目都一样),由于打包过程比较消耗性能,因此一般都是把打包和运行的服务器拆分出来,打包使用一台机器,运行是另外一台。整个过程从本质上来说就是在服务器上运行一段脚本。

为什么选择Jenkins

首先Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具、然后jenkin可以不用基于任何的插件,不像公司的coding流水线涉及到诸多的插件、jenkins可以基于最原生的环境、对于每一个步骤都透明可控,并且jenkins的权限管理功能也很强大。

Jenkins的安装

安装步骤参考 jenkins安装教程 安装过程很简单,安装完成之后就要新建任务并关联代码仓库、这个过程涉及到权限认证、具体可以参考Gitlab权限认证

Jenkins 构建脚本展示

打包的脚本可以全部配置在jenkins端,也可以自己在项目中创建一个build.sh(在下面的脚本中创建和在项目中创建的文件在linux中所属者会不同,会涉及到一系列读写权限),这里只是一个展示demo,具体还要根据实际情况来编写脚本。

output='/usr/share/nginx/html/static/webcps'
test -d $output || mkdir -p $output
source /etc/profile
test -e build.sh && /bin/bash -x build.sh $branch
git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/*
commit=`git rev-parse refs/remotes/origin/$branch^{commit}`
git checkout -f $commit
rm -rf node_modules; rm -rf dist-cloud;
tnpm install; tnpm run build
rsync -avP --delete ./dist-cloud/ $output

脚本具体位置参考下图

image.3.png

需要解释一下这里的output应该换成服务器路径、一般是通过ssh协议上传到运行服务器的具体目录、这里由于我是在本机测试、所以设置成了nginx下的静态目录。 另外这里的变量 branch 是配置了参数化构建过程 选项,主要是用来控制部署不同的分支、后续可以根据业务需求来扩展相关参数、配置可以参考下图。

image.4.png

踩坑点介绍

基本上jenkins的基本操作就这么多、下面具体介绍下我在这个过程中所踩的坑

1.代码关联过程

63391651024307_.pic.jpg

这里需要说明下jenkins服务跑起来的时候,会在服务器创建一个jenkins用户(比较特殊的一个用户,无法手动登录?)。所以我们使用ssh协议去管理代码的时候,创建ssh公钥要区分下用户,即在不同的用户的home目录生成公钥。登录服务器默认都是root用户(因服务器而异),此时在~/.ssh下创建的是root用户的公钥,但是jenkins执行构建脚本时是以jenkins用户身份运行的,所以我们要在jenkins用户主目录下生成ssh公钥,jenkins用户主目录一般是/var/lib/jenkins/,cd到该目录,然后执行ssh-keygen,创建完成后将公钥配置到代码仓库服务器。上图中的 Credentials 是设置私钥的地方、貌似root或者jenkins的私钥都可以。需要注意生成的秘钥文件的名称最好取默认的,id_rsaid_rsa.pub,如果不取默认的(自定义名称)就需要配置config文件,比较麻烦,否则就会造成拉不到代码。到这里好像root用户的公钥和私钥没啥用,其实root用户的公钥也需要配置到git代码服务器。

63471651024597_.pic_hd.jpg

如上图,我们配置的脚本被执行前,会执行一段其他脚本,这段脚本是以root身份执行的,如果不配置root的公钥,执行git相关命令就会报错,因此我们必须把root的公钥也加入到git服务器。

  1. 参数化构建过程设置

设置构建参数其实就是添加一系列环境变量、设置后在build脚本中是可以拿到的,但是需要注意的是,jenkins默认是开启的过滤环境变量的。

image.7.png

如果我们不填写Environment variables to retain就拿不到配置的参数,因此这里建议直接全部删除(点击右上角的x),此外,建议执行source /etc/profile获取公用的环境变量。

  1. 修改端口

jenkins 默认开启的是8080端口,由于这个端口比较常用,我们会需要调整jenkins的默认端口。按照安装教程中所说的vim /etc/sysconfig/jenkins,修改 JENKINS_PORT 后重启jenkins服务发现无效。 真正有效的方法应该是使用systemctl status jenkins 查看jenkins状态,相关介绍可以参考 Systemd 入门教程

image.8.png

如图所示,找到加载的.service文件,vim /usr/lib/systemd/system/jenkins.service, 搜索JENKINS_PORT后,修改端口号,重启jenkins服务后即可。

总结一下

jenkins的踩坑点基本介绍完毕,由于没有正式投入使用,权限模块也没有进行深入研究,等正式投入使用再补充权限模块的一些要点。