持续部署之jenkins与gitlab(一)

主要部分

  • 安装部署Jenkins和gitlib
  • 了解gitlib的常用命令
  • 部署haproxy与tomcat环境
  • 配置Jenkins使用gitlib更新代码
  • 通过sonar实现代码检测
  • 实现gitlib触发Jenkins自动部署
  • 通过Jenkins实现自动部署
  • 实现haproxy动态添加删除后端服务器
  • 编写脚本实现自动化部署与回滚

持续集成的分类:

  • 持续集成:持续集成是指程序员在代码的开发工程中,可以频繁的将代码部署到主干上,并进行自动化测试
  • 持续交互:持续交互是指在持续集成的基础之上,将代码部署到线上测试环境
  • 持续部署:持续部署是指在持续交互的基础之上,将要部署的代码实现自动部署,包括持续交互、持续部署

 

Gitlab简介

    gitlab是使用Ruby语言所研发,实现自动托管的git项目仓库,可以通过web界面访问进行配置。gitlab拥有与GitHub类似的功能,能够浏览代码,管理缺陷和注释,可以管理团队对仓库的访问,它非常容易使用,并提供一个历史回顾,便于日后的管理和维护及其查找。 

    版本控制分类:集中式版本控制、分布式版本控制,常见的集中式版本控制有:CVS,SVN,分布式版本控制有:GitLab、GitHub。git在每个用户都有自己的私有仓库及其中央仓库,用户先提交代码到本地的私有仓库,而后确定无误后将代码提交到中央仓库,这样大大的方便了开发者,而相比CVS和SVN都是集中式的版本控制系统,工作时需要从中央服务器获取最新代码,改完之后需推送到服务器。如果是一个比较大的文件则需要足够快的网络才能快速提交完成,而使用分布式的版本控制系统,每个用户都是一个完整的版本库,即使没有中央服务器也可以提交代码或者回滚,最终再把改好的代码提交至中央服务器进行合并即可。 

图示:

 

 

 

Gitlab安装

安装前准备:

yum install vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion -y

yum install curl policycoreutils openssh-server openssh-clients postfix -y

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

systemctl  disable firewalld

sed -i ‘/SELINUX/s/enforcing/disabled/‘ /etc/sysconfig/selinux

hostnamectl  set-hostname xxx.com.cn

yum update –y && reboot

1.关闭防火墙

systemctl stop firewalld systemctl disable firewalld  iptables -F  setenforce 0   

sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘   /etc/sysconfig/selinux  #需重启生效  

2.配置好base源和epel源 

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/CentOS-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

可配置好gitlab官网源使用yum进行安装,也可使用官方下载的rpm进行安装配置 

vim  /etc/yum.repos.d/gitlab.repo

[gitlab-ce]

name=gitlab-ce

baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 

repo_gpgcheck=0

gpgcheck=0

enabled=1 

gpgkey=https://packages.gitlab.com/gpg.key

 

3.安装配置gitlab依赖于Java环境,安装之前先安装jdk,可使用rpm包进行安装等 

yum -y install jdk-8u111-linux-x64.rpm 

yum -y install gitlab-ce-8.13.5-ce.0.el7.rpm  

4.编辑配置文件/etc/gitlab/gitlab.rb修改配置文件,测试配置文件,启动服务 

external_url ‘http://node1.alren.com‘ #此处为本机IP地址

gitlab_rails[‘smtp_enable‘] = true

gitlab_rails[‘smtp_address‘] = "smtp.163.com"

gitlab_rails[‘smtp_port‘] = 25

gitlab_rails[‘smtp_user_name‘] = "chengong101300@163.com"

gitlab_rails[‘smtp_password‘] = "aaaaa"

gitlab_rails[‘smtp_domain‘] = "163.com"

gitlab_rails[‘smtp_authentication‘] = :login

gitlab_rails[‘smtp_enable_starttls_auto‘] = true

gitlab_rails[‘smtp_tls‘] = false

gitlab_rails[‘gitlab_email_from‘] = "chengong101300@163.com"

user["git_user_email"] = "chengong101300@163.com"

 

 

#gitlab-ctl reconfigure #修改配置文件后需从新编译此文件

#gitlab-ctl status #查看gitlab状态信息 默认占用80、8080端口

#gitlab-ctl stop/restart/start 关闭、重启、启动gitlab服务

[root@node1 ~]#

[root@node1 ~]# ss -tnl

State       Recv-Q Send-Q Local Address:Port               Peer Address:Port

LISTEN      0      128       127.0.0.1:8080                          *:*

LISTEN      0      128               *:80                            *:*

LISTEN      0      128               *:22                            *:*

LISTEN      0      128       127.0.0.1:631                           *:*

LISTEN      0      100       127.0.0.1:25                            *:*

LISTEN      0      128               *:8060                          *:*

LISTEN      0      128              :::22                           :::*

LISTEN      0      128             ::1:631                          :::*

LISTEN      0      100             ::1:25                           :::*

[root@node1 ~]# gitlab-ctl status

run: gitlab-workhorse: (pid 115536) 34579s; run: log: (pid 16049) 300897s

run: logrotate: (pid 9121) 2913s; run: log: (pid 16068) 300889s

run: nginx: (pid 115547) 34579s; run: log: (pid 16055) 300895s

run: postgresql: (pid 115553) 34578s; run: log: (pid 15906) 300961s

run: redis: (pid 115561) 34578s; run: log: (pid 15823) 300967s

run: sidekiq: (pid 115565) 34577s; run: log: (pid 16038) 300903s

run: unicorn: (pid 115568) 34577s; run: log: (pid 16007) 300905s

[root@node1 ~]#

1.通过浏览器访问微博界面,接下来操作都是在web界面中进行,输入本机IP地址加上端口进行访问

 

