2 - jenkins - gitlab自动部署

目标:当有代码提交到了gitlab以后,自动部署新的代码。

1 准备工作

1.1 汉化(如果安装好就已经是中文了,跳过这一步)

manage jenkins -> manage plugins ->可选插件 -> 搜索 locale -> 直接安装


image.png

ps: 插件如果搜不到,表示你已经安装了。
安装完成后去配置:
manage jenkins ->Configure system


image.png

1.2 安装git和gitlab插件

  • manage jenkins -> manage plugins ->可选插件
  • 分别搜索git和gitlab,如果没搜到表示已经装好了,在 已安装 里能找到。
  • 安装

1.3 配置gitlab 插件

  • manage jenkins ->Configure system -> 填写gitlab配置 ->保存


    image.png

1.4 配置git插件

  • manage jenkins ->Configure system -> 填写git plugin配置 ->保存


    image.png

1.5 jenkins的服务器的sshkey需要添加到gitlab

  • 在jenkins生成key:
ssh-keygen -t rsa -C "your.email@example.com" -b 4096

这里需要注意,如果你jenkins启动用户不是root,则需要用你的启动用户去生成key。

  • 拷贝到gitlab

1.5 安装jenkins的服务器需要安装git:

yum install git

1.6 安装jenkins的服务器需要安装maven:

[root@kvm15 ~]# mvn -version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
Maven home: /home/maven/apache-maven-3.6.1
Java version: 1.8.0_151, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_151/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.17.1.el7.x86_64", arch: "amd64", family: "unix"
[root@kvm15 ~]#

2 创建jekins job

2.1 拉代码

起一个任务名字


image.png

填写描述和git相关信息


image.png

我们保存,然后构建一下,查看工作日志:
image.png

大概可以看出来,jenkins把代码clone到了指定的工作目录下,可以去工作目录核实一下:

[root@kvm15 lib]# cd /var/lib/jenkins/workspace/deploy_merchat_open_api
[root@kvm15 deploy_merchat_open_api]# ls
pom.xml  README.MD  src

2.2 打包

在 构建 下新建一个execute shell命令,命令为打包:
mvn package -Dmaven.test.skip=true -f pom.xml

image.png

保存,构建。
这个时候你会发现构建失败了,找不到mvn命令。 其实是因为jenkins没有使用系统的环境变量,需要单独配置环境变量(配置一次以后,所有job共用。)。在manage jenkins ->Configure System ->全局属性:
image.png

在此构建,已经成功,并且已经生成了可运行jar包(因为我是springboot项目):

pom.xml  README.MD  src  target
[root@kvm15 deploy_merchat_open_api]# ls target/
classes  generated-sources  maven-archiver  maven-status  merchant-open-api-1.0.0.RELEASE.jar  merchant-open-api-1.0.0.RELEASE.jar.original
[root@kvm15 deploy_merchat_open_api]#

2.3 推到远程服务器

用scp命令把可运行的jar包推到应用服务器。我这里只有一台机器,所以就用cp命令拷贝到指定目录下模拟推送到别的服务器。


image.png

2.4 重启

image.png

我们还需要判断一下是否有进程再杀进程,否则当没有进程的时候,执行kill命令会报错,完整的脚本:

mvn package -Dmaven.test.skip=true -f pom.xml
cp ./target/merchant-open-api-1.0.0.RELEASE.jar /home/exter/merchant/war/
pid=$(ps -ef|grep merchant-open-api|grep -v grep|cut -c 9-15|xargs)
if [ "$pid"x = ""x ]; then
    echo "no old pid"
else
    kill -9 $pid
    echo "$pid been killed"
fi

nohup java -jar /home/exter/merchant/war/merchant-open-api-1.0.0.RELEASE.jar -Xms256m  -Xmx256m --spring.profiles.active=test &

构建的日志看出已经成功:


image.png

去目录查看jar包,创建时间是刚刚:

[root@kvm15 deploy_merchat_open_api]# ll /home/exter/merchant/war/
total 35908
-rwxrwxrwx 1 root root 36768901 May 21 15:48 merchant-open-api-1.0.0.RELEASE.jar

但是。。。却没有进程:

[root@kvm15 deploy_merchat_open_api]# ps -ef|grep merchant
root     14575 13172  0 15:55 pts/1    00:00:00 grep --color=auto merchant

这其实是我把jenkins和应用弄在了一台上面引起的,不推荐这么做。 官方也有这个问题的描述:
https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller

其实就是jenkins默认会清理job产生的子进程,避免留下太对僵尸进程。解决方案是设置一下build_id:


image.png

或者
启动jenkins的时候禁用该功能:

java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

如果只是手动触发的话,到此就可以了。当我们需要自动的持续集成环境的时候,需要用到自动触发构建:比如定时(每天自动拉一下代码部署)或者每次有代码提交到代码仓库就自动部署一次。

2.5 设置代码提交时触发构建

构建触发器:


image.png
  • 触发远程构建 (例如,使用脚本):暴露一个带token的url,访问该url则触发构建。
  • Build after other projects are built:指定在一个别的job之后触发。
  • Build periodically : 周期性触发,比如 :每个月第一天触发。
  • Build when a change is pushed to GitLab. :当有代码push到git上触发,利用了git的hook
  • GitHub hook trigger for GITScm polling:通过github的hook触发
  • Poll SCM:定期检查,如果有更新则触发,没有则不触发。

我们这里选择用git的hook触发:


image.png

当push事件发生或者accepted merge request 事件发生时触发。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容