栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

使用Jenkins从gitlab拉取代码并部署以及gitlab更新代码后自动构建

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Jenkins从gitlab拉取代码并部署以及gitlab更新代码后自动构建

使用Jenkins从gitlab上拉取代码,使用ssh。

  • 创建Jenkins服务器的SSH密钥对;
  • 为相应的Gitlab用户添加密钥对的公钥,相当于Jenkins拉取代码时,使用的是该Gitlab用户,拥有其相应的代码克隆权限;
  • Jenkins添加密钥对的私钥,实现基于key的连接;
  • 将Gitlab项目的SSH克隆地址配置到相应的Jenkins任务中,在构建时将代码拉取到Jenkins服务器的相应目录,为接下来的测试、部署等操作做好准备。

首先进入Jenkins 容器中

docker exec -it jenkins bash
# 使用 -m PEM ,后面Jenkins使用插件Publish over SSH 不会报错
ssh-keygen -m PEM -t rsa -b 4096
cd ~/.ssh
cat id_rsa.pub
cat id_rsa

将 id_rsa.pub 复制到gitlab中

将 id_rsa 私钥添加到 Jenkins全局凭证中

测试




保存


这时已经将代码成功拉取到jenkins本地了,这样就可以做后续的编译部署操作等等。

但是如果拉取代码失败!
如下:

在Jenkins容器中输入:

git  ls-remote -h git@192.168.150.128:xiuyuandashen/hello_world.git HEAD

测试拉取代码

实在不行的话,在.ssh目录下添加config
User 为gitlab用户名称,Host gitlab的ip
IDentityFile 为私钥地址

部署

这时代码已经在jenkins的工作目录下了,我们需要将其编译打包发布到其他服务器上。
首先我们要解决jenkins免密ssh登录部署服务器的问题。
假设我们在 192.168.150.128这台服务器上部署项目。

将Jenkins这台机子的公钥,拷贝到部署服务器上
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.150.128

然后我们需要将私钥放在Jenkins上,这样Jenkins才能访问控制部署服务器。

在Jenkins中安装 插件Publish over SSH

安装后,去系统管理=》系统配置中配置它


测试一下是否联通

进入项目的配置

执行 shell

echo '当前 WORKSPACE 工作目录'
pwd
#'在构建时,默认会直接切换到 workspace 目录,所以可以直接将当前目录中的内容复制给被部署的服务器
# 使用maven 打包
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/Maven3.8.5/bin/mvn  clean package
# 将打包后的文件拷贝到部署服务器
scp -r ./target/*.jar  root@192.168.150.128:/data/

#echo '登录'
echo '部署'
# 打包运行

下面就是在远程服务器上运行打包后的jar包

这个build.sh 脚本是在部署服务器上的

#!/bin/bash
mv /data/*.jar /data/app.jar
echo '部署'
java -jar /data/app.jar --server.port=9099 &

配置完这些后,进行保存。进行构建

部署成功!

构建触发器,当gitlab代码改变后自动部署

首先需要下载 gitlab 插件,下载后就可以在构建触发器看到下面的选项。
在项目设置中构建触发器,这边我们默认 push时进行触发构建。


然后去gitlab进行设置

当报 Urlis blocked: Requests to localhost are not allowed错误时,去下面这边设置即可


测试

在部署项目时删除原来的文件以及原有的进程再部署

# 用 && 连接起来,这样不会出现实际上项目已经部署成功,但是Jenkins的构建不会结束的问题,最终会导致构建超时
# NR==1 表示第一行 $2 表示第二列就是 pid

echo '删除原来的文件' && rm -rf *.jar && kill -9  `ps -ef|grep app |awk 'NR==1{print $2}'` && sh /data/build.sh
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号