Jenkins是java编写,需要安装JDK,这里采用 yum 安装,对版本有需求的,可以到 oracle 官网下载 JDK。

yum install -y java-1.8.0-openjdk

  

一、安装 Jenkins

添加yum源

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

导入密钥

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

安装

yum install -y jenkins

新版本的 gitlab 服务端口为 8080,为了不和 gitlab 的服务端口冲突,修改 Jenkins 的默认端口为 8088。

查看端口

netstat -antup|grep :80

修改端口为8088

vi /etc/sysconfig/jenkins
JENKINS_PORT="8088"

数据目录,可以自定义
JENKINS_HOME="/var/lib/jenkins"

二、启动 Jenkins

systemctl start jenkins.service

设置开机启动

systemctl enable jenkins.service

如果访问8088端口,发现访问不了,则先查看日志

cat /var/log/jenkins/jenkins.log

如果发现这种信息

java.io.IOException: permission denied

原因是 Jenkins 默认使用的是 Jenkins 用户,因此日志中出现了权限问题,修改 Jenkins 默认用户为 root。

vi /etc/sysconfig/jenkins
JENKINS_USER="root"

  

三、配置jenkins使用gitlab更新代码

安装插件
Credentials Plugin # 签名证书管理
Gitlab Plugin # 安装后从gitlab获取代码
Git Plugin 和 Git Client Plugin # 用于 jenkins 在 gitlab中拉取源码
Gitlab Hook # gitlab触发 jenkins 构建项目
Gitlab Authentication # gitlab和 jenkins 认证相关的插件
SSH Plugin # 远程执行 shell 脚本
Publish Over SSH # 通过 ssh 部署应用

如果 jenkins 安装插件超时,可以在 管理jenkins -> 插件管理 -> 高级 -> 升级站点 改为:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

如果换站点后,还是安装超时,则到下面网站手动下载安装

http://updates.jenkins-ci.org/download/plugins/

  

四、设置 gitlab 用户 root 可以通过 ssh 公钥直接下载代码

生成的SSH密钥, 一路回车,注意我这里生成的是 root 用户,当然你也可以指定用户

ssh-keygen

查看公钥

cat ~/.ssh/id_rsa.pub

然后把公钥添加到 gitlab 项目->设置->版本库->部署密钥
这样我们通过root用户拉取代码,就不需要输入用户名和密码了。

git clone git@192.168.1.222:develop/web.git

  

五、Jenkins 添加 gitlab 用户 root 的 私钥

cat ~/.ssh/id_rsa

在 凭据 -> 全局 -> 添加凭据 -> 选择类型 SSH Username with private key
用户名输入 root,并添加私钥

注意,root用户的公钥在 gitlab,私钥在 jenkins,这样 jenkins 就可以直接拉取 gitlab 上的代码。

六、在 Jenkins 上添加项目

新建一个item -> 输入任务名称 -> 选择构建一个自由风格的软件项目,然后点确定。

然后 描述 根据需要自已填写,源码管理选择 git,并添加仓库URL为 git@192.168.1.222:develop/web.git。
然后选择凭据为我们刚刚添加的 root,然后点保存。

七、自动部署 web 项目

可以通过执行命令或脚本方式进行代码发布,这里演示使用 root 用户在各服务器上发布代码。
当然也可以建一些普通用户,但需要保持所有服务器上的用户ID一致,避免权限问题。

比如我想把222主机上的代码自动部署到111主机上,我的222主机上安装了 gitlab 和 jenkins。

1、首先要实现 root 用户无密码直接登陆111主机。

将公钥复制到远程主机

ssh-copy-id root@192.168.1.111
ssh 192.168.1.111

为了让 jenkins 登陆本机,也免密码,则在本机也复制一份

ssh-copy-id root@192.168.1.222

注意,你需要在哪台机器上自动发布代码,就需要让 jenkins 能使用root用户免密码登陆到那台机器上。

2、我们在 jenkins 的主机上,先 clone 一份代码

cd /data
git clone git@192.168.1.222:develop/web.git

3、然后编写 shell 执行命令,如 sync.sh

