共计 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 都是集中式的版本控制系统,工作时需要从中央服务器获取最新代码,改完之后需推送到服务器。如果是一个比较大的文件则需要足够快的网络才能快速提交完成,而使用分布式的版本控制系统,每个用户都是一个完整的版本库,即使没有中央服务器也可以提交代码或者回滚,最终再把改好的代码提交至中央服务器进行合并即可。
图示:
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 地址加上端口进行访问
2. 将此处的注册按钮去除,防止其他人员配置登录。需点击最下面的 save 按钮生效。
3. 在创建项目之前需事先创建用户和组及其根据需求将用户加入到组中
提示:在 gitlab 中要事先创建组后才能在组中创建项目或以 root 身份创建项目,此定义在其自动生成的地址中有明确规定
创建项目 (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 |
可将多个用户添加到同一个组,以后组内的成员将对此项目拥有一定的权限
创建完成之后它提示我们可以创建一个 key 对它进行管理,部署 key 之后则无需密码可将项目克隆到本地, 仅支持 ssh 模式免秘钥,同时自动生成一个 url,有两种形式基于 HTTP,SSH
我们点击 REDME 可编辑一个文档,随意写一些内容,点击提交
填写完将会出现路上所诉,可查看其内容。此时从 gitlab 中 clone 时需输入用户名和密码,免去秘钥登录需添加 ssh-key,免秘钥登录。
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 的插件目录。
如出现插件安装失败没关系,使用准备好的插件包解压至 jenkins 的 plugin 目录即可目录结构默认在 /var/lib/jenkins/plugins/。
Jenkins 基础功能
在 jenkins–> 系统管理 –> 系统设置设置管理员邮箱地址,当构建失败时,则会发邮件通知
按照实际情况配置 Jenkins URL 及其系统管理员邮件地址
设置邮件通知,通过设置好的邮件给需要发送的收件人发件 reply-to-address
Jenkins 项目构建
构建项目 –> 输入项目名称 –> 构建一个自由风格的软件项目 –> 点击 ok,不过在创建项目之前需事先配置好 jenkins 的 Credentials–> 将私钥配置在此,将公钥部署在 gitlab 中,这样才能从 gitlab 中拉取代码或项目。
主界面包含系统的大部分配置
在系统设置中可配置邮件通知,maven、gitlab、sonar scanner 邮件通知等
在系统管理 —> 插件管理中可安装大部分插件
持续部署之 jenkins 与 gitlab(二)
测试部署项目,此项目配置成直接在 gitlab 中拉取代码至 Jenkins 服务器中,在工作区域可见,项目名称为 auto-deloy
新建 –> 填写项目名称 –> 构建一个自由风格的软件项目 –> 点击 OK 按钮
需要从 gitlab 中拉取代码至 Jenkins 服务器则需要在 gitlab 中 deploy keys 部署公钥(jenkins 的公钥),而在 Jenkins 服务器中需部署私钥。
配置 credentials,存放私钥
需要在项目中配置从哪个 gitlab 服务器中拉取代码,则需使用 gitlab 中 ssh 开头的地址
点击 auto-deploy–> 源码管理 –> 选择仓库 URL 和 credentials(资格证书)此证书为之前配置中的证书继承即可
测试自动构建,查看是否能从 gitlab 中拉取代码至本地 Jenkins 服务器中
可在工作区中查看 Jenkins 上拉取的代码信息
持续部署之 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
安装中文插件如下配置:
使用 IP 地址访问如下:
如果安装失败可将插件下载好后解压至 sonar 默认存放插件的目录,重启服务即可,安装可扫描 php/java/Python 的插件。
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 结合 sonar-scanner 自动进行代码扫描
扫描之前需安装 sonarqube plugin 插件
系统管理 –> 管理插件 –> 搜索 sonarqub plugin 插件安装即可
Jenkins 结合 sonar 则需在系统管理 –> 系统设置 –>sonar 配置段进行配置,输入 name、server URL、server version 即可
系统管理 –>Global tools configuration 找到 sonarqube 填写 sonar 的安装路径及其 name
全局配置段配置完成之后则在接下来的项目中即可继承全集配置段中的配置,在需要扫描的项目中嵌入,点开项目 –> 设置 –> 构建 –>execute sonarqube scanner 将扫描参数填写在文本框中
完成配置,点击构建,即可自动进行代码扫描测试
构建成功显示为蓝色的球,在旁边会显示 sonar 的图标,点击图标可查看代码的质量展示信息
构建完成后,我们发现这里的 SonarQube 可以点击,我们点击 SonarQube 就会链接到 10.1.10.65:8800 就是代码查看器的地址
同时,可以在项目设置中配置构建后操作,例如构建失败可定义邮件通知等
构建失败后则会邮件提醒
持续部署之 jenkins 与 gitlab(四)
代码上线流水发布操作
Pipeline 中文意思为流水线之意,公司可能有很多项目,如果使用 Jenkins 自动构建成功后,开发需要一项一项点击,比较繁琐,所以出现 pipeline 流水化作业的代码测试管理,代码质量测试完毕之后,我们需将代码部署到测试环境或线上环境进行测试。
项目需求:在任意普通用户的家目录先将代码从 gitlab 中拉取下来,编写脚本,实现将代码自动拷贝至后端的 Tomcat 主机或其他 web 服务器。
新建项目
点击新建 –> 构建一个自由风格的软件项目 –> 点击 OK
点击项目名称 –> 设置 –> 构建中选择执行远程脚本
重要提示:执行远程命令主要涉及的是权限问题,我们要搞明白 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 写一个测试脚本,检车脚本是否可执行成功
然后我们点击立即构建,查看构建结构
上诉脚本能自动执行,则可配置 www 用户可以远程 ssh 到 web 服务器,将家目录下的源码文件拷贝至 web 服务器的站点根目录实现自动部署。这会看的是你写脚本的能力。。。。
项目需求:当本地 Jenkins 代码测试成功之后自动联动部署代码至 web 服务器的站点根目录。一系列的动作需自动完成则需要安装 Parameterized 插件,系统管理 –> 管理插件 –> 可选插件 搜索 Parameterized,如果插件在线安装不成功你懂得,可将下载好的插件解压至 plugin 目录下,将目录下的所有文件属组属主换成 Jenkins,重启服务即可。
点击项目 –> 设置 –> 构建后操作 –>trigger parameterized build on projects –>Add triggers–> 点击保存
点击构建项目 test-delpoy 时自动联动 auto-deloy,进行构建,可见第一个球闪烁完后,第二个球接着闪烁,完成自动构建
下载 Pipline,它是一个更为方便观察项目的自动构建的图形化工具
系统管理 –> 插件管理 –> 搜索安装插件 pipline
点击项目 All 后面的 + 号,新建一个视图,给视图取名,自定义一些选项。
pipeline 视图效果更加直观:红色代表构建失败,绿 - 蓝代表项目没有关联,两个都是绿的则表明项目相互关联,依次执行,可清晰看到上下情况和次数。
git 提交操作触发 Jenkins 自动构建
Jenkins 与 gitlab 集成后,实现的功能是开发写好代码 push 到 gitlab 上,push 完成之后,jenkins 自动帮我们立即构建,此方法一般使用在测试环境。
点击此项目并可触发项目联动结合脚本可实现自动上线部署,而往往这个功能只用在测试部署,上线部署手动完成较安全。
需安装 GitlabHook Plugin 插件
系统管理 –> 管理插件 –> 安装 GitlabHook Plugin
完成后,需配置 gitlab hook 插件,使用 openssl rand -hex 14 命令自动生成随机码
点击项目 –> 设置 –> 构建后触发器
配置完成后则需在 gitlab 中配置 webhooks
点击项目 –> 设置图标
Build Authorization Token Root Plugin 插件使用说明
https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin
示例: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= 随机数
配置完后,可点击 Test 按钮进行测试
Jenkins 控制台输出:
总结:完成上诉的自动联动后,gitlab+jenkins 基本上能满足中小型企业的版本上线的工作,配置一次后即可让你以后上线美滋滋,都交给开发,想不想和开发一起加班那就得看你怎么想的 :)