前言
今天公司的一个小伙伴整了一个Jenkins自动化构建流程,把他牛逼的,看的我羡慕了,作为一个前端小弱鸡,这该死的好胜心激起了我的胜负欲!!!咱也整一个! 欸,就是玩儿!
准备
- 服务器两台 centos7.9(一台部署Jenkins,一台部署项目,脑子一热买的,应该可以用一台,各位看情况好吧)
安装Docker
- 在安装之前先安装两个依赖,分别是
- device-mapper-persistent-data:linux下的一个存储驱动,高级存储技术
- lvm2:用于创建逻辑磁盘分区
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加阿里云的Docker镜像源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装Docker
yum install docker-ce -y
- 通过linux进程管理服务命令启动Docker
systemctl start docker
systemctl enable docker
- 查看docker版本
docker -v
安装docker-compose
通过compose可以使用yml文件配置程序所需要的所有服务,最后使用命令运行,就能创建并启动yml中设置的左右服务
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
不过github太慢,试试换源安装,快的飞起
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
安装完成之后提升权限:
sudo chmod +x /usr/local/bin/docker-compose
安装完成后可以使用命令查看版本信息
docker-compose -v
通过docker安装nginx和jenkins
拉取nginx和jenkins镜像
docker pull nginx
docker pull jenkins/jenkins:lts //lts是jenkins的稳定版
此处可以提一下可以通过 docker search命令来搜索镜像,安装自己中意的镜像
docker search jenkins
安装完成之后通过命令查看docker下存在的镜像
docker images
目录规划
便于管理,我们将nginx和jenkins放到同一个文件目录中可以在根目录或者home文件夹下,或者单独创建一个文件夹目录,结构如下
+compose
-docker-compose.yml //docker-compose执行文件
+nginx
-nginx.conf //nginx配置文件
+jenkins
-jenkins_home //jenkins挂在卷
docker-composde.yml
version: '3'
services: # 集合
docker_jenkins:
user: root # 为了避免一些权限问题 在这我使用了root
restart: always # 重启方式
image: jenkins/jenkins:lts # 指定服务所使用的镜像 在这里我选择了 LTS (长期支持)
container_name: jenkins # 容器名称
ports: # 对外暴露的端口定义
- 8080:8080
- 50000:50000
volumes: # 卷挂载路径
- /home/jenkins/jenkins_home/:/var/jenkins_home # 这是我们一开始创建的目录挂载到容器内的jenkins_home目录
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker # 这是为了我们可以在容器内使用docker命令
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
docker_nginx:
restart: always
image: nginx
container_name: nginx
ports:
- 8090:80
- 80:80
- 433:433
volumes:
- /home/nginx/conf.d/:/etc/nginx/conf.d
- /home/webserver/static/jenkins/dist/dist:/usr/share/nginx/html
nginx.conf
server{
listen 80;
root /usr/share/nginx/html;
index index.html index.htm;
}
这两个文创建完成之后,进入之前创建的compose目录下,启动环境
cd /home/compose
docker-compose up -d //这是启动
docker-compose stop //这是停止
启动后通过docker ps -a查看容器情况
STATUS显示为Up,端口号如图显示 就正常了,这个时候用公网ip加上8080端口号就可以访问jenkins了
这时界面会告诉你密码存储的位置,可是应为我们之前通过docker安装jenkins是自己规划了目录,所以目前密码存放的位置应该是
/home/jenkins/jenkins_home/secrets
jenkins初步设置
安装推荐插件
插件安装完成之后其实还会有个问题,那个中文插件没有全部翻译成功,很多都没有翻译,这个时候需要去插件中心搜索Locale插件,安装
安装完成后重启jenkins,在浏览器链接拦输入以下命令重启jenkins
服务器ip:端口(一般为8080)/restart
设置中文
找到locale模块,设置成zh_CN,然后刷新
有的时候,这样设置之后依然没有用,这个时候小技巧来了
先将语言设置成英文zh_US,然后重启,重启结束之后,在将语言改成中文zh_CN,刷新,之后就差不多了(其实还是有小部分翻译不全,不过已经是极限了感觉)
jenkins配置
安装gitee、Publish Over SSH、nodejs
在插件中心搜索这三个插件,并安装
- gitee 帮助我们关联jenkins
- Publish Over SSH 帮助我们构建玩项目之后将文件传到指定服务器上
- nodejs 这应该不用我解释了
配置nodejs
配完保存
配置publish over ssh
- 在jenkins配置的服务器上生成密钥
ssh-keygen 可以直接生成密钥
不过我是用的是一面的命令,这里为了之后关联gitee时方便,我带上了邮箱,这两处可以使用相同的密钥
ssh-keygen -t rsa -C "XXX@163.com"
一路回车
在.ssh文件夹下生成了两个文件
- id_rsa 私钥
- id_rsa.pub 公钥
- 部署项目的服务器端配置公钥
方法一:在部署项目的服务器端 进入.ssh目录,手动添加
cd /root/.ssh //进入.ssh目录
vim authorized_keys //创建并编辑authorized_keys文件,并将之前创建的公钥文件中的内容复制粘贴到其中,保存
方法二:在部署jenkins的服务器端创建后传如部署项目的服务器端
cd /root/.ssh
cat id_rsa.pub >> authorized_keys //将公钥拷贝到authorized_keys文件中
scp authorized_keys root@目标及其IP:/root/.ssh //将文件拷贝到部署项目的机器上
- jenkins上配置插件
设置完成后保存
4.测试连接
点击测试连接后 显示成功,则表示配置没问题了
关联jenkins和gitee
1.给gitee添加之前生成的公钥id_rsa.pub
2.给jenkins添加凭据(私钥)
创建jenkins构建项目
准备工作都做好了,接下来就开始创建构建项目了
新建项目
源码管理
这个时候在你的gitee上需要有一个测试项目,我是新创建了一个vue项目
把项目ssh连接拷贝到jenkins上
构建触发器
选择giteewebhook出发构建
在gitee项目这设置webhooks
根据jenkins项目构建触发器中生成的webhooks的链接和密码填写,添加webhooks
都设置好后就可以测试一下了,点击测试
就能发现jenkins就出发构建了
这里发现jenkins上的构建时间不正确,修复方法如下
然后运行如下代码
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
运行完之后就发现时间正确了
设置构建环境
选择需要的node版本,我就安装了一版
构建
选择执行shell
node -v //查看node版本
npm -v //查看npm版本
pwd //查看当前目录
npm install //安装依赖
npm run build //打包
cd dist //进入打包文件夹
tar -zcvf dist.tar.gz * //将文件夹中的内容压缩成dist.tar.gz
保存之后点击立即构建后,你就会发现,jenkins服务器下,成功构建了文件,文件目录如下(如果你之前设置的目录结构跟我一样的话)
构建后操作
在我们构建完成之后,我们就需要把打包文件放入我们要部署的服务器的指定文件夹下,这就需要用到我们之前安装的插件Publish Over SSH,需要在构建后操作中配置一下
选择send build artifacts over SSH
这个命令会在部署的服务器上运行
cd /data/front //进入目录
tar -zxf dist.tar.gz //解压
rm -rf dist.tar.gz //删除压缩包
至此就设置完成了,我们点击构建之后就会发现,部署的服务器上多了一个打包完成的目录
小结
虽然已经结束了,但是我还有个想法,就是是不是可以把niginx的配置文件放在项目里面,让后在构建后操作里做一些事情,构建完成之后,自动配置nginx,这样我们要是有一个新的项目就可以直接部署到nginx了。
可是转念一想,岂不是每一次构建都会做一次这个nginx配置,这样不太好,我只需要在第一次构建的时候做一个这样的配置,由于我不是很会linux命令,以及nginx的一些配置,所以目前这个我还不知道怎么搞,还希望有大哥来指导指导小弟,万分感谢!