本人PHP开发者,项目组大多是PHP,少量java项目。

因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解放生产力。

其实仅gitlab自己就可以实现代码的自动化部署,gitlab有自己的CI,甚至只用gitlab的webhook(新版本叫 Integrations )+ 服务器端shell脚本就可以实现自动化部署。

但我们为什么还要用jenkins呢,

  1、提供一个可视化的操作界面,对部署结果一目了然,运维与开发人员不需过多的参与。

  2、便于管理,当公司的项目足够多的时候,jenkins的好处更明显,多项目,多分支,分布式服务器节点,等等。如果没有一个管理软件,后期就是一个灾难。

尝试之前, 你最好做过webhook钩子函数调用shell命令自动部署或者对于git的分支了解的比较透彻。

PS:由于第一次做jenkins,忘记截图,所以图全是盗的。。。哈哈

前置条件:

  1、gitlab的搭建和使用,参考之前的博客   https://www.cnblogs.com/lz0925/p/10768048.html

  2、git的安装和秘钥的配置:

      https://www.cnblogs.com/lz0925/p/10791147.html     git在linux下的安装

      https://www.cnblogs.com/lz0925/p/10794616.html     git的公钥和私钥的配置

完成以上两步后,开始安装jenkins (ps: 尝试了下docker安装,但是找不到最新版本的jenkins,导致各种报错,无法进行,最终选择正常模式安装)

1、jenkins的安装

(1)、首先安装java环境 (2019-05,在centos7.5上使用这个版本的java环境就可以)

yum -y install
java-1.8. java-devel-1.8.

(2)安装jenkins

  

 cd /etc/yum.repos.d/

wget http://pkg.jenkins.io/redhat/jenkins.repo

rpm --import  http://pkg.jenkins.io/redhat/jenkins.io.key

yum install -y jenkins

systemctl start jenkins  或者用service命令

(3)修改端口号(PS:如果不需要修改则直接看第四步)

#新版和旧版所在文件不一样

vim /etc/sysconfig/jenkins    #我们使用新版

#旧版貌似在
vim /etc/init.d/jenkins #进来后查找
JENKINS_PORT="" #我的在56行,因个人爱好,修改成9999
systemctl restart jenkins  #如果修改端口,则重启服务

(4)访问jenkins

通过浏览器   http://IP:8080  访问 jenkins

第一次登陆需要初始密码,密码位置图片上有,密码在安装jenkins的时候也在命令行给出来过

cat /var/lib/jenkins/secrets/initialAdminPassword

点击continue

(4)选择安装的插件:

可以选择  Install suggested plugins  默认安装, 也可以只安装 gitlab plugin,git plugin,还有ssh plugin插件。

gitlab 和 git 插件用来与gitlab沟通进行拉取代码等代码管理工作。

ssh插件,可以让jenkins在其它的远程服务器上执行shell命令

这里我选择默认安装, 然后等待安装完成(jenkins版本低的安装插件会失败),我后来换了最新版本,一次全部成功

(5)设置账号密码

 密码创建完成之后就可以登录jenkins了。

(6)继续安装插件

如果在安装jenkins的时候没有安装相关插件,可以按照如下方式安装(已经安装,则不需要)

直接在系统管理>插件管理中搜索gitlab或SSH相关插件安装即可

  

 2、jenkins秘钥配置

(1)jenkins生成密钥对 设置jenkins 的shell终端为 /bin/bash 

grep  jenkins /etc/passwd

 jenkins:x:993:990:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash       //有的系统中最后 /bin/false  修改成 /bin/bash 即可

  切换到jenkins用户,生成秘钥,因为权限问题,有的博客说修改jenkins的默认用户为root,我个人并不推荐

  

[root@node1 ~]# su - jenkins

bash-4.2$ ssh-keygen -t rsa

