阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

学员投稿 | Jenkins与Gitlib实现自动化部署与持续构建

127次阅读
没有评论

共计 18436 个字符,预计需要花费 47 分钟才能阅读完成。

本文来自于学员 ”M20- 陈功伟”投稿。

持续部署之 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 都是集中式的版本控制系统,工作时需要从中央服务器获取最新代码,改完之后需推送到服务器。如果是一个比较大的文件则需要足够快的网络才能快速提交完成,而使用分布式的版本控制系统,每个用户都是一个完整的版本库,即使没有中央服务器也可以提交代码或者回滚,最终再把改好的代码提交至中央服务器进行合并即可。

图示:

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

Gitlab 安装

安装前准备:

1
2
3
4
5
6
7
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 进行安装配置

1
2
3
4
5
6
7
8
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 修改配置文件,测试配置文件,启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 地址加上端口进行访问

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

2. 将此处的注册按钮去除,防止其他人员配置登录。需点击最下面的 save 按钮生效。
学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

3. 在创建项目之前需事先创建用户和组及其根据需求将用户加入到组中学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[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 与 Gitlib 实现自动化部署与持续构建

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

Jenkins 基础功能  

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

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

Jenkins 项目构建

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

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

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

持续部署之 jenkins 与 gitlab(二)

测试部署项目,此项目配置成直接在 gitlab 中拉取代码至 Jenkins 服务器中,在工作区域可见,项目名称为 auto-deloy

新建 –> 填写项目名称 –> 构建一个自由风格的软件项目 –> 点击 OK 按钮

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

需要从 gitlab 中拉取代码至 Jenkins 服务器则需要在 gitlab 中 deploy keys 部署公钥(jenkins 的公钥),而在 Jenkins 服务器中需部署私钥。

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

配置 credentials,存放私钥

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

需要在项目中配置从哪个 gitlab 服务器中拉取代码,则需使用 gitlab 中 ssh 开头的地址

点击 auto-deploy–> 源码管理 –> 选择仓库 URL 和 credentials(资格证书)此证书为之前配置中的证书继承即可

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

测试自动构建,查看是否能从 gitlab 中拉取代码至本地 Jenkins 服务器中

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

可在工作区中查看 Jenkins 上拉取的代码信息

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

持续部署之 jenkins 与 gitlab(三)

sonar 简介

sonar 是一个用于代码质量管理的开放平台,通过插件机制,sonar 可以集成不同的测试工具,代码分析工具,以及持续集成的工具 (例如 Jenkins、Hudson) 等。sonar 并不是简单地把代码检查结果直接显示在 web 界面上,而是通过不同的插件对这些结果进行加工处理,通过量化的方式度量代码的质量的变化,从而可方便的对不同的插件对这些代码进行管理。。在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar, 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持例如(PHP/Python),对国际化以及报告文档化也有良好的支持。

sonar 部署

sonar 称之为代码质量管理,sonar 的相关下载和文档可以在官网下载,官网地址:https://www.sonarqube.org/downloads/。需要特别注意最新版的 Sonar 需要 jdk1.8 至及以上版本及其数据库版本在 5.6 以上(这个必须重视,不然启动服务是报错为数据库连接失败)。上篇文章我们已经可以成功的使用 git 进行从 gitlab 拉取代码,Sonar 的功能就是来检查代码是否有 BUG,除此之外还有其他的功能,比如说:你的代码注释率是多少,代码有一些建议,编写语法的建议等。

1. 编译安装数据库 5.6 以上版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd    /opt
tar xf mysql-5.6.34-Linux-glibc2.5-x86_64.tar.gz -C /usr/local/
cd    /usr/local/
ln -sv mysql-5.6.34-Linux-glibc2.5-x86_64    mysql
useradd mysql -s /sbin/nologin -M 
mkdir /data ;chown -R mysql.mysql /data
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data --basedir=/usr/local/mysql
cd /usr/local/mysql/;cp support-files/mysql.server /etc/init.d/mysqld ;cp /usr/local/mysql/my.cnf  /etc/my.cnf 
chmod +x /etc/init.d/myqld ;chkconfig mysqld on 
# 编辑 /etc/profile.d/ 添加 mysql.sh  
export PATH=/usr/local/mysql/bin:$PATH   
# 编辑 /etc/my.cnf,指明 datadir 和 port, 及其启动 MySQL 创建 sonar 用户并授权 sonar 用户
grant all on sonar.* to 'sonar'@'localhost' identified by 'pass'
grant all on sonar.* to 'sonar'@'10.1.10.%' identified by 'pass'
flush privileges;

2. 下载解压安装 sonar,在安装之前需要配置 jdk 的环境,jdk 的版本需要在 1.8 以上的版本

unzip sonarqube-5.6.6.zip

ln -sv /usr/local/sonarqube-5.6.6  /usr/local/sonar

编辑 sonar 配置文件,开启如下配置:/usr/local/sonar/conf/sonar.properties

1
2
3
4
sonar.jdbc.username=sonar   # 连接数据库用户名
sonar.jdbc.password=chen    # 连接数据库时密码 jdbc.url=jdbc:mysql://10.1.10.67 则表示 
sonar.jdbc.url=jdbc:mysql://10.1.10.67:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.port=8800         #web 界面的监听端口

既然使用到 MySQL 数据库则需连接 MySQL 数据库,创建库和授权用户

1
2
3
4
create database sonar character set utf8 collate utf8_general_ci;
grant all on sonar.*  to 'sonar'@'localhost' identified by 'pass'
grant all on sonar.*  to 'soanr'@'10.1.10.%' identified by 'pass'
flush privileges;

启动服务:/usr/local/sonar/bin/Linux-x86_64/sonar.sh start #查看 sonar 监听的端口 8800 师傅开启,及其 MySQL 服务器中 sonar 库中是否创建出多张表。。。

通过浏览器输入 IP 地址进行访问,默认情况下为英文,需要安装插件汉化,但是汉化的效果不是很好

默认登录 sonar 时,用户名:admin 密码:admin

安装中文插件如下配置:

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

使用 IP 地址访问如下:

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

如果安装失败可将插件下载好后解压至 sonar 默认存放插件的目录,重启服务即可,安装可扫描 php/java/Python 的插件。

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

sonar 通过 sonarqube scanner 扫描器来对代码进行扫描分析

官方文档:

http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

sonar-scanner 安装部署 

unzip sonar-scanner-2.6.1.zip

ln -sv /usr/local/sonar-scanner-2.6.1  /usr/local/sonar-scanner

cd /usr/local/sonar-scanner/

grep “^[[:alpha:]]” sonar-scanner.properites

1
2
3
4
sonar.host.url=  #sonar 地址 
sonar.sourceEncoding=UTF-8 # 设定字符集
sonar.jdbc.password=chen   #sonar 数据库密码    #如下为连接数据库地址
sonar.jdbc.url=jdbc:mysql://10.1.10.67:3306/sonar?useUnicode=true&characterEncoding=utf8

扫描时需要在源码目录中有扫描配置文件及其源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
[root@node2 php-sonar-runner]# ls
README.md  sonar-project.properties  src  validation.txt
[root@node2 php-sonar-runner]# cat sonar-project.properties
# Required metadata
sonar.projectKey=org.sonarqube:php-simple-sq-scanner #sonar 项目 key 名称
sonar.projectName=PHP ::    #sonar 项目名称
Simple Project :: SonarQube Scanner 
sonar.projectVersion=2.0  # 版本号
# Comma-separated paths to directories with sources (required)
sonar.sources=src # 源码路径
# Language
sonar.language=php # 扫描语言
# Encoding of the source files
sonar.sourceEncoding=UTF-8  # 字符编码
[root@node2 php-sonar-runner]# /usr/local/sonar-scanner/bin/sonar-scanner #再次执行 sonar-scanner
INFO: Scanner configuration file/usr/local/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file/home/mageedu/sonar-examples-master/projects/languages/php/php-sonar-runner/sonar-project.properties
INFO: SonarQube Scanner 2.6.1
INFO: Java 1.8.0_111 Oracle Corporation (64-bit)
INFO: Linux 3.10.0-327.el7.x86_64 amd64
INFO: User cache: /root/.sonar/cache
INFO: Load global repositories
INFO: Load global repositories (done) | time=1777ms
WARN: Property 'sonar.jdbc.url' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
WARN: Property 'sonar.jdbc.username' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
WARN: Property 'sonar.jdbc.password' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
INFO: User cache: /root/.sonar/cache
INFO: Load plugins index
INFO: Load plugins index (done) | time=156ms
INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
INFO: SonarQube server 5.6.6
INFO: Default locale: "en_US"source code encoding: "UTF-8"
INFO: Process project properties
INFO: Load project repositories
INFO: Load project repositories (done) | time=832ms
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=1532ms
INFO: Load active rules
INFO: Load active rules (done) | time=6049ms
WARN: SCM provider autodetection failed. No SCM provider claims to support thisproject. Please use sonar.scm.provider to define SCM of your project.
INFO: Publish mode
INFO: -------------  Scan PHP :: Simple Project :: SonarQube Scanner
INFO: Language is forced to php
INFO: Load server rules
INFO: Load server rules (done) | time=4650ms
INFO: Base dir/home/mageedu/sonar-examples-master/projects/languages/php/php-sonar-runner
INFO: Working dir/home/mageedu/sonar-examples-master/projects/languages/php/php-sonar-runner/.sonar
INFO: Source paths: src
INFO: Source encoding: UTF-8, default locale: en_US
INFO: Index files
INFO: 0 files indexed
INFO: Quality profile for php: Sonar way
INFO: Sensor Lines Sensor
INFO: Sensor Lines Sensor (done) | time=1ms
INFO: Sensor SCM Sensor
INFO: No SCM system was detected. You can use the 'sonar.scm.provider' propertyto explicitly specify it.
INFO: Sensor SCM Sensor (done) | time=0ms
INFO: Sensor Analyzer for "php.ini" files
INFO: Sensor Analyzer for "php.ini" files (done) | time=9ms
INFO: Sensor SonarJavaXmlFileSensor
INFO: Sensor SonarJavaXmlFileSensor (done) | time=0ms
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=1ms
INFO: Sensor Code Colorizer Sensor
INFO: Sensor Code Colorizer Sensor (done) | time=0ms
INFO: Sensor CPD Block Indexer
INFO: DefaultCpdBlockIndexer is used for php
INFO: Sensor CPD Block Indexer (done) | time=14ms
INFO: Calculating CPD for 0 files
INFO: CPD calculation finished
INFO: Analysis report generated in 337ms, dir size=8 KB
INFO: Analysis reports compressed in 63ms, zip size=3 KB
INFO: Analysis report uploaded in 643ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://10.1.10.12:8888/dashboard/index/org.sonarqube:php-simple-sq-scanner
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://10.1.10.12:8888/api/ce/task?id=AVrrR_tSXasaRrmKgvaL
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 32.914s
INFO: Final Memory: 40M/103M
INFO: ------------------------------------------------------------------------
[root@node2 php-sonar-runner]#

扫描后的结果会在 web 界面中给与显示扫描结果

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

Jenkins 结合 sonar-scanner 自动进行代码扫描 

扫描之前需安装 sonarqube plugin 插件

系统管理 –> 管理插件 –> 搜索 sonarqub plugin 插件安装即可

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

Jenkins 结合 sonar 则需在系统管理 –> 系统设置 –>sonar 配置段进行配置,输入 name、server URL、server version 即可

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

系统管理 –>Global tools configuration 找到 sonarqube 填写 sonar 的安装路径及其 name

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

全局配置段配置完成之后则在接下来的项目中即可继承全集配置段中的配置,在需要扫描的项目中嵌入,点开项目 –> 设置 –> 构建 –>execute sonarqube scanner 将扫描参数填写在文本框中

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

完成配置,点击构建,即可自动进行代码扫描测试

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

构建成功显示为蓝色的球,在旁边会显示 sonar 的图标,点击图标可查看代码的质量展示信息学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

构建完成后,我们发现这里的 SonarQube 可以点击,我们点击 SonarQube 就会链接到 10.1.10.65:8800 就是代码查看器的地址

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

同时,可以在项目设置中配置构建后操作,例如构建失败可定义邮件通知等

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

构建失败后则会邮件提醒

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

持续部署之 jenkins 与 gitlab(四)

代码上线流水发布操作

Pipeline 中文意思为流水线之意,公司可能有很多项目,如果使用 Jenkins 自动构建成功后,开发需要一项一项点击,比较繁琐,所以出现 pipeline 流水化作业的代码测试管理,代码质量测试完毕之后,我们需将代码部署到测试环境或线上环境进行测试。

项目需求:在任意普通用户的家目录先将代码从 gitlab 中拉取下来,编写脚本,实现将代码自动拷贝至后端的 Tomcat 主机或其他 web 服务器。

新建项目

点击新建 –> 构建一个自由风格的软件项目 –> 点击 OK

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

点击项目名称 –> 设置 –> 构建中选择执行远程脚本

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

重要提示:执行远程命令主要涉及的是权限问题,我们要搞明白 Jenkins 是以什么权限来执行命令的,我们现在在 Jenkins 服务器上,如果在 www 用户上执行命令,需要怎么做?

使用 Jenkins 用户将公钥发送给 www 用户

使用 root 用户将公钥发送给 www 用户,如果使用管理员命令则需 sudo 提权执行,因为 web 上默认执行命令的 Jenkins 用户

将 Jenkins 上的私钥发送给 www 用户,将 root 的私钥发送给 www, 并使用 sudo 提权,使得各个用户之间可以互通。

1
2
3
4
5
6
7
[www@node2 ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLS+HnuGeiI8xQ3duMoJgdF7y4hXRt6FcXNDsYcQ6LaLT8JHN0EajscuMxjrNNKD+2OtTIzMY9/hkxIfH7TvUQRYfbNro6WTefnjmzyHaluG2gWvtL9zEJczxZhTAPLUa0ILkPzGvoiCC5em6wHWnqvlq7f/1BYSv4FyPhsrSiT3VlqoXB2ZvKRMOhPH5gd38EJIpgDAIPGJZpgLnEHpWJGIRcQBKZk8iwKSE+p38P5kggfbxc+epialKd69r7JjdHuZS/osBWUlklovUdGznlcFI+/1fKoXxL852MCZc/cleG40JDb/kDw1jId00Guza4UoK4G+74QdumilQD+RuP www@node2.alren.com
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFGANCXHKFQbKqxSJCENMg41oMoFZmiwOUSUWfCucQzb6/KRgUdhOjKaUavUZBhx5f7XXbIfpr3CHLJLyRxH7DQgSawmleH0gAkx9n2BaSpe9lKfY8h5qTB9T2nSW012Dsz4hK4n0AeNUvMfqcUO4/V4fVs+hOZCh/S3a5MH1rDkeekbguEnGeUPf7/6BzGpz6LEfR3U3Q4X9hvc9gDWYH4pbwz4xOHyrWADZRiwn76NNuLGkgvcUjl8jnpN02ADwyTlFFIAkgcmuxGg5Zaik3THyoksYoyJ30CPC1sFhVRlSR3eiXijpnTrnfGRLX21JKDRCM2TFoGTPd/WS6iZ3F root@node2.alren.com
[www@node2 ~]$
# 编辑 /etc/sudoer, 注释 tty 和添加必要的权限
root ALL=(ALL)    ALL 
jenkins ALL=(ALL) NOPASSWD /usr/bin/ssh

在 /home/www 写一个测试脚本,检车脚本是否可执行成功

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

然后我们点击立即构建,查看构建结构

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

上诉脚本能自动执行,则可配置 www 用户可以远程 ssh 到 web 服务器,将家目录下的源码文件拷贝至 web 服务器的站点根目录实现自动部署。这会看的是你写脚本的能力。。。。

项目需求:当本地 Jenkins 代码测试成功之后自动联动部署代码至 web 服务器的站点根目录。一系列的动作需自动完成则需要安装 Parameterized 插件,系统管理 –> 管理插件 –> 可选插件 搜索 Parameterized,如果插件在线安装不成功你懂得,可将下载好的插件解压至 plugin 目录下,将目录下的所有文件属组属主换成 Jenkins,重启服务即可。

点击项目 –> 设置 –> 构建后操作 –>trigger parameterized build on projects –>Add triggers–> 点击保存

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

点击构建项目 test-delpoy 时自动联动 auto-deloy,进行构建,可见第一个球闪烁完后,第二个球接着闪烁,完成自动构建

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

下载 Pipline,它是一个更为方便观察项目的自动构建的图形化工具

系统管理 –> 插件管理 –> 搜索安装插件 pipline

 学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

点击项目 All 后面的 + 号,新建一个视图,给视图取名,自定义一些选项。

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

pipeline 视图效果更加直观:红色代表构建失败,绿 - 蓝代表项目没有关联,两个都是绿的则表明项目相互关联,依次执行,可清晰看到上下情况和次数。

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

git 提交操作触发 Jenkins 自动构建

Jenkins 与 gitlab 集成后,实现的功能是开发写好代码 push 到 gitlab 上,push 完成之后,jenkins 自动帮我们立即构建,此方法一般使用在测试环境。

点击此项目并可触发项目联动结合脚本可实现自动上线部署,而往往这个功能只用在测试部署,上线部署手动完成较安全。

需安装 GitlabHook Plugin 插件

系统管理 –> 管理插件 –> 安装 GitlabHook Plugin

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

完成后,需配置 gitlab hook 插件,使用 openssl rand -hex 14 命令自动生成随机码

点击项目 –> 设置 –> 构建后触发器

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

配置完成后则需在 gitlab 中配置 webhooks

点击项目 –> 设置图标

 学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

Build Authorization Token Root Plugin 插件使用说明
https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

示例:buildByToken/buildWithParameters?job=RevolutionTest&token=TacoTuesday&Type=Mexican

http://10.1.10.12:8080/project/test-demo/buildByToken/build?job=test-demoTest&token=ac0c608d605db718fa4b1324

在 gitlab 上配置如下 URL:格式如下:http://X.X.X.X:8080/buildByToken/build?job= 项目名 &token= 随机数

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

配置完后,可点击 Test 按钮进行测试

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

Jenkins 控制台输出:

学员投稿 | Jenkins 与 Gitlib 实现自动化部署与持续构建

总结:完成上诉的自动联动后,gitlab+jenkins 基本上能满足中小型企业的版本上线的工作,配置一次后即可让你以后上线美滋滋,都交给开发,想不想和开发一起加班那就得看你怎么想的 :)

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-12-03发表,共计18436字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中