2.将此处的注册按钮去除,防止其他人员配置登录。需点击最下面的save按钮生效。


3.在创建项目之前需事先创建用户和组及其根据需求将用户加入到组中

 

提示:在gitlab中要事先创建组后才能在组中创建项目或以root身份创建项目,此定义在其自动生成的地址中有明确规定

 

创建项目(project)后将可以对项目进行一定的命令行操作。如下为命令行字符命令

Command line instructions

Git global setup #git全局设置

git config --global user.name "Administrator"

git config --global user.email "admin@example.com"

Create a new repository

git clone git@node1.alren.com:mywebs/webs.git #从仓库中克隆代码

cd webs

touch README.md

git add README.md #将修改的代码或文件提交到本地的仓库中

git commit -m "add README" #将修改的代码或文件提交到本地的仓库中并取名

git push -u origin master #推送到中央服务器中

Existing folder or Git repository

cd existing_folder

git init

git remote add origin git@node1.alren.com:mywebs/webs.git

git add .

git commit

git push -u origin master

可将多个用户添加到同一个组,以后组内的成员将对此项目拥有一定的权限

 

 

 

 

创建完成之后它提示我们可以创建一个key对它进行管理,部署key之后则无需密码可将项目克隆到本地,仅支持ssh模式免秘钥,同时自动生成一个url,有两种形式基于HTTP,SSH

我们点击REDME可编辑一个文档,随意写一些内容,点击提交 

 

填写完将会出现路上所诉,可查看其内容。此时从gitlab中clone时需输入用户名和密码,免去秘钥登录需添加ssh-key,免秘钥登录。

 

[root@node1 ~]# git clone http://node1.alren.com/mywebs/webs.git

Cloning into ‘webs‘...

Username for ‘http://node1.alren.com‘: root

Password for ‘http://root@node1.alren.com‘:

fatal: Authentication failed for ‘http://node1.alren.com/mywebs/webs.git/‘

[root@node1 ~]# git clone http://node1.alren.com/mywebs/webs.git

Cloning into ‘webs‘...

Username for ‘http://node1.alren.com‘: root

Password for ‘http://root@node1.alren.com‘:

warning: You appear to have cloned an empty repository.

[root@node1 ~]# ls

anaconda-ks.cfg  webapp  webs

[root@node1 ~]# rm -rf webs/

[root@node1 ~]# git clone  git@node1.alren.com:mywebs/webs.git

Cloning into ‘webs‘...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), done.

[root@node1 ~]# ls

anaconda-ks.cfg  webapp  webs

[root@node1 ~]#

 

Git总结:工作区就是编辑文件的目录区域,需要将工作区的修改好的文件add到暂存区才能提交到git服务器,在工作区有多个文件的时候可以将一个或多个文件添加至暂存区提交到git服务器即可,刚提交后的暂存区和服务器的文件是一致的,因此也可以将最新的暂存区的文件进行上线和回滚,但是生产当中还是使用服务器进行代码更新和回滚。

 

Jenkins简介

Jenkins是一个高度插件化的管理平台,这就是Jenkins流行的原因,因为Jenkins什么插件都有,有非常灵活的API,开发可以调用编写插件,可完成不同任务的编排和执行。Jenkins有Java语言所研发,此环境则需部署在Java环境之上,可下载rpm包或下载.war包丢到webapps目录下,启动服务,即可访问。

Jenkins官网地址:https://jenkins.io/

 

Jenkins安装及启动

通过rpm包进行安装:

rpm -ivh jdk-8u111-linux-x64.rpm

rpm -ivh https://pkg.jenkins.io/redhat/jenkins-2.27-1.1.noarch.rpm

可配置yum源,直接使用yum进行安装:

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

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

 

在启动之前编辑/etc/sysconfig/jenkins/配置文件,可对其数据目录、启动的用户、启动的端口等进行修改后启动,也可以默认。

JENKINS_HOME="/data"  #数据库目录,使用高i/o大容量磁盘

JENKINS_USER="jenkins" #启动用户

JENKINS_PORT="8080"  #启动端口 

 

启动服务:

systemctl jenkins start 或 /etc/init.d/jenkins start    

加入开机自启动(默认Jenkins启动会占用8080端口,所以其他服务不能与之冲突):

chkconfig jenkins on 

 

输入IP地址进行访问:将/data/secrets/initialAdminPassword中将密码输入到选框中

 

下一步则是选择插件的步骤,可以自定义安装,也可以安装建议安装的插件,安装过程中需连接互联网,且速度非常慢,可先忽略安装插件,直接在将插件解压至Jenkins的插件目录。  

 

 

 

 

如出现插件安装失败没关系,使用准备好的插件包解压至jenkins的plugin目录即可目录结构默认在/var/lib/jenkins/plugins/。

 

 

Jenkins基础功能  

在jenkins-->系统管理-->系统设置设置管理员邮箱地址,当构建失败时,则会发邮件通知

按照实际情况配置Jenkins URL及其系统管理员邮件地址

 

设置邮件通知,通过设置好的邮件给需要发送的收件人发件reply-to-address

 

 

 

Jenkins项目构建

构建项目-->输入项目名称-->构建一个自由风格的软件项目-->点击ok,不过在创建项目之前需事先配置好jenkins的Credentials-->将私钥配置在此,将公钥部署在gitlab中,这样才能从gitlab中拉取代码或项目。

 

主界面包含系统的大部分配置

在系统设置中可配置邮件通知,maven、gitlab、sonar scanner邮件通知等

 

 

 

在系统管理--->插件管理中可安装大部分插件

 

 

原文地址:https://www.cnblogs.com/xiaoxi-song/p/9626714.html