gitlab及jenkins
1、安装配置gitlab服务,在gitlab新建一个仓库,配置本地密钥,并通过ssh方式拉取gitlab仓库代码
https://packages.gitlab.com/gitlab/gitlab-ce?page=1 gitlab包下载地址
wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.3.4-ce.0.el7.x86_64.rpm/download.rpm
修改配置文件,并启动服务
root@gitlab:~# grep "^[a-Z]" /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.196.3'
#可选邮件通知设置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "961161266@qq.com"
gitlab_rails['smtp_password'] = "授权码"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = :login
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "961161266@qq.com"
user["git_user_email"] = "961161266@qq.com"
执行配置并启动服务:
gitlab-ctl reconfigure #修改完配置文件要执行此操作
# gitlab-rails #用于启动控制台进行特殊操作,比如修改管理员密码、打开数据库控制
台( gitlab-rails dbconsole)等
# gitlab-psql #数据库命令行
root@s1:~# gitlab-psql
psql (9.6.11)
Type "help" for help.
gitlabhq_production=# \db
List of tablespaces
Name | Owner | Location
------------+-------------+----------
pg_default | gitlab-psql |
pg_global | gitlab-psql |
(2 rows)
# gitlab-rake #数据备份恢复等数据操作
# gitlab-ctl #客户端命令行操作行
# gitlab-ctl stop #停止 gitlab
# gitlab-ctl start #启动 gitlab
# gitlab-ctl restar #重启 gitlab
# gitlab-ctl status #查看组件运行状态
# gitlab-ctl tail nginx #查看某个组件的日志
设置密码。
默认用户为root,口令没有第一次登陆时需要设置口令
使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里
面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不
同的开发即可实现对开发设置权限的管理。
git 客户端测试 clone 项目:
编辑文件并测试提交:root@jenkins:/source
# cd test-project/
# git config --global user.name #配置一个用户名
# git config --global user.email 2973707860@qq.com #配置一个邮箱
# vim index.html
cat index.html
11111111111
22222222222
# git add index.html #添加至本地
# git commit -m "v1"#将代码打上标签
git config --global user.name “name“ #设置全局用户名
git config --global user.email xxx@xx.com #设置全局邮箱
git config --global --list #列出用户全局设置
git add index.html / . #添加指定文件、目录或当前目录下所有数据到暂存区
git commit -m “11“ #提交文件到工作区
git status #查看工作区的状态
git push #提交代码到服务器
git pull #获取代码到本地
git log #查看操作日志
vim .gitignore #定义忽略文件
git reset --hard HEAD^^ #git 版本回滚, HEAD 为当前版本,加一个^为上一个,^^为上上一个版本
git reflog # #获取每次提交的 ID,可以使用--hard 根据提交的 ID 进行版本回退
git reset --hard 5ae4b06 #回退到指定 id 的版本
# git branch #查看当前所处的分支
#git checkout -b develop #创建并切换到一个新分支
2、安装配置jenkins,并实现jenkins和gitlab集成,实现jenkins自动化更新回滚
配置 java 环境并部署 jenkins:
https://jenkins.io/zh/download/下载地址
vim /etc/sysconfig/jenkins #修改配置文件,为了后面的权限设置问题,将用户改为root
JENKINS_USER="root"
systemctl start jenkins #启动服务
tail -f /var/log/jenkins/jenkins.log
查看日志,在第一次启动jenkins时,会生成一串秘钥。后面安装时需要提供
/var/lib/jenkins/secrets/initialAdminPassword #在此文件中也会生成字符串
4.1.11:jenkins 插件管理及安装:
4.1.11.1:插件安装目录:
插件下载地址:http://updates.jenkins-ci.org/download/plugins/
4.1.12:配置 jenkins 权限管理:
基于角色的权限管理,先创建角色和用户,给角色授权,然后把用户管理到角色。
4.1.12.3:更改认证方式:
Jenkins—系统管理—全局安全配置
默认创建的用户登录后可以做任何操作,取决于默认的认证授权方式。
在系统配置中可以添加邮箱认证
新建自由风格项目
在凭据中添加私钥,用于链接gitlab仓库
在项目中可以添加gitlab仓库。使用ssh秘钥认证
启动tomcat 使用jenkins自动部署代码至tomcat
yum install java-1.8.0-openjdk-devel #安装devel版本,会自动解决其他依赖关系
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.45/bin/apache-tomcat-8.5.45.tar.gz #下载tomcat二进制安装包
tar xf apache-tomcat-8.5.45.tar.gz -C /usr/local/ #解压至usr/local目录中
ln -s apache-tomcat-8.5.45.tar.gz tomcat #创建软连接方便以后修改
useradd tomcat #添加用户,修改属组 ,tomcat默认以普通身份运行,需要修改文件权限
chown -R .tomcat .
chmod g+r conf/*
chmod g+rx conf/
chown -R tomcat logs/ temp/ work/
vim /etc/profile.d/cols.sh #修改tomcat命令行配置。
PS1='[\e[32;40m\u@\h \W\e[m]$ '
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/tomcat/bin
更好一下tomcat中的appbase目录
启动catalina.sh start
配置gitlab仓库地址,使用秘钥认证连过去
使用shell执行命令
进入jenkins中。系统自带目录(默认创建项目时会创建根项目同名的目录在/var/lib/jenkins/workspace中)
拉取代码至本地。远程停止tomcat服务。在将文件替换至目标目录,之后启动服务
输出信息
添加slave节点
4.3:pipline:
官方介绍;https://jenkins.io/2.0/
pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核
心插件,简单来说 Pipline 就是一套运行于 Jenkins 上的工作流框架,将原本独立运行
于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而
实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline 的实现方式是一套
Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本。
4.3.2:pipline 语法:
Stage:阶段,一个 pipline 可以划分为若干个 stage,每个 stage 都是一个操作,比如
clone 代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个 node
执行。
Node:节点,每个 node 都是一个 jenkins 节点,可以是 jenkins master 也可以是
jenkins agent,node 是执行 step 的具体服务器。
Step:步骤,step 是 jenkins pipline 最基本的操作单元,从在服务器创建目录到构建容
4.3.2.2:测试简单 pipline job 运行:
node {
stage("clone 代码"){
echo "代码 clone"
}
stage("代码构建"){
echo "代码构建"
}
stage("代码测试"){
echo "代码测试"
}
stage("代码部署"){
echo "代码部署"
}
}
5.1:代码测试工具 SonarQube:
官方网站:http://www.sonarqube.org/
SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以
集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如
Hudson/Jenkins 等)不同,SonarQube 并不是简单地把不同的代码检查工具结果(例
如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再
加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种
类的工程进行代码质量管理。在对其他工具的支持方面,Sonar不仅提供了对 IDE的支
持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持
续集成工具提供了接口支持,可以很方便地在持续集成中使用 SonarQube,此外,
SonarQube 的插件还可以对 Java以外的其他编程语言提供支持,对国际化以及报告
文档化也有良好的支持。
5.2.1:编辑配置文件:
https://www.sonarqube.org/downloads/下载地址
sonar 依赖于 java 环境,而且 java 版本必须是 1.8 版本或更高,否则 sonar 启动失败
6.7.X 版本的 sonar 需要调用 elasticsearch,而且默认需要使用普通用户启动
$ unzip sonarqube-6.7.6.zip
$ln -sv /usr/local/src/sonarqube-6.7.6 /usr/local/sonarqube
$grep "^[za-Z]" /usr/local/sonarqube/conf/sonar.properties
[root@s1 local]# grep "^[za-Z]" /usr/local/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://192.168.7.106:3306/sonar?useUnicode=true&characterEncodi
ng=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.host=0.0.0.0
sonar.web.port=9000
5.2.2:启动 sonarqube:
# /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
默认登录名及密码为admin
5.1.2:Mysql 数据库创建及授权:
#yum install vim gcc gcc-c++ wget autoconf net-tools lrzsz iotop lsof iotop bash-completion
curl policycoreutils openssh-server openssh-clients postfix -y
#cd mysql-5.6.42-linux-glibc2.12-x86_64
#ln -sv /usr/local/src/mysql-5.6.42-linux-glibc2.12-x86_64 /usr/local/mysql
#useradd mysql -s /sbin/nologin
#chown mysql.mysql /usr/local/mysql/ -R
#/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --
basedir=/usr/local/mysql/
#cp /usr/local/src/mysql-5.6.42-linux-glibc2.12-x86_64/support-files/mysql.server
/etc/init.d/mysqld
#cp my.cnf /etc/my.cnf
#chmod a+x /etc/init.d/mysqld
#/etc/init.d/mysqld start
#ln -sv /usr/local/mysql/bin/* /usr/bin/
#mkdir /var/lib/mysql
#ln -sv /data/mysql/mysql.sock /var/lib/mysql/
5.3:部署扫描器 sonar-scanner:
5.3.1:部署 sonar-scanner:
sonarqube 通过调用扫描器 sonar-scanner 进行代码质量分析,即扫描器的具体工作就
是扫描代码:
#下载地址:http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
# unzip sonar-scanner-2.6.1.zip
# ln -sv /usr/local/src/sonar-scanner-2.6.1 /usr/local/sonar-scanner
# cd /usr/local/sonar-scanner/
# grep "^[a-Z]" conf/sonar-scanner.properties
sonar.host.url=http://localhost:8800
sonar.sourceEncoding=UTF-8
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://192.168.1.195:3306/sonar?useUnicode=true&character
Encoding=utf8
5.3.4:jenkins 关联到 SonarQube :
首先安装插件,在 jenkins 插件安装界面安装 Sonar 插件 SonarQubePlugin
其次配置 SonarQube server,系统管理-系统设置
5.3.5:让 jenkins 关联到 Sonarscanner
添加扫描器:
系统管理-Global Tool Configuration
5.3.6:配置扫描:
选择自己的项目(demo)-构建-execute sonarqube scanner,将配置文件的内容修改成如
下格式填写完成后点保存:
sonar.projectKey=test-demo1
sonar.projectName=test-demo1
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=php
sonar.sourceEncoding=UTF-8
5.3.6:配置扫描:
选择自己的项目(demo)-构建-execute sonarqube scanner,将配置文件的内容修改成如
下格式填写完成后点保存:
sonar.projectKey=test-demo1
sonar.projectName=test-demo1
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=php
sonar.sourceEncoding=UTF-8
使用脚本自动更新,需要传递参数,
#!/bin/bash
DATE=`date +%Y-%m-%d_%H-%M-%S`
GROUP_LIST=$2
function IP_list(){
if [[ ${GROUP_LIST} == "online-group1" ]];then
Server_IP="192.168.8.4"
echo ${Server_IP}
elif [[ ${GROUP_LIST} == "online-group2" ]];then
Server_IP="192.168.8.5"
ssh root@192.168.8.2 ""echo enable server web_port/192.168.8.4" | socat stdio /var/lib/haproxy/haproxy.sock"
ssh root@192.168.8.6 ""echo enable server web_port/192.168.8.5" | socat stdio /var/lib/haproxy/haproxy.sock"
echo ${Server_IP}
elif [[ ${GROUP_LIST} == "online-all" ]];then
Server_IP="192.168.8.4 192.168.8.5"
echo ${Server_IP}
fi
}
#function pull_code(){
# rm -rf /home/tomcat/.jenkins/workspace/testweb
# cd /home/tomcat/.jenkins/workspace
# git clone git@192.168.7.202:testgroup/testweb.git
#}
function make_zip(){
cd /var/lib/jenkins/workspace/test-demo1 && zip testweb.war.zip ./*
}
function down_node(){
for node in ${Server_IP};do
echo ${node}
ssh root@192.168.8.2 ""echo disable server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"
ssh root@192.168.8.6 ""echo disable server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"
echo "${node} 关闭成功!"
done
}
function stop_tomcat(){
for node in ${Server_IP};do
ssh tomcat@${node} "/etc/init.d/tomcat stop"
echo "${node} 关闭成功!"
done
}
function start_tomcat(){
for node in ${Server_IP};do
ssh tomcat@${node} "/etc/init.d/tomcat start"
echo "${node} 关闭成功!"
done
}
function scp_codefile(){
cd /var/lib/jenkins/workspace/test-demo1
for node in ${Server_IP};do
scp testweb.war.zip tomcat@${node}:/apps/tomcat_appdir
ssh tomcat@${node} "cd /apps/tomcat_appdir && unzip testweb.war.zip -d /apps/tomcat_webdir/testweb-${DATE} && rm -rf /data/tomcat_webdir/testweb && ln -sv /apps/tomcat_webdir/testweb-${DATE} /data/tomcat_webdir/testweb"
done
}
function web_test(){
#sleep 30
for node in ${Server_IP};do
NUM=`curl -s -I -m 10 -o /dev/null -w %{http_code} http://${node}:8080/testweb/index.html`
if [[ ${NUM} -eq 200 ]];then
echo "${node} 测试通过,即将添加到负载"
add_node ${node}
else
echo "${node} 测试失败,请检查该服务器是否成功启动tomcat"
fi
done
}
function add_node(){
node=$1
echo ${node},"----->"
if [ ${node} == "192.168.8.100" ];then
echo "192.168.8.100部署完毕,请进行代码测试!"
else
ssh root@192.168.8.2 ""echo enable server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"
ssh root@192.168.8.6 ""echo enable server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"
fi
}
function rollback_last_version(){
for node in ${Server_IP};do
NOW_VERSION=`ssh tomcat@${node} ""/bin/ls -l -rt /data/tomcat_webdir/ | awk -F"->" '{print $2}' | tail -n1 | awk -F"/apps/tomcat_webdir/" '{print $2}'""`
NAME=`ssh tomcat@${node} ""/bin/ls -l -rt -d /apps/tomcat_webdir/testweb* | grep -B 1 ${NOW_VERSION} | head -n1 | awk '{print $9}'""`
ssh tomcat@${node} "rm -rf /data/tomcat_webdir/testweb && ln -sv ${NAME} /data/tomcat_webdir/testweb"
done
}
main(){
case $1 in
deploy)
IP_list;
#pull_code;
make_zip;
down_node;
stop_tomcat;
scp_codefile;
start_tomcat;
web_test;
;;
rollback_last_version)
IP_list;
echo ${Server_IP}
down_node;
stop_tomcat;
rollback_last_version;
start_tomcat;
web_test;
;;
esac
}
main $1 $2
#需要自建两个参数
gitlab及jenkins的更多相关文章
- gitlab+gerrit+jenkins持续集成框架
1.持续集成之gitlab+gerrit+jenkins 1.1. GitLab 1.1.1. 简介 GitLab 是一个使用使用Ruby on Rails搭建的,用于仓库管理系统的开源项目.使用Gi ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- gitlab与jenkins的自动化部署(通过webhook与ansilble)
gitlab与jenkins的自动化部署(通过webhook与ansilble) 1.部署介绍 gitlab服务器:192.168.1.49:80jenkins服务器:192.168.1.49:818 ...
- gitlab 与 jenkins 关联
一.搭建 gitlab :https://www.cnblogs.com/carriezhangyan/p/10729158.html 二.搭建jenkins :https://www.cnblogs ...
- 持续集成之④:GitLab触发jenkins构建项目
持续集成之④:GitLab触发jenkins构建项目 一:目的为在公司的测试环境当中一旦开发向gitlab仓库提交成功代码,gitlab通知jenkins进行构建项目.代码质量测试然后部署至测试环境, ...
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接https://www.cnblogs.com/kevingrace/p/5651447.html
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已, ...
- docker下运行Gitlab CE+Jenkins+Nexus3+docker-registry-frontend
DevOps - Gitlab CE - Jenkins - Nexus Gitlab CE https://hub.docker.com/r/gitlab/gitlab-ce/ https://do ...
- Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- 开普勒云平台:如何配置gitlab与Jenkins
一.Kplcloud是什么? kplcloud是一个基于Kubernetes的轻量级PaaS平台,通过可视化的界面对应用进行管理,降低应用容器化的对度,从而减少应用容器化的时间成本. Kplcloud ...
随机推荐
- ISO/IEC 9899:2011 条款6.10.3——宏替换
6.10.3 宏替换 约束 1.两个替换列表是相同的,当且仅当两个替换列表中的预处理符记都具有相同的数.次序.拼写,以及空白分隔符,这里所有的空白分隔符都认为是相同的. 2.当前被定义为一个类似对象的 ...
- [LeetCode] 500. Keyboard Row 键盘行
Given a List of words, return the words that can be typed using letters of alphabet on only one row' ...
- 【OpenCV开发】OpenCV3后IPLimage转换成MAT的问题
IplImage* img1 = cvCreateImage(cvGetSize(resizeRes), IPL_DEPTH_8U, 1);//创建目标图像 Mat test = img1; 报错 ...
- Theano入门
由于自己的一个小项目需要Theano部分的开源代码,所以学习一下并记录入门的经典网站. 入门中文博客:https://blog.csdn.net/hjimce/article/details/4680 ...
- 第7/7Beta冲刺
1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...
- 【C++札记】赋值兼容
赋值兼容的规则时在需要使用基类对象的任何地方都可以使用公有派生类对象来替代.公有继承派生类可获得基类中除构造函数,析构函数外的所有成员,能用基类解决的问题,派生类也能解决.更直白点说,如果一个类是从一 ...
- 栈习题(1)-对于任意的无符号的的十进制数m,写出将其转换为十六进制整数的算法(正确输出即可)
/*对于任意的无符号的的十进制数m,写出将其转换为十六进制整数的算法(正确输出即可)*/ /* 算法思想:利用辗转取余法,每次都将余数存入栈中,直到被除数等0,退出循环. 输出栈里的内容即可 */ v ...
- Fedora30 - Xrdp 远程桌面
Windows RDP 访问 Fedor 远程桌面需要使用 Xrdp 开源工具. [lipandeng@localhost ~]$ sudo dnf install xrdp [lipandeng@l ...
- yii2 发送邮件 yii\swiftmailer\Mailer
Yii2 中发送邮件 yii\swiftmailer\Mailer 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath ...
- css之多行居中
需求: 单行到多行文字居中. <div> <p>应该为数组中的每个子代分配一个唯一的键.表格dataSource和中的值columns应遵循此规则.默认情况下</p> ...