Jenkins 构建
镜像库,容器云
服务器上传文件命令,跟SCP类似
yum install lrzsz -y
// 选择本地文件并上传
rz -y
# 前言
目前主流网站部署方法,通过Hudson/Jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目
持续集成组件
1)一个自动构建过程,包括自动编译、分发、部署、测试。
2)一个代码仓库,SVN, GIT
3)一个jenkins持续集成服务器
jenkins属于一个java代码,需要java容器才可以运行Jenkins,所以需要在服务器安装JDK+Tomcat
1 java jdk安装
https://www.yuque.com/allblue-byynd/ezv40n/qmxvg0
先查看是否已安装jdk
java -version
拷贝文件:
将/usr/xu目录中的所有文件及其子目录拷贝到目录/usr/liu中,命令如下:
$ cp - r /usr/xu/ /usr/liu/
2.安装tomcat
进入 /usr/lib/tomcat 目录,执行命令下载
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.39/bin/apache-tomcat-8.5.39.tar.gz
解压到指定目录
tar -zxvf apache-tomcat-8.5.39.tar.gz
cd apache-tomcat-8.5.39/conf/
启动tomcat
然后我们返回到apache-tomcat-8.5.39目录下,用cd 命令进入到bin目录下,启动tomcat
命令:sh startup.sh
http://ip:8080/ 访问tomcat主页
指向的资源目录是 tomcat/webapps/ROOT/index.jsp
./shutdown.sh
./startup.sh
重启tomcat,然后切换到tomcat的logs目录,键入
tail -f catalina.out
运行起来之后,浏览器访问tomcat显示404
可能是端口被占用
查看8080端口
netstat -nltp | grep 8080
下载jenkins.war
https://www.jenkins.io/download/
删除tomcat/webapps/ROOT 目录下的所有东西
把下载下来的jenkins.war上传到这里
启动Jenkins服务
执行命令:
java -jar jenkins.war
报错信息如下,没有指定端口号,或者端口号被占用
指定端口号,重新启动
java -jar jenkins.war --httpPort=9000
jenkins启动过程中会初始化,并会生成一个密码如下(后面解锁Jenkins时候用到)
接着就可以看到jenkins初始化的页面啦^v^
后台启动Jenkins
我们也可以使用nohup命令,让Jenkins在后台运行。
nohup java -jar jenkins.war --httpPort=8080 &
还有别的启动方式,可以使用tomcat启动,进入tomcat/conf目录,在server.xml里面修改端口号,或者进行域名配置,类似雨nginx的nginx.conf
进入tomcat/bin目录,执行./startup.sh
服务器安装git
因为要进行使用git连接仓库,克隆,拉取分支等等
服务器安装node
https://www.yuque.com/allblue-byynd/ezv40n/ikgxzk
jenkins下载插件以及全局工具配置
安装maven插件
配置jdk, maven, node
连接云服务器,
echo $PATH
获取全局环境变量,复制
【系统管理】-> 【系统配置】 -> 【环境变量】
增加环境变量
不进行配置,构建任务执行shell脚本的时候,可能会报错,如下
添加凭据,创建密钥
Jenkins通过SSH私钥凭证,免密登陆Gitee服务器
在Jenkins服务器创建公钥和私钥
ssh-keygen -t rsa
cd /root/.ssh
把公钥添加到gitee的ssh里面
把私钥配置到Jenkins里面(全局工具配置里,不同版本的入口不一样)
添加完成之后,在项目配置里git源可以切换成ssh, 选择上面配置的凭证就可以连接仓库了。
基础工作准备完成
----------------------------------------------------------------------------------------------------------------
Make工具
linux,windows最原始的编译工具,在linux下编译工具常用Make(windows下对应的工具为nmake)
它负责组织构建的过程,负责指挥编译器如何编译,连接器如何连接,最后生成一个可用的文件。
ANT工具
make在编译复杂的东西时使用不够灵活,语法很难理解,于是就衍生出ant工具
Maven工具
Maven工具是对ant工具的进一步改进,Maven像make一样,是个构建工具,有很多Maven plugin(maven插件)
Jenkins工具
Jenkins就是一个可视化的工具平台,通过编写一系列的脚本来控制编译、测试、打包、部署等流程。
Jenkins就是用图形界面的方式把maven进行一个整合。
Jenkins可以用于运行各种CI,测试,批处理任务等等,所以在Jenkins中将这些任务统称为“free-style software project”
linux:jenkins 默认安装目录
(1)/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里。
( 2 ) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
(3)/var/lib/jenkins/:默认的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:Jenkins日志文件。
Eclipse工具
新建任务并构建
先进行一个最基础的配置
选择灵活配置
描述
源码管理
git,
git登录账户名密码用于clone、pull等操作
指定分支
构建环境
不要勾选 Provide Node & npm bin/ folder to PATH
服务器已经下载node并进行了环境变量配置,如果这里选择会造成冲突。
构建
执行shell:
```javascript
pwd
ls
node -v
npm -v
git --version
echo '构建的版本号:'${BUILD_NUMBER}
npm install
npm run build
```
点击【应用】,点击【保存】
点击【立即构建】
查看日志
编译生成的文件存放在 服务器/root/.jenkins/workspace目录下面
新建jenkins任务
https://blog.csdn.net/qq_35620501/article/details/87459391
设置构建触发器
这里选择webHooks触发
Jenkins上操作
本地push就会自动触发Jenkins构建
部署项目
使用 Jenkins 可以完成整个 CI/CD 的操作,之前关于源码下载、镜像构建、镜像推送等操作都只能算是 CI 的步骤, Jenkins 完成一系列包括构建和部署的操作,属于CD操作
安装插件: public over ssh
Publish Over SSH 是 Jenkins 的一个插件,可以使用 SSH 的方式远程连接服务器,并进行文件的传输和命令执行。
由主节点不具备环境,只进行分配任务,执行构建操作。配置从节点,web服务器,从节点构建完成之后,把镜像和部署代码一并传到服务器节点上面,然后在服务器节点执行部署命令,这几个步骤都是 Publish Over SSH 可以完成的。
全局配置:ssh server
点击【高级】配置密码
ssh的配置可使用密钥,也可以使用密码,
测试连接,并应用保存
在任务配置中增加【构建后操作】
send build artifacts over ssh
exec
# 进入项目的文件夹 ( 项目路径: /usr/local/webserver/nginx/testweb02/testweb02/xxxx )
echo '--- 1.进入项目的文件夹:---'
cd /usr/local/webserver/nginx/testweb02/testweb02
pwd
# 打包压缩项目文件
echo '--- 2.打包压缩项目的文件:---'
# 自动创建testweb02-copy文件夹,存在则创建失败。mkdir -p a/b/c 创建多级目录
mkdir /usr/local/webserver/nginx/testweb02-copy
tar -zcvf /usr/local/webserver/nginx/testweb02-copy/${JOB_NAME}-${BUILD_ID}.tar.gz *
# 查看压缩备份后的文件
cd /usr/local/webserver/nginx/testweb02-copy
echo '--- 3.下面是已经备份项目的版本:---'
ls
# 回复备份
echo '--- 4.下面是备份回滚的命令:---'
echo '删除旧项目:rm -rf /usr/local/webserver/nginx/testweb02/*'
echo '回滚指定版本: tar -zxvf /usr/local/webserver/nginx/testweb02-copy/testweb02-16.tar.gz -C /usr/local/webserver/nginx/testweb02/'
echo '停止服务:/usr/local/webserver/nginx/sbin/nginx -s stop'
echo '重启服务:/usr/local/webserver/nginx/sbin/nginx'
echo '--- 构建结束 ---'
点击【立即构建】
需求场景
一般情况下,通过 Jenkins 完成一个项目的上线,至少应该包括三台虚拟机,一台用来运行 Jenkins 服务,作为主节点,第二台(正常情况可能不止一台)是一个从节点,由主节点分配任务,执行构建操作,之所以从节点会很多是因为每个从节点可能配置的不同的环境,可以完成特定的构建任务,比如某个从节点配置了 nodejs 环境,所以可以执行前端项目构建,而另一个配置了 Java 环境所以可以构建 Java 项目;第三台虚拟机就是项目部署的服务器了(有时候可能也不止一台),可以通过 Jenkins 远程控制服务器完成构建后的部署。
现在我就有3个虚拟机,1个 Jenkins 主机点,使用容器运行的,1个 Jenkins 从节点,配置了 nodejs 环境和 Java 环境,所以可以完成 vue 项目的构建,最后一个是一台仅仅配置了 docker 环境的虚拟机,只能运行容器。这个场景很服务实际的项目场景。
解决方案
Jenkins 主节点由于是在容器中运行的,所以根本不具备任何其他环境,所以只做任务分配;从节点需要完成的事情是从 GitHub 拉取代码,并打包 vue 项目,最后构建成镜像,构建完成之后可以推送到远程仓库,也可以打包成 tar 包(这里为了使用 Publish Over SSH 的文件传输功能,所以使用 tar 包镜像);从节点构建完成之后,把镜像和部署代码一并传到服务器节点上面,然后在服务器节点执行部署命令,这几个步骤都是 Publish Over SSH 可以完成的。