同步操作将从 flatfish/Java-Review 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
备注1:Linux常用软件的安装参见此篇 Linux常用软件安装 此内容已经包含了Git、JDK、Maven、Mysql的安装,本篇不再赘述,只做补充
备注2:因为我的阿里云服务器只有1核2G,所以带不动Gitlab,我就使用本地Linux服务器 CentOS7.7,和阿里云环境一致,但是机器最起码分配2核4G,才能最起码带的动!一定要注意,否则电脑会卡死!
git是什么呢?
什么是版本控制
git的作用是什么?
版本控制
git的优势哪里?
同类型软件有svn、cvs,git相比于他们最大的优势就在于git是分布式的 企业真实案例:svn服务器欠费,急需发版本。非常麻烦 Git 允许多个远程仓库存在,使得这样一种工作流成为可能:每个开发者拥有自己仓库的写权限和其他所有人仓库的读权限。 这种情形下通常会有个代表`‘官方’'项目的权威的仓库。 要为这个项目做贡献,你需要从该项目克隆出一个自己的公开仓库,然后将自己的修改推送上去。 接着你可以请求官方仓库的维护者拉取更新合并到主项目。 维护者可以将你的仓库作为远程仓库添加进来,在本地测试你的变更,将其合并入他们的分支并推送回官方仓库。
初识github
全球最大的同性交友网站:https://github.com/
windows下面安装git
下载git 到git官网上下载,自行选择合适系统的 https://git-scm.com/ 如果是win版本的,直接按默认安装即可
linux上安装,以centos 7.7为例
编译git源码安装:
为什么建议使用命令行的方式操作git?
git 本地操作
初次commit之前,需要配置用户邮箱及用户名,使用以下命令
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git commit
不推荐使用图形化
图形化客户端: sourcetree
安装: 由于种种不可描述的原因,无法注册账号且无法登陆所以需要绕过登陆
绕过登陆
[
{
"type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
"Authenticate": true,
"HostInstance": {
"type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
"Host": {
"type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
"Id": "atlassian account"
},
"BaseUrl": "https://id.atlassian.com/"
},
"Credentials": {
"type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
"Username": "",
"Email": null
},
"IsDefault": false
}
]
log命令的作用
git log命令显示的信息的具体含义
commit 4a70ceb24b6849ad830d6af5126c9227b333d2d1 --SHA-1 校验和 commit id
Author: icanci 1845666903@qq.com --作者跟邮箱概要信息
Date: Wed May 16 23:51:02 2018 +0800 --提交时间
v2 --commit的时候,使用-m选项说写一段概要说明 日常在使用commit的时候,-m选项所写得内容一定不能随便写 “修改了登陆的bug”--》“新增用户管理中心”
git log -数字 表示查看最近几次的提交
git log -p -2 显示最近两次提交的不同点
git log --author 作者名 查看具体某个作者的提交
git log --online 输出简要的信息
git log --graph 以一个简单的线串联起整个提交历史
git log 输出信息的定制
diff --git a/file b/file // file 的两个版本
index 10dc717..b13e337 100644
--- a/file // 变更之前的文件
+++ b/file // 变更之后的文件
@@ -1,2 +1,3 @@ 变更前的文件的第一行 变更之后的文件的向下2行 这块文件有差异 + 表示增加 - 表示删除,如果对同一行进行修改,表现为先删除,再修改
222
2221
+2221
安装virtualbox
安装centos7.7
配置网络
右键-->网络-->网卡2-->host-only cd /etc/sysconfig/network-scripts/ vi ifcfg-eth0 将此处改为yes ONBOOT=yes 此时可ping外网 cp ifcfg-eth0 ifcfg-eth1 加入以下内容 DEVICE=eth1 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.56.1
NETMASK=255.255.255.0
使用工具连接centos
此处我使用阿里云服务器进行配置
阿里云安装Gitlab参考文章
打开地址报错502
在防火墙里开放http跟ssh端口
yum install lokkit yum install curl openssh-server openssh-clients postfix cronie -y service postfix start chkconfig postfix on lokkit -s http -s ssh
curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.rpm.sh | sudo bash sudo yum install gitlab-ce
gitlab-ctl reconfigure vim /etc/gitlab/gitlab.rb 修改external_url为gitlab机子的ip+要使用的端口 如:[http://192.168.56.101:8888](http://192.168.56.101:8888/) 修改nginx['listen_port'] = 8888 重新配置gitlab并重启 gitlab-ctl reconfigure gitlab-ctl restart
vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT service iptables restart
//启动
sudo gitlab-ctl start
//停止
sudo gitlab-ctl stop
//重启
sudo gitlab-ctl restart
//查看状态
sudo gitlab-ctl status
//使更改配置生效
sudo gitlab-ctl reconfigure
配置邮箱服务的用途
有合并请求时,邮件通知 账号注册时,邮件验证 修改密码时,通过邮件修改
配置步骤
开启QQ邮箱的smtp服务(不建议使用163邮箱,发几次之后,就不能发送)
设置-->账户-->smtp-->密保验证-->验证成功返回一串字符串,形状如(ausdixersybgcgid)
保存返回的字符串
修改gitlab配置
vim /etc/gitlab/gitlab.rb
按/后输入smtp_enable,找到下面这一串文本,进行修改
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "1845666903@qq.com"
gitlab_rails['smtp_password'] = "开通smtp时返回的字符"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
user['git_user_email'] = "1845666903@qq.com"
gitlab_rails['gitlab_email_from'] = '1845666903@qq.com'
按esc退出到命令行模式
之后:wq 保存并退出
gitlab-ctl reconfigure
测试邮件服务是否正常
gitlab-rails console
Notify.test_email('接收方邮件地址','邮件标题','邮件内容').deliver_now
Notify.test_email('1845666903@qq.com','this is title','hello').deliver_now
按回车,测试发送。
开启注册邮箱验证
admin area --》setting--》Sign-up restrictions--》勾选Send confirmation email on sign-up
当前用户
root、123、wiggin
创建组
首页->create a group(http://192.168.126.129:8888/dashboard/groups)
访问级别
Private:只有组成员才能看到
Internal:只要登录的用户就能看到
Public:所有人都能看到
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交
Developer:可以克隆代码、开发、提交、push
Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员
键入命令:ssh-keygen -t rsa
提醒你输入key的名称,输入如id_rsa
在C:\Users\用户.ssh下产生两个文件:id_rsa和id_rsa.pub
用记事本打开id_rsa.pub文件,复制内容,在gitlab.com的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚才复制的内容。
vim /etc/profile
在最下面,按i进入insert模式,添加一下内容
JAVA_HOME=/usr/local/jdk1.8.0_91
export JAVA_HOME
CLASSPATH=.:$JAVA_HOME/lib
export CLASSPATH
PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
export PATH
按esc进入命令行模式,再按:wq保存退出
激活配置
source /etc/profile
解压maven
tar -zxvf apache-maven-3.5.3-bin.tar.gz -C /usr/local/
配置maven环境变量
vim /etc/profile
在最下面,按i进入insert模式,添加一下内容
MAVEN_HOME=/usr/local/apache-maven-3.5.3
export MAVEN_HOME
PATH=$PATH:$MAVEN_HOME/bin
export PATH
按esc进入命令行模式,再按:wq保存退出
激活配置
source /etc/profile
配置Maven国内源
编辑修改 /usr/local/apache-maven-3.5.3/conf/settings.xml⽂件,在 <mirrors></mirrors> 标签对⾥添加如下内容即可:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
下载nexus
上传到服务器/root/
解压
tar -zxvf nexus-3.12.1-01-unix.tar.gz -C /usr/local/
修改配置文件
vim /usr/local/nexus-3.12.1-01/etc/nexus-default.properties 修改对应的端口 默认是8081
修改防火墙 vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
进入安装目录下的bin目录下,执行 ./nexus start 启动
浏览器打开并登陆
默认账号:admin
默认密码 admin123
System Requirement: max file descriptors [4096] likely too low, increase to at least [65536].
修改ulimit
vim /etc/security/limits.conf
新增
* soft nofile 65536
* hard nofile 65536
配置开机自启动
增加一行 vim /etc/rc.d/rc.local
su - nexus -c '/usr/local/nexus-3.12.1-01/bin/nexus start'
然后重启
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups/>
<proxies/>
<servers>
<server>
<id>icanci-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>icanci-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors/>
<profiles>
<profile>
<id>icanci</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<!-- 私有库地址-->
<repositories>
<repository>
<id>icanci</id>
<url>http://192.168.126.129:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!--插件库地址-->
<pluginRepositories>
<pluginRepository>
<id>icanci</id>
<url>http://192.168.126.129:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>icanci</activeProfile>
</activeProfiles>
</settings>
<!--pom.xml 远程仓库的配置 id要跟本地maven的setting.xml相同 -->
<distributionManagement>
<repository>
<id>icanci-releases</id>
<name>Ruizhi Release Repository</name>
<url>http://192.168.126.129:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>icanci-snapshots</id>
<name>Ruizhi Snapshot Repository</name>
<url>http://192.168.126.129:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
启动失败
如果启动报错,内存溢出参考博客: https://blog.csdn.net/weixin_40816738/article/details/90116133
前置依赖
下载
安装unzip并解压sonarqube并移动到/usr/local
mysql里新增数据库
修改sonarqube相应的配置
vim /usr/local/sonarqube-6.7.4/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=icanci1104
sonar.jdbc.url=改成步骤上面创建的库名
sonar.web.context=/sonar
sonar.web.host=0.0.0.0
新增用户,并将目录所属权赋予该用户
useradd sonar
chown -R sonar:sonar sonarqube-6.7.4/
启动
su sonar
/usr/local/sonarqube-6.7.4/bin/linux-x86-64/sonar.sh start
注意
sonarqube启动时报错WrapperSimpleApp: Encountered an error running main: java.nio.file.AccessDeniedException
删除temp目录重启即可
token
界面访问
http://192.168.56.101:9000/sonar 开启防火墙 vim /etc/sysconfig/iptables 新增9000端口 在界面产生令牌,并将项目代码使用以下命令进行提交由sonarqube进行分析,完成后,查看相应的分析结果
mvn sonar:sonar \
-Dsonar.host.url=http://192.168.126.129:9000/sonar \
-Dsonar.login=77cc921ceecf7c00db84988dca6257d65aa61a19
执行测试
分析结果
前置条件
JDK、tomcat
安装tomcat
下载地址: https://tomcat.apache.org/download-90.cgi
useradd tomcat --新增一个名为tomcat的用户
passwd tomcat --给tomcat用户设置密码
tar -zxvf apache-tomcat-9.0.8.tar.gz -C /usr/local/ --将tomcat解压到相应目录
chown -R tomcat:tomcat /usr/local/apache-tomcat-9.0.8 --将整个目录的所属权转移给tomcat用户、tomcat组
安装Jenkins
下载地址: https://jenkins.io/download/
将Jenkins上传到tomcat的webapp目录
chown tomcat:tomcat Jenkins.war 修改Jenkinswar包为tomcat用户所有
启动tomcat --通过浏览器无法访问tomcat
1.看tomcat是否存活 ps aux | grep tomcat
2.看端口 netstat -tlun 看到8080端口已经使用了
3.检查防火墙 vim /etc/sysconfig/iptables 加入8080
4.查看tomcat日志 --》出现异常,地址已经被使用
5.关闭tomcat --》 查看端口(步骤2)--》发现8080依旧存在
6.断定8080被其他程序占用 --》netstat -tlunp | grep 8080 -->看到被gitlab相关的程序使用了
7.修改tomcat端口 vim conf/server.xml ,找到8080 --》将8080改成不被占用的9999端口
8.防火墙开启9999端口
9.可以正常访问tomcat
执行安装
126f667e38a54fdb80cf84543f5884cf
重启tomcat 浏览器打开http://192.168.126.129:9999/jenkins
more /root/.jenkins/secrets/initialAdminPassword 选择默认安装
126f667e38a54fdb80cf84543f5884cf
如果忘记密码
删除配置
sudo rm -rf /var/root/.jenkins ~/.jenkins
sudo rm -f /etc/newsyslog.d/jenkins.conf
然后重新配置即可
教程参见本文件夹 Jenkins持续集成从入门到精通.pdf
P16页 感谢黑马程序员的开源: http://www.itheima.com/
rpm包下载地址: http://mirrors.jenkins-ci.org/redhat/
sed -i 's#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
上述方法对我电脑无效
插件安装
系统管理--》插件管理
1.安装Maven Integration plugin
2.安装SonarQube Scanner for Jenkins
3.Publish Over SSH --发布到远程服务器
系统配置
系统管理--》全局工具配置
1.配置jdk
2.配置maven
3.配置sonar
4.邮件配置 系统管理--》系统设置--》邮件通知--》 smtp服务器 smtp.qq.com 用户默认邮件后缀 @qq.com 勾选ssl Reply-To Address发件者邮箱 之后测试一下配置,无误即可
配置gitlab授权
Credentials--》system--》Global credentials
配置免密登陆
yum -y install openssh-clients ssh-keygen -t rsa -- 产生私钥 配置git登陆
将Jenkins所在机子的公钥 more ~/.ssh/id_rsa.pub 的内容拷贝到gitlab项目上
用户 --显示Jenkins里的用户
构建历史 --以时间轴的形式,显示项目的构建历史
系统管理 --跟Jenkins相关的配置都在里面
3.1 系统设置 全局设置相关的都在里面(maven、邮件、ssh服务器等都在里面配置) 3.2 全局安全配置 用户权限、是否允许用户登录等配置 3.3 configure credentials 配置证书相关的 3.4 全局工具配置 JDK Git Maven 等都在里面配置 3.5 读取配置 放弃当前配置,而读取配置文件 3.6 管理插件 所有的插件都是在此处管理的,安装,升级 3.7 系统信息 系统相关的信息 3.8 系统日志 系统日志,帮助定位问题 3.9 负载统计 3.10 Jenkins cli 3.11 脚本命令行 3.12 管理节点 3.13 关于Jenkins 3.14 manage old data 3.15 管理用户
Jenkins用户的管理
我的视图 --我们配置的要构建的项目
Credentials --证书相关,授权相关
Tomcat:tomcat - tomcat
nexus:nexus
mysql:root - icanci1104
sonar:sonar
Jenkins:admin - 123456
地址
gitlab:http://192.168.126.129:8888/root/test-first
nexus:http://192.168.126.129:8081/
sonar:http://192.168.126.129:9000/sonar/
Jenkins:http://192.168.126.129:9191/
nohup 的用途就是让提交的命令忽略 hangup 信号,那什么叫做hangup信号?这里给出了答案
0:标准输入 1:标准输出,2:标准错误
--本地手动构建
定时表达式含义
* * * * * --五个字段
分 时 天 月 周
构建环境
Delete workspace before build starts:在构建之前清空工作空间
Abort the build if it's stuck:如果构建出现问题则终止构建
Add timestamps to the Console Output:给控制台输出增加时间戳
Use secret text(s) or file(s):使用加密文件或者文本
执行shell
#!/bin/bash
mv target/*.jar /root/demo/
cd /root/demo
BUILD_ID=
java -jar springboot-demo.jar >log 2>&1 &
本地gitlab触发构建
配置gitlab webhook
系统管理员登陆 http://192.168.56.101:8888/admin/application_settings settings Outbound requests 勾选Allow requests to the local network from hooks and services
sonarqube整合
required metadata
#projectKey项目的唯一标识,不能重复
sonar.projectKey=xdclass
sonar.projectName=xdclass
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module
# Java module
java-module.sonar.projectName=test
java-module.sonar.language=java
# .表示projectBaseDir指定的目录
java-module.sonar.sources=src
java-module.sonar.projectBaseDir=.
java-module.sonar.java.binaries=target/
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>
<h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS} - 此邮件系统自动发送,请勿回复</font>
</h2>
</td>
</tr>
<tr>
<td>
<br/>
<b>
<font color="#0B610B">构建信息</font>
</b>
<hr size="2" width="100%" align="center"/>
</td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td>
<b>
<font color="#0B610B">Changes Since Last Successful Build:</font>
</b>
<hr size="2" width="100%" align="center"/>
</td>
</tr>
<tr>
<td>
历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a>
<br>
${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br/>%c<br/>",showPaths=true,changesFormat="<pre>[%a]<br/>%m</pre>",pathFormat=" %p"}
</td>
</tr>
<tr>
<td><b>Failed Test Results</b>
<hr size="2" width="100%" align="center"/>
</td>
</tr>
<tr>
<td>
<pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica,sans-serif"> $FAILED_TESTS</pre>
<br/>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">变更集</font></b>
<hr size="2" width="100%" align="center"/>
</td>
</tr>
<tr>
<td>${JELLY_SCRIPT,template="html"}<br/>
<hr size="2" width="100%" align="center"/>
</td>
</tr>
<tr>
<td><b>
<font color="#0B610B">构建日志 (最后 10行):更多日志请查看附件日志 - build.log </font>
</b>
<hr size="2" width="100%" align="center"/>
</td>
</tr>
<tr>
<td>
<textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG,maxLines=10}
</textarea>
</td>
</tr>
</table>
</body>
</html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。