CI持续集成

一、环境准备

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
image.png

三、持续集成练习题

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.用户测试访问
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,475评论 4 372
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,744评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,101评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,732评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,141评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,049评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,188评论 2 320
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,965评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,716评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,867评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,341评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,663评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,376评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,200评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,990评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,179评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,979评论 2 279