#!/bin/bash
echo $USER
cd /data/web
git pull
scp -r ./* root@192.168.1.111:/data/wwwroot/

4、在 jenkins 项目中点击配置,选择构建环境,增加构建步骤,选择 Execute shell,填入如下命令,并保存。

sudo ssh root@192.168.1.222 /data/sync.sh

5、然后点击 项目的 立即构建,看代码是否同步到了111主机上。

八、实现 gitlab 触发 jenkins 自动部署

1、安装 gitlab hook plugin 和 Build Authorization Token Root 和 Build Token Trigger 插件。

2、生成身份验证令牌

openssl rand -hex 16

3、在 jenkins 项目 -> 配置 -> 构建触发器 -> 选中远程构建,并填入上一步生成的令牌。

选中如下两项,然后点保存。
Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.1.222:8088/project/web
GitHub hook trigger for GITScm polling

4、在 gitlab 项目 -> 设置 -> 集成 -> 增加web钩子

链接URL格式:http://jenkins 地址/buildByToken/build?job=jenkins项目名&token=token值
如:

http://192.168.1.222:8088/buildByToken/build?job=web&token=46324e223bc203855552e62dd63b12c9

5、点击测试,push events,如果返回 201 ,说明成功了。

6、我们通过 git 添加文件,提交到版本库,看 jenkins 是否会触发自动构建。

九、使用 Build Pipeline 插件以流程图的形式展示各个 job 的顺序

Build Pipeline 插件作用: 这个插件能够以流程图的形式展示各个 job 的顺序,依赖关系等等。

安装完插件后,我们添加一个视图,并选中 Build Pipeline View。

在 Display Options 中

No Of Displayed Builds 选择 3 ,

Refresh frequency (in seconds) 填入 3。

上面的选项表示显示最近 3 次的构建结果,当然也可根据需要自已填写。

gitlab与jenkins结合构建持续集成的更多相关文章

  1. GitLab、Jenkins结合构建持续集成(CI)环境

    1 持续集成 概述及运行流程 1.1 持续集成概述 持续集成概述:持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并迚程自 ...

  2. 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)

    写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 服务器规划 IP 主机名 节点 操作 ...

  3. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  4. Jenkins 快速搭建持续集成环境

    持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...

  5. 使用Jenkins构建持续集成环境

    简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...

  6. 构建基于Jenkins + Github的持续集成环境

    搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...

  7. Docker 结合Jenkins 构建持续集成环境

    Docker 结合Jenkins  构建持续集成环境 Jenkins : 一个开源的持续集成工具, 提供软件版本发布.自动测试等一系列流程及丰富的插件 Maven: 一个自动化构建工具, 通过一段描述 ...

  8. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  9. Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(二):部署

    前面又是废话 我之前写过: Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署 Asp.Net Core 程序部署到Linux(centos)生产环境(二):doc ...

随机推荐

  1. 28.分类算法---KNN

    1.工作原理: 存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类对应的关系.输入没有标签的数据后,将新数据中的每个特征与样本集中数据对应的特 ...

  2. 如何解决Sublime text3文件名称中文乱码问题

    在sublime text 3中,Preference, Settings-User,最后加上一行 "dpi_scale": 1.0 { "auto_complete_t ...

  3. 剑指Offer-42.和为S的两个数字(C++/Java)

    题目: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 分析: ...

  4. maven私服的配置使用

    maven的仓库分为本地仓库,远程仓库和私服仓库. 私服仓库一般是公司内部私有的,内部进行维护的.公司员工连接私服,从私服中下载jar,或者将自身的jar传到私服上.私服还可以从中央仓库下载jar,当 ...

  5. Java入门系列之类继承、抽象类、接口(五)

    前言 C#和Java关于类.抽象类.接口使用方式基本相似,只是对应关键字使用不同罢了,本节呢,我们只是对照C#和Java中关于这三个概念在具体使用时,看看有哪些不一样的地方. 类继承 C#和Java在 ...

  6. 在ASP.NET Core 3.0中使用Swagger

    1.使用NuGet安装以下依赖: Swashbuckle.AspNetCore 注:版本选最高版本的,我选 5.0 rc4 2.在ConfigureServices添加以下代码 services.Ad ...

  7. (转)python中用logging实现日志滚动和过期日志删除

    转自:https://blog.csdn.net/ashi198866/article/details/46725813 logging库提供了两个可以用于日志滚动的class(可以参考https:/ ...

  8. 使用dom4j类操作xml文档

    dom4j操作xml数据 1.Document对象相关 ①读取XML文件,获得document对象. SAXReader reader = new SAXReader(); Document docu ...

  9. JMeter压测“java.net.BindException: Address already in use: connect”解决方法

    之前在windows机上用JMeter压测,50并发下出现大量接口报“java.net.BindException: Address already in use: connect”错误. 从字面的意 ...

  10. 大数据相关概念和hdfs

    大数据 概述 大数据是新处理模式才能具备更多的决策力,洞察力,流程优化能力,来适应海量高增长率,多样化的数据资产. 大数据面临的问题 怎么存储海量数据(kb,mb,gb,tb,pb,eb,zb) 怎么 ...