bash-4.2$ cat
.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwIdUk3+V8aL2/oMfvwCxp5AiyctL4bnYFnsKOcQz8w/MuAehy9/EEeT0HNQCSs0NQ3veFurWlKUB4tntNA7bMcZS/UWBSXh2uAJQCMcXbIWfdngaQwVVP+s5WvDbtL5Jk6mQch22aIIw4JaJh4L8dl1oyviwoBgOnscXVC/kDWgFM4BrHC4QNyzt6PdtuzX3RkMa4w7bqDvUWMqIyRBScW1fbfJeAwAK1tCQ7ZjfAoTcWpmoBlurH1P6SuWR3rYIPyhGDqjPQnlohqSX/vCrLWoHoYazETHfW2azzzBSGqMeCw3hlbSV/12kRQv0kGfnbhmnHZ1CBgX23N3ktqtzL
jenkins@node1.fblinux.com

把这个密钥添加到gitlab还有jenkins服务器的root用户,这里建议 gitlab 和 jenkins不在一台服务器,不然设置秘钥时,可能会有点晕。

(1)添加公钥到gitlab服务器,用来clone代码

添加完之后,从gitlab服务器clone下自己的工程,会在.ssh/known_hosts添加gitlab服务器记录

-bash-4.2$ git clone ssh://git@192.168.50.41:22root/jenkins_test.git

(2)添加公钥到jenkins服务器的root用户,将来可能用来执行部署脚本

  在jenkins的workspace目录下执行

-bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub root@172.168.50.41

root@172.168.50.41's password:

3、jenkins触发式构建

  PS: 需要在全局工具配置中,设置一下git命令的执行路径

(1)准备一个测试脚本,并不做实际的工作,如有需要直接在脚本内执行业务脚本

vim /shell/deploy/test/jenkins_trigger.sh   //文件名随意
#!/bin/sh -l
echo "部署脚本被执行" > /root/test.txt
echo "测试\n" >> /root/test.txt

(2)常见一个触发构建的项目,选择自由软件风格,名字跟上面部署脚本的名字一致,保持一一对应

(3)源码管理选择git, 然后在repository url中输入git仓库地址,这里我新建了一个专用的测试项目(PS:注意分支,根据需要填写分支,与(7)中gitlab填写的分支对应)

  下面的Credentials 是凭据, 需要自己添加,选择ssh那个,只需把自己jenkins目录下/var/lib/jenkins/.ssh/id_rsa 中的私钥填上去就行,其他选项随意填。

  如果执行仍然报权限问题,请将 jenkins加入到root组中   gpasswd -a root jenkins   试一下。

(4)构建,选择execute shell,执行部署脚本即可,

这里我们执行刚才的   /shell/deploy/test/jenkins_trigger.sh 文件

(5)触发器配置:即gitlab有提交操作,则自动部署,这里只需要设置一个认证的token即可,这个token就是gitlab那边也要用一下,可以自己随意设置

gitlab调用触发器,需要使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可

(6)在系统管理–>用户管理–>查看用户id和token,需要把用户id和API Token加入触发器中,做用户验证,这里的apitoken 和 上面的 任务中的token 不一样,这个更全局一些, 任务中的token 只针对一个任务。

  另外在用户管理生成apiToken时,需要立即保存, 不然就找不到了,还得重新生成一遍。此处的APIToken,用来凭借触发url用的。

根据第五步和第六步的触发器验证令牌和用户id+token 等信息组织成一个连接,gitlab在有push事件时访问该连接,jenkins就可以执行自动化构建

http://lizheng:32cb9d7fe2e0534cebb3a4d924a96be905@172.168.50.41:9999/job/jenkins_trigger/build?token=hehe

(7)gitlab配置webhooks(现在目录名称为  Integrations ),每次提交代码就访问这个url,执行构建

Push events 下面有行说明:This URL will be triggered by a push to the repository , 再下面有个输入框,要与(3)中jenkins填入的分支名称一致

URL这里输入上面上面用户ID+API token+job token生成的URL地址即可。触发工作选择,push event,merge request event即可。

如果报错: url is blocked: requests to localhost are not allowed,解决方法如下,各个版本所在目录不同,但都叫做Outbound,找不到的自己多找找

(8)在jenkins全局在jenkins全局安全设置中取消勾选“防止跨站点请求伪造,不然jenkins会认为gitlab的请求不合法。

