案例1:GitLab服务器搭建
使用rpm包本地部署GitLab服务器
#确认GitLab主机硬件配置
[root@GitLab ~]# free -m
total used free shared buff/cache available
Mem: 3896 113 3691 8 90 3615
Swap: 0 0 0
[root@GitLab ~]#
#安装依赖包
[root@GitLab ~]# yum clean all; yum repolist -v
...
Total packages: 8,265
[root@GitLab ~]# yum -y install policycoreutils-python-utils.noarch #安装依赖包
...
Complete!
[root@GitLab ~]#
#安装GitLab软件包
[root@GitLab ~]# ls
gitlab-ce-12.4.6-ce.0.el7.x86_64.rpm
[root@GitLab ~]# rpm -ivh --nodeps \
> --force gitlab-ce-12.4.6-ce.0.el7.x86_64.rpm #强制忽略依赖安装
...
[root@GitLab ~]# rpm -qa | grep gitlab
gitlab-ce-12.4.6-ce.0.el7.x86_64
[root@GitLab ~]#
#重载GitLab配置
[root@GitLab ~]# gitlab-ctl reconfigure
...
Running handlers:
Running handlers complete
Chef Client finished, 527/1423 resources updated in 02 minutes 05 seconds
gitlab Reconfigured!
[root@GitLab ~]#
#重启GitLab相关服务
[root@GitLab ~]# gitlab-ctl restart
ok: run: alertmanager: (pid 1975) 0s //报警服务
ok: run: gitaly: (pid 1986) 1s //Git后台服务
ok: run: gitlab-exporter: (pid 2014) 0s //Prometheus数据采集器
ok: run: gitlab-workhorse: (pid 2020) 1s //反向代理服务器
ok: run: grafana: (pid 2117) 0s //数据可视化服务
ok: run: logrotate: (pid 2129) 0s //日志文件管理服务
ok: run: nginx: (pid 2135) 1s //静态WEB服务
ok: run: node-exporter: (pid 2142) 0s //Prometheus数据采集器
ok: run: postgres-exporter: (pid 2148) 1s //Prometheus数据采集器
ok: run: postgresql: (pid 2159) 0s //数据库服务
ok: run: prometheus: (pid 2168) 0s //Prometheus监控服务
ok: run: redis: (pid 2178) 1s //缓存数据库服务
ok: run: redis-exporter: (pid 2183) 0s //Prometheus数据采集器
ok: run: sidekiq: (pid 2192) 0s //异步执行队列服务
ok: run: unicorn: (pid 2203) 0s //Rails托管WEB服务
[root@GitLab ~]#
案例2:GitLab使用
GitLab初始化
#GitLab主机确认80端口被监听
[root@GitLab ~]# ss -anptul | grep :80
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=11166,fd=7),("nginx",pid=11165,fd=7),("nginx",pid=11164,fd=7))
[root@GitLab ~]#
#浏览器访问: http://192.168.88.20/
GitLab组管理
GitLab项目管理
案例3:代码托管
关联Programer主机myproject仓库与GitLab服务器上myproject项目
#参考提示命令"推送已有Git仓库部分"
[root@Programer ~]# cd myproject/
[root@Programer myproject]# git remote -v #查看远程仓库关联信息
[root@Programer myproject]# git remote add origin http://192.168.88.20/devops/myproject.git #关联远程项目
[root@Programer myproject]# git remote -v #查看远程想看关联信息
origin http://192.168.88.20/devops/myproject.git (fetch)
origin http://192.168.88.20/devops/myproject.git (push)
[root@Programer myproject]# git push -u origin --all #推送本地仓库所有分支
Username for 'http://192.168.88.20': mark #用户名
Password for 'http://mark@192.168.88.20': #密码
枚举对象中: 29, 完成.
对象计数中: 100% (29/29), 完成.
使用 2 个线程进行压缩
压缩对象中: 100% (19/19), 完成.
写入对象中: 100% (29/29), 2.21 KiB | 2.21 MiB/s, 完成.
总共 29(差异 5),复用 0(差异 0),包复用 0
remote:
remote: To create a merge request for feature, visit:
remote: http://gitlab.example.com/devops/myproject/merge_requests/new?merge_request%5Bsource_branch%5D=feature
remote:
remote: To create a merge request for hotfix, visit:
remote: http://gitlab.example.com/devops/myproject/merge_requests/new?merge_request%5Bsource_branch%5D=hotfix
remote:
To http://192.168.88.20/devops/myproject.git
* [new branch] feature -> feature
* [new branch] hotfix -> hotfix
* [new branch] master -> master
分支 'feature' 设置为跟踪来自 'origin' 的远程分支 'feature'。
分支 'hotfix' 设置为跟踪来自 'origin' 的远程分支 'hotfix'。
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
[root@Programer myproject]# git push -u origin --tags #推送本地仓库所有标签
Username for 'http://192.168.88.20': mark #用户名
Password for 'http://mark@192.168.88.20': #密码
总共 0(差异 0),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/myproject.git
* [new tag] v1 -> v1
[root@Programer myproject]#
#登录GitLab项目管理页面查看推送情况
HTTP方式免密推送
#每次推送都需要认证,可以设置免密推送
#store:永久存储
#cache:默认缓存15分钟,期间无需认证,可通过cache --timeout=3600设置超时时间
#git remote add origin http://name:pass@192.168.88.20/devops/myproject.git
[root@Programer myproject]# git config --global credential.helper store #持久保存
[root@Programer myproject]# git push #推送代码(本次需要认证)
Username for 'http://192.168.88.20': mark #用户名
Password for 'http://mark@192.168.88.20': #密码
Everything up-to-date
[root@Programer myproject]# git push #再次推送测试免密
Everything up-to-date
[root@Programer myproject]# git config --list
user.name=mark
user.email=mark@tedu.cn
init.defaultbranch=master
credential.helper=store
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=http://192.168.88.20/devops/myproject.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.feature.remote=origin
branch.feature.merge=refs/heads/feature
branch.hotfix.remote=origin
branch.hotfix.merge=refs/heads/hotfix
branch.master.remote=origin
branch.master.merge=refs/heads/master
[root@Programer myproject]# cat ~/.git-credentials
http://mark:1234.com@192.168.88.20
[root@Programer myproject]#
HIS项目代码托管
- HIS项目代码准备
#Programer主机准备HIS代码
[root@Programer ~]# ls HIS.zip
HIS.zip
[root@Programer ~]# unzip HIS.zip #解压项目代码压缩包
[root@Programer ~]# ls HIS
HIS-BACKEND #HIS项目后端代码,SpringBoot框架编写
HIS-CONFIG #HIS项目后端程序运行配置文件
HIS-FONTEND #HIS项目前端代码(已编译)
HIS-FONTEND-DEPENDENCY #HIS项目前端代码编译依赖库(npm库)
HIS-FONTEND-SOURCECODE #HIS项目前端代码(未编译,VUE框架编写)
HIS-SQL #HIS项目数据库SQL文件
[root@Programer ~]#
- HIS后端代码托管
#关联GitLab服务器HIS-BACKEND项目与Programer主机HIS-BACKEND代码
[root@Programer ~]# cd HIS/HIS-BACKEND/
[root@Programer HIS-BACKEND]# git init #初始化仓库
已初始化空的 Git 仓库于 /root/HIS/HIS-BACKEND/.git/
[root@Programer HIS-BACKEND]# git remote add origin http://192.168.88.20/devops/HIS-BACKEND.git #关联本地与远程
[root@Programer HIS-BACKEND]# git remote -v
origin http://192.168.88.20/devops/HIS-BACKEND.git (fetch)
origin http://192.168.88.20/devops/HIS-BACKEND.git (push)
[root@Programer HIS-BACKEND]# git add ./ #添加代码到暂存区
[root@Programer HIS-BACKEND]# git commit -m "Init Backend Code" #提交本地版本库
[root@Programer HIS-BACKEND]# git tag v1 #创建v1标签
[root@Programer HIS-BACKEND]# git push -u origin --all #推送本地所有分支
枚举对象中: 518, 完成.
对象计数中: 100% (518/518), 完成.
使用 2 个线程进行压缩
压缩对象中: 100% (464/464), 完成.
写入对象中: 100% (518/518), 272.81 KiB | 5.57 MiB/s, 完成.
总共 518(差异 256),复用 0(差异 0),包复用 0
remote: Resolving deltas: 100% (256/256), done.
To http://192.168.88.20/devops/HIS-BACKEND.git
* [new branch] master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
[root@Programer HIS-BACKEND]# git push -u origin --tags #推送本地所有标签
总共 0(差异 0),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/HIS-BACKEND.git
* [new tag] v1 -> v1
[root@Programer HIS-BACKEND]#
- HIS前端代码托管
#关联GitLab服务器HIS-FONTEND项目与Programer主机HIS-FONTEND代码
[root@Programer HIS-BACKEND]# cd
[root@Programer ~]# cd HIS/HIS-FONTEND
[root@Programer HIS-FONTEND]# git init #初始化仓库
已初始化空的 Git 仓库于 /root/HIS/HIS-FONTEND/.git/
[root@Programer HIS-FONTEND]# git remote add origin http://192.168.88.20/devops/HIS-FONTEND.git #关联本地与远程
[root@Programer HIS-FONTEND]# git remote -v
origin http://192.168.88.20/devops/HIS-FONTEND.git (fetch)
origin http://192.168.88.20/devops/HIS-FONTEND.git (push)
[root@Programer HIS-FONTEND]# git add ./ #添加文件到暂存区
[root@Programer HIS-FONTEND]# git commit -m "Init Fontend Code" #提交到本地版本库
[root@Programer HIS-FONTEND]# git push -u origin --all #推送所有分支
枚举对象中: 81, 完成.
对象计数中: 100% (81/81), 完成.
使用 2 个线程进行压缩
压缩对象中: 100% (81/81), 完成.
写入对象中: 100% (81/81), 2.91 MiB | 8.10 MiB/s, 完成.
总共 81(差异 16),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/HIS-FONTEND.git
* [new branch] master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
[root@Programer HIS-FONTEND]# git push -u origin --tags #推送所有标签
总共 0(差异 0),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/HIS-FONTEND.git
* [new tag] v1 -> v1
[root@Programer HIS-FONTEND]#
案例4:Jenkins部署
Jenkins安装部署
#Jenkins主机安装OpenJDK环境
[root@Jenkins ~]# yum clean all; yum repolist -v
...
Total packages: 8,265
[root@Jenkins ~]# yum -y install java-11-openjdk-devel.x86_64 #安装OpenJDK11
[root@Jenkins ~]# ln -s /usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el8_5.x86_64/ /usr/lib/jvm/jdk #创建JDK环境软链接
[root@Jenkins ~]# vim /etc/bashrc
[root@Jenkins ~]# tail -2 /etc/bashrc #声明JAVA_HOME环境变量
export JAVA_HOME="/usr/lib/jvm/jdk/"
export PATH=${JAVA_HOME}/bin/:$PATH
[root@Jenkins ~]# source /etc/bashrc #刷新当前bash环境
[root@Jenkins ~]# echo ${JAVA_HOME} #查看JAVA_HOME变量
/usr/lib/jvm/jdk/
[root@Jenkins ~]# which java
/usr/lib/jvm/jdk/bin/java
[root@Jenkins ~]# java -version
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.15+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.15+9-LTS, mixed mode, sharing)
[root@Jenkins ~]#
#安装工具相关软件
[root@Jenkins ~]# yum -y install git postfix #Git用于拉取代码、postfix用于发邮件
#安装Jenkins
[root@Jenkins ~]# ls jenkins-2.361.4-1.1.noarch.rpm
jenkins-2.361.4-1.1.noarch.rpm
[root@Jenkins ~]# yum -y localinstall ./jenkins-2.361.4-1.1.noarch.rpm #安装Jenkins
#启动Jenkins服务
[root@Jenkins ~]# systemctl enable jenkins.service #设置Jenkins开机自启动
[root@Jenkins ~]# systemctl start jenkins.service #启动Jenkins服务器
[root@Jenkins ~]# ss -antpul | grep java #确认8080端口被监听
tcp LISTEN 0 50 *:8080 *:* users:(("java",pid=13602,fd=8))
[root@Jenkins ~]#
Jenkins初始化
#获取Jenkins初始密码
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
1aaf609acf3843a8aaf17e8b1f22e8ea
[root@Jenkins ~]#
#浏览器访问: http://192.168.88.30:8080/
案例5:离线部署Jenkins插件
#离线部署Jenkins插件
[root@Jenkins ~]# ls /var/lib/jenkins/plugins/ #空目录,没有任何插件
[root@Jenkins ~]# ls jenkins_plugins.tar.gz
jenkins_plugins.tar.gz
[root@Jenkins ~]# tar -xPpf jenkins_plugins.tar.gz -C / #解压Jenkins插件,保留文件归属
[root@Jenkins ~]# ls -l /var/lib/jenkins/plugins/ #确认该目录下文件归属
[root@Jenkins ~]# systemctl restart jenkins.service #重启Jenkins加载插件
[root@Jenkins ~]# ss -antpul | grep java
tcp LISTEN 0 50 *:8080 *:* users:(("java",pid=13917,fd=8))
[root@Jenkins ~]#
1677121682106
案例6:Jenkins工程构建
#确认代码拉取情况
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/ #Jenkins工作目录
HIS-FONTEND
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/ #确认HIS-FONTEND代码拉取
favicon.ico index.html static
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/* #清理Jenkins工作目录
[root@Jenkins ~]#
#确认代码拉取情况
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/ #Jenkins工作目录
HIS-FONTEND
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/ #确认拉取到子目录
HIS-FONTEND-v1
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/HIS-FONTEND-v1/
favicon.ico index.html static
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/* #清理Jenkins工作目录
[root@Jenkins ~]#
#填写到Jenkins中HIS-FONTEND工程的构建过程shell语句
rm -rf .git #删除拉取到Jenkins本地目录中的版本库
tar -zcf fontend.tar.gz * #对代码进行打包操作
#确认HIS-FONTEND构建结果
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/
HIS-FONTEND
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-FONTEND/ #目录下有代码tar包
favicon.ico fontend.tar.gz index.html static
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/* #清理Jenkins工作目录
[root@Jenkins ~]#