一、环境准备
10.0.0.5 lb01
10.0.0.7 web01
10.0.0.8 web02
10.0.0.51 db01
10.0.0.110 git gitlab.oldxu.com
10.0.0.120 jenkins jenkins.oldxu.com
10.0.0.130 sonarqube sonar.oldxu.com
二、持续集成CI概念介绍
1.持续集成CI
让产品可以快速迭代,同时还能保持高质量。 简化工作。
2.持续交付
交付生产的产品。
3.持续部署
部署交付后的产品。
4.持续集成实现的思路
git
jenkins
三、持续集成练习题
6.版本控制系统
1.版本控制系统概述
2.Git基本概述
3.Git基本命令
1.你是谁?
2.你的邮箱是?
1.实战一、git如何提交目录文件至至本地仓库?
2.实战三、如何比对本地工作目录文件内容、暂存区文件内容、本地仓库文件内容之间的差异?
回退
1.如果本地工作目录修改文件错误想回退怎么办?
2.如果文件丛本地目录提交到暂存区后,想回退怎么办?
3.如果提交多次内容至本地仓库,想回退怎么办?
4.如何创建分支,又如何合并分支?
f7f5810 HEAD@{17}: commit: 新增file1-oldxu.com
4.Git分支管理
5.Git标签管理
6.Git远程仓库
7.git
如何提交
如何回退
git分支
git log
git远程仓库
github
gitee
四、持续集成步骤
1.持续集成
2.持续交付
3.持续部署
4.持续集成整体实现流程思路以及工具 gitlab jenkins
5.版本控制系统
6.git基本使用
安装git
配置git 我是谁 我的邮箱是
初始化一个目录为一个仓库 git init
7.git基本练习
1.如何提交?
2.提交中的commit是什么?
3.如何对比?
本地与暂存区对比 git diff
暂存区与本地仓库 git diff --cached
4.如何回退?
1.本地修改错误如何回退? git checkout filename
2.本地提交暂存区如何回退? git reset HEAD
3.本地提交至本地仓库多次?
git reflog
git reset --hard commit_id
5.git 分支?
git branch bug 创建分支
git checkout bug 切换分支
git merge master 合并分支 (看你在哪个分支上?)
6.git 标签? tag
git tag -a "v1.1" -m "描述" 创建一个标签
git tag -d "v1.1" 删除标签
git tag -a "v1.1" commit 将某个commit_id关联至某个tag
7.git 远程仓库?
1.如何将远程仓库与本地仓库关联、
2.如何提交一个文件至远程仓库
工作区: touch file5
暂存区: git add .
本地仓库: git commit -m "new file file5"
远程仓库: git push origin master
8.gitlab仓库 (社区版)
1.gitlab是一个开源仓库,社区版ce 企业版ee(基于git基础上开发。)
2.github创建私有仓库收费,网络较差。
3.码云 ---> 收费 创建私有仓库最多5个人协同开发。
公司一般选择 gitlab
个人开源项目 github gitee
五、安装gitlab
[root@gitlab ~]# yum install -y curl policycoreutils-python openssh-server postfix
[root@gitlab ~]# systemctl enable postfix
[root@gitlab ~]# systemctl start postfix
[root@gitlab ~]# yum localinstall gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
六、配置gitlab
1.备份gitlab配置文件
[root@gitlab ~]# cp -v /etc/gitlab/{gitlab.rb,gitlab.rb_bak}
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
2.修改gitlab访问的url
external_url 'http://gitlab.oldxu.com'
3.关闭一些没有用程序
prometheus['enable'] = false
prometheus_monitoring['enable'] = false
4.配置邮箱
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = "572891887@qq.com" # 发件邮箱
gitlab_rails['gitlab_email_display_name'] = 'OldXu-GitLab' # 发件人显示名称
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "572891887@qq.com" #发件人邮箱账户
gitlab_rails['smtp_password'] = "nvguuktrefkmbcbe" #发件人邮箱客户端授权码
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
七、初始化gitlab
[root@gitlab ~]# gitlab-ctl reconfigure
八、版启动gitlab
[root@gitlab ~]# gitlab-ctl start
九、访问gitlab,然后配置root密码
123456.com
十、汉化gitlab 翻译
1.停止gitlab
[root@gitlab ~]# gitlab-ctl stop
2.替换语言包
[root@gitlab ~]# tar xf gitlab-12-0-stable-zh.tar.gz
[root@gitlab ~]# \cp -r gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
3.重新加载gitlab
[root@gitlab ~]# gitlab-ctl reconfigure
4.启动gitlab
[root@gitlab ~]# gitlab-ctl start
5.选择右上角--->setttings---》Preferences -->Language
十一、gitlab中用户 用户组 项目 之间的关系 配置 验证 (邮件) ---》权限?
1.创建组 dev
2.基于组 创建 5个项目 dev-1 dev-2 dev-3 dev-4 dev-5
3.创建用户 将用户加入dev组,此时用户就能看到对应的5个项目
4.至于用户到底有什么权限,取决于添加用户时给分配的权限
十二、gitlab创建项目?
1.本地与远程仓库的连接
2.本地推送数据至远程仓库
3.新加入的小伙伴需要协同开发? git clone 镜像代码 ---> 权限
4.新伙伴提交了代码至远程仓库
5.我这边本地拉取代码。
十三、gitlab备份,恢复? 升级 10 --》11---》 12
1.备份gitlab
[root@gitlab ~]# gitlab-rake gitlab:backup:create
2.额外需求
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
# gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #控制备份后的产物放在哪里
# gitlab_rails['backup_keep_time'] = 604800 #保留多久的数据
[root@gitlab ~]# gitlab-ctl reconfigure
3.如果希望每天都备份,可以使用crond服务来实现。
4.不小心误操作删除了几个项目,现在该如何恢复?
[root@gitlab ~]# gitlab-ctl stop sidekiq
[root@gitlab ~]# gitlab-ctl stop unicorn
[root@gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1567240183_2019_08_31_12.0.3
[root@gitlab ~]# gitlab-ctl restart
十四、jenkins
1.介绍jenkins
CI 调度平台 JAVA开发
2.安装jenkins (N多种安装方式)
[root@jenkins ~]# yum install java -y
[root@jenkins ~]# yum localinstall jenkins-2.176.1-1.1.noarch.rpm
[root@jenkins ~]# systemctl start jenkins && systemctl enable jenkins
PS:
1.如果没有提前准备好插件,请选择 安装推荐的插件
2.如果提前准备好了插件, 选择右上角的跳过插件安装
3.离线状态: 因为连接不上插件的地址,所以离线了, 所以选择跳过插件安装。 创建用户--》设定密码
4.离线状态: 直接就进入jenkins 需要给默认的admin配置一个密码。
3.jenkins插件
1.如何对插件进行加速? 替换源?
https://mirror.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
2.如何导入一个.hpi的插件?
3.之前已经备份下来的插件如何批量导入?
[root@jenkins ~]# rm -rf /var/lib/jenkins/plugins
[root@jenkins ~]# tar xf jenkins_2.176_plugins.tar.gz -C /var/lib/jenkins/
[root@jenkins ~]# chown -R jenkins.jenkins /var/lib/jenkins/plugins/
[root@jenkins ~]# systemctl restart jenkins
4.创建jenkins的job任务
1.实现jenkins+shell集成
2.实现jenkins+gitlab集成
1.准备一个项目
2.前往gitlab创建一个仓库
3.本地提交项目至gitlab仓库
4.配置jenkins job任务
1.jenkins需要安装插件 gitlab plugins
2.jenkins项目中gitlab项目地址
lb 10.0.0.5
web01 10.0.0.7
web02 10.0.0.8
5.搭建一套小的集群 实现手动的代码上线
1.配置负载均衡
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_html.oldxu.com.conf
upstream html {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name html.oldxu.com;
location / {
proxy_pass http://html;
proxy_set_header Host $http_host;
}
}
[root@lb01 ~]# nginx -t
[root@lb01 ~]# systemctl restart nginx
2.配置后端webserver(所有的web集群)
[root@web01 ~]# /etc/nginx/conf.d/html.oldxu.com.conf
server {
listen 80;
server_name html.oldxu.com;
root /code/web;
location / {
index index.html;
}
}
[root@web01 ~]# mkdir /code/web -p
[root@web01 ~]# echo "web01..." > /code/web/index.html
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl restart nginx
3.克隆代码
[root@web01 ~]# git clone git@gitlab.oldxu.com:boy/monitor.git
4.将代码scp至web集群
[root@web01 ~]# for i in 7 8 ;do scp -r monitor/* root@10.0.0.${i}:/code/web/ ;done
6.jenkins来实现代码的上线
脚本:
1.进入对应的目录
2.打包
3.scp推送
7.jenkins调整上线的脚本实现tag方式上线
8.jenkins来实现代码的回退
9.jenkins实现回退
10.jenkins调git tag 防止重复构建?
十五、jenkins实现java项目自动化上线?
什么算Java项目? java工具编写的代码
源码包 IDE编写
jar 源码包需要编译,代码依赖一些jar包
只用来被依赖的
可独立运行的
war 可部署
十六、搭建一套java的集群?
1.在web集群上安装tomcat
[root@web01 ~]# yum install java -y
[root@web01 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.24/bin/apache-tomcat-9.0.24.tar.gz
[root@web01 ~]# mkdir /soft
[root@web01 ~]# tar xf apache-tomcat-9.0.24.tar.gz -C /soft/
[root@web01 ~]# ln -s /soft/apache-tomcat-9.0.24/ /soft/tomcat
[root@web01 ~]# /soft/tomcat/bin/startup.sh
2.配置nginx+tomcat
[root@web01 conf.d]# cat tomcat.oldxu.com.conf
server {
listen 80;
server_name tomcat.oldxu.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
[root@web01 conf.d]# systemctl restart nginx
3.接入负载均衡
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_tomcat.oldxu.com.conf
upstream java {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name tomcat.oldxu.com;
location / {
proxy_pass http://java;
proxy_set_header Host $http_host;
}
}
[root@web01 conf.d]# systemctl restart nginx
4.实现java项目手动上线?
1.编写java代码
2.将java项目推送至gitlab服务器
3.手动拉取源代码
4.对源代码进行编译 (maven) war包
1.配置maven使用国内的仓库 在 </mirros> 上面配置即可
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
2. mvn package 打包
5.通过scp方式将war推送至web集群
6.重启tomcat服务
十七、jenkins实现自动化上线?
1.需要新建一个maven的项目? Maven Integration plugin
2.jenkins抓取gitlab上的java源代码
3.jenkins调maven进行编译(构建)
告诉jenkins jdk的家目录
告诉jenkins maven家目录
4.jenkins调shell实现tag上线
5.jenkins调shell实现tag回退
十八、手动实现cms项目部署?
1.开发项目
2.项目推送至gitlab
3.手动拉取cms项目代码
4.导入数据库的sql语句
5.修改数据库的连接信息
6.使用maven进行编译
7.拷贝至web集群服务器
8.重启tomcat
十九、jenkins实现cms项目部署?
1.jenkins自动拉取cms项目代码
2.jenkins配置构建前操作 --->将数据库的配置文件拷贝至源码中
3.jenkins调用maven进行编译
4.jenkins调用shell,推送war包至web集群、重启tomcat
5.用户测试访问