(9)添加完成测试:在gitlab刚添加url的页面点击test模拟提交操作,看看是否会执行自动构建,(PS :  test上面那个Enable SSL verification 按钮, 取消勾选

如果执行成功会返回如下显示,说明执行钩子成功(push事件触发了钩子函数,访问上面的url,触发了jenkins的自动构建)

Jenkins查看 控制台输出,可以看到构建也是成功的。

到这里为止,代码已经可以自动化部署到我们的jenkins所在的服务器,目录为jenkins的workspace目录(可自行修改)

感觉并不是想象中的那么随心所欲,难道我要在每台服务器上都部署一遍jenkins吗?显然不科学。

下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器。

https://www.cnblogs.com/lz0925/p/10860460.html

关于gitlab+jenkins自动部署代码的实现的更多相关文章

  1. jenkins自动部署代码到多台服务器

    下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器. 1.下载 pulish over ssh 插件 2.系统管理 -> 系统 ...

  2. devops持续集成,Centos7.6下gitlab+jenkins(pipeline)实现代码自动上线

    持续集成 gitlab+jenkins(pipeline)实现代码自动上线 环境准备:Centos7.6版本ip:192.168.0.13 主机名:gitip:192.168.0.23 主机名:jen ...

  3. [ci] 构建触发器,实现当gitlab有push动作时候,jenkins自动拉代码.

    构建触发器,实现当gitlab有push动作时候,jenkins自动拉代码. 拉取gitlab代码库: jenkins安装git插件 配置gitlab服务器和jenkins服务器身份互信 jenkin ...

  4. Jenkins自动部署spring boot

    Jenkins自动部署spring boot 背景介绍 本公司属于微小型企业,初期业务量不高,所有程序都写在一个maven项目里面,不过是多模块开发. 分了login模块,service模块,cms模 ...

  5. Jenkins自动部署Tomcat项目

    Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:

  6. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

  7. 使用Jenkins自动部署博客

    title: 使用Jenkins自动部署博客 toc: true comment: true date: 2017-12-17 19:48:10 tags: ['Jenkins', 'CI'] cat ...

  8. Jenkins自动发布代码实战篇

    Jenkins自动发布代码实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.Jenkins服务器配置秘钥对并上传到Gitlab中 1>.在Jenkins后端生成秘钥 ...

  9. 在linux服务器上装svn版本管理,自动部署代码到项目

    在linux服务器上装svn版本管理,自动部署代码到项目 http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw ...

随机推荐

  1. IDEA Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/public/)

    [ERROR] Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1 or one of its dependencies could n ...

  2. Java学习之==>Java8 新特性详解

    一.简介 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.Java 8是 Java 自 Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库. ...

  3. js 闭包解决方案

    相比很多人都遇见过这样的情况: 给一个ul的所有li绑定行为,在点击时获取其index. 假设结构如下: <body> <ul> <li>0</li> ...

  4. 人性化的Requests模块(响应与编码、header处理、cookie处理、重定向与历史记录、代理设置)

    Requests库是第三方模块,需要额外进行安装.Requests是一个开源库 pip install requests 去GitHub下载回来,进入解压文件,运行setup.py 比urllib2实 ...

  5. C# 实现opc ua服务器的远程连接(转)

    原文转自:https://www.cnblogs.com/dathlin/p/7724834.html OPC UA简介 OPC是应用于工业通信的,在windows环境的下一种通讯技术,原有的通信技术 ...

  6. 7-1 shell编程基础之二

    shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...

  7. Java ——类型转换 向args传递参数

    本节重点思维导图  自动类型转换 整型.实型(常量).字符型数据可以混合运算 运算中,不同类型的数据先转化为同一类型,然后进行运算 转换从低级到高级 低 ----------------------- ...

  8. Unity* 实体组件系统 (ECS)、C# 作业系统和突发编译器入门

    Unity* 中的全新 C# 作业系统和实体组件系统不仅可以让您轻松利用以前未使用的 CPU 资源,还可以帮助您更高效地运行所有游戏代码.然后,您可以使用这些额外的 CPU 资源来添加更多场景动态和沉 ...

  9. python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导

    来源公式推导连接 https://blog.csdn.net/qq_36387683/article/details/88554434 关键词:灰色预测 python 实现 灰色预测 GM(1,1)模 ...

  10. MHA简单部署

    MHA是目前比较成熟的mysql高可用集群方式之一. 一.参考文档:1.官方文档:[ https://github.com/yoshinorim/mha4mysql-manager/wiki ]2.个 ...