1、术语介绍
1.1、集成、交付、布署 <->CI、CD、CD全称
持续集成(Continuous Integration) 持续交付(Continuous Delivery) 持续布署(Continuous Deployment)
1.2、DevOps介绍
让开发人员可以持续集成,运维人员可以持续交付和持续部署.让整个开发过程自动部署,上线。 Development -> 开发 Operation -> 运维
1.3、DevOps流程图
2、git
2.1、git环境准备
2.1.1、Linux
yum install git -y
2.1.2、MacOS
brew install git
2.1.3、Ubuntu/Debian
apt install git -y
2.1.4、Windows
https://git-scm.com/downloads
2.2、git基本操作
2.2.1、创建演示目录
mkdir ygbhTest
2.2.2、初始化git
git init
2.2.3、编写测试的代码
cat > index.html << 'EOF' test 50% EOF
2.2.4、查看版本的状态
git status
2.2.5、将编写好的代码加入版本控制
git add index.html
2.2.6、配置git用户信息
git config --global user.email "[email protected]" git config --global user.name "Bort" git config --global color.ui true git config --global --list
2.2.7、提交至本地仓库
git commit -m "index.html 50%"
2.2.8、继续更新编写的代码
cat >> index.html << 'EOF' test 100% EOF
2.2.9、将最新的代码提交至仓库
按如下流程操作: 2.2.5、将编写好的代码加入版本控制 2.2.7、提交至本地仓库 git commit -m "index.html 100%"
2.2.10、查询版本id
# 支持查看所有的提交记录 git reflog 847a3c5 HEAD@{0}: commit: index.html 100% 24a707f HEAD@{1}: commit (initial): index.html 50% # 只支持当前版本以前的记录 git log
2.2.11、回滚到指定的版本
git reset --hard 24a707f7
2.3、Git四种空间模式
2.3.1、空间模式流程图【命令总结】
图不漂亮,不要见怪。
工作区:即是代码的实际存放的位置。分为:已经版本控制的文件和新增或修改文件 暂存区:使用git add增加,称为暂存区 本地仓库:在本地使用git commit 远程仓库:使用git pull推至github、gitee、gitlab等服务上存放的
2.3.2、git空间切换命令总结
git init # 初始化本地仓库目录 git config --global # 邮箱,用户名,颜色 git add # 提交数据到缓冲区(暂存区) git add .(所有文件)或 git add 文件 git commit # 把暂存区的数据提交到本地仓库 git commit -m"标记/说明" git status # 显示工作空间的状态 git reset # 回滚 git reset HEAD # 暂存区-->工作空间(被修改的状态) git reset --soft 版本号 # 把指定的版本本地仓库数据内容下载到暂存区 git reset --mix 版本号 # 把本地仓库-->工作空间(被修改的状态) git reset --hard 版本号 # 把本地仓库指定版本信息数据下载到工作目录中 git checkout # 文件下载到工作空间并可以使用git checkout .或git checkout 文件
git show # 查看当前的版本
2.4、git分支的管理
2.4.1、分支整体的流程图
2.4.2、分支命令的总结
git branch # 查看分支 git branch name # 创建分支 git branch -d name # 删除分支 git checkout name # 切换分支 git merge name # 合并分支 git checkout -b name # 切换分支并且创建分支
git push origin [master|branch_name] # 远程推送指定的分支
git pull origin [master|branch_name] # 远程拉取指定的分支
2.5、远程仓库Gitee推送和下载
2.5.1、远程创建仓库
2.5.2、Git 全局设置
git config --global user.name "xxxxx" git config --global user.email "[email protected]"
2.5.3、创建公钥和密钥并且复到到gitee
# 创建密钥公钥 ssh-keygen -t ed25519 -C "[email protected]" # 复制公钥到gitee上 cat /root/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILXvYeBS5kjB+4rP34QmC7PVGEdJ4fEhIAJEhVe/6H/u [email protected]
2.5.4、创建git仓库,上传至远程仓库
mkdir test-submission cd test-submission git init touch README.md git add README.md git commit -m "first commit" git remote add origin [email protected]:xxx/test-submission.git git push -u origin "master"
2.5.5、已有git仓库,上传至远程仓库
cd existing_git_repo git remote add origin [email protected]:xxx/test-submission.git git push -u origin "master"
2.5.6、查看是否推送完成
2.6、git标签
2.6.1、当前版本打标签
git tag -a 'v2.0' -m "开发完成的版本"
2.6.2、指定版本打标签
git tag -a "v1.0" 5e14c27 -m "这个基础功能v1.0"
2.6.3、查看标签
git tag
2.6.4、标签推送至远程仓库
# 推送所有的标签 git push origin --tags # 推送指定的标签 git push origin "v1.0"
2.7、gitignore
# 在本地仓库中创建一个gitignore文件,在文件里面写忽略的文件名或模糊匹配 例如: cat gitignore # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/
3、Gitlab
3.1、安装
3.1.1、安装依赖包
yum install curl wget openssh-server postfix -y
3.1.2、下载gitlab安装包
# 地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.9.2-ce.0.el7.x86_64.rpm
3.1.3、安装gitlab
yum localinstall gitlab-ce-15.9.2-ce.0.el7.x86_64.rpm -y
3.1.4、首次需知-配置文件位置
/etc/gitlab/gitlab.rb
3.1.5、首次需知-重新加载服务
gitlab-ctl reconfigure
3.1.6、首次需知-配置访问的URL地址
# 修改为自己的域名 [root@gitlab ~]# vi /etc/gitlab/gitlab.rb external_url 'http://gitlab.test.com'
3.2、配置Gitlab发送的邮箱
[root@gitlab ~]# vi /etc/gitlab/gitlab.rb
# 设置发送时,显示的内容 gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = '[email protected]' gitlab_rails['gitlab_email_display_name'] = 'gitlab-email' # 配置邮件信息,这里使用163邮箱 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.126.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "[email protected]" gitlab_rails['smtp_password'] = "?????" gitlab_rails['smtp_domain'] = "126.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['smtp_pool'] = true
3.3、关闭不常用的组件
3.3.1、优化如下组件
# 优化如下: [root@gitlab ~]# vim /etc/gitlab/gitlab.rb prometheus['enable'] = false prometheus['monitor_kubernetes'] = false alertmanager['enable'] = false node_exporter['enable'] = false redis_exporter['enable'] = false postgres_exporter['enable'] = false gitlab_exporter['enable'] = false prometheus_monitoring['enable'] = false grafana['enable'] = false
3.3.2、启动加载gitlab服务
[root@gitlab ~]# gitlab-ctl reconfigure
3.3.3、记得下首次登陆的帐号和密码
Notes: Default admin account has been configured with following details: Username: root Password: You didn't opt-in to print initial root password to STDOUT. Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours. [root@gitlab ~]# cat /etc/gitlab/initial_root_password Password: 1QDCoostpH1CpGp+Z9ZkPCMncCGfcalbgCtUTC5rssY=
3.4、Gitlab服务管理
3.4.1、重新加载服务
gitlab-cli reconfigure
3.4.2、查询状态服务
gitlab-cli status
3.4.3、启动服务
gitlab-cli start
3.4.4、停止服务
gitlab-cli stop
3.5、验证配置的邮箱是否正常使用
3.5.1、验证的方法
# 测试邮箱是否可以正常发送 [root@gitlab ~]# gitlab-rails console irb(main):007:0> Notify.test_email('[email protected]','gitlab-test','测试').deliver_now
3.5.2、验证成功
3.6、Gitlab网页版的使用
3.6.1、客户端配置hosts
$ vim /c/Windows/System32/drivers/etc/hosts 192.168.10.20 test.com
3.6.2、网页版登陆成功
3.6.3、创建群组
3.6.4、创建项目
3.6.5、创建用户测试
# 开发组 dev_test1 角色:Developer # 只能修改子分支,不能提交主分支main dev_test2 角色:Maintainer # 可以提交至主分支main # 运维组 ops_test1
3.7、Gitlab备份与恢复
3.7.1、Gitlab备份前的配置
[root@gitlab ~]# vi /etc/gitlab/gitlab.rb # 备份的配置 gitlab_rails['manage_backup_path'] = true gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" gitlab_rails['backup_gitaly_backup_path'] = "/opt/gitlab/embedded/bin/gitaly-backup" gitlab_rails['backup_archive_permissions'] = 0644 gitlab_rails['backup_keep_time'] = 604800 # 配置好,重新加载服务 gitlab-ctl reconfigure
3.7.2、Gitlab备份
一、程序的备份 # 12.2+ 备份方法 gitlab-backup create # 12.1- 备份方法 gitlab-rake gitlab:backup:create # 备份完成的目录 [root@gitlab ~]# ll /var/opt/gitlab/backups/ total 440 -rw-r--r-- 1 git git 450560 Mar 7 15:52 1678175541_2023_03_07_15.9.2_gitlab_backup.tar 二、配置和帐号信息的备份 # 手动备份如下:两个文件 gitlab.rb # 配置文件 gitlab-secrets.json # 帐号密码文件 # 建议整个配置文件都打包 [root@gitlab ~]# tar cvf gitlab.2023.3.7.info.tar.gz /etc/gitlab
3.7.3、Gitlab恢复
# 停止相关的服务 gitlab-ctl stop puma gitlab-ctl stop sidekiq # GitLab 12.2+ 恢复方法 gitlab-backup restore BACKUP=1678175541_2023_03_07_15.9.2 # GitLab 12.1- 恢复方法 gitlab-rake gitlab:backup:restore BACKUP=11493107454_2018_04_25_10.6.4-ce # 启动相关的服务 gitlab-ctl start puma gitlab-ctl start sidekiq gitlab-ctl reconfigure gitlab-ctl restart
3.8、升级与迁移注意事项
3.8.1、升级的注意事项
升级方式:如果是yum安装的话,需要一个版本一个版本更新到最新的。 例如:12.0.Z -> 13.0.a -> 13.0.Z -> 14.0.a -> 15.0.a
3.8.2、迁移的注意事项
迁移方式:如果是yum安装的话,需要一个版本一个版本更新到最新的。 例如:12.0.Z -> 13.0.a -> 13.0.Z -> 14.0.a -> 15.0.a 升级到最新的之后,再备份,迁移
3.9、gitlab修改(重置)root用户密码
[root@gitlab ~]# gitlab-rails console -e production # 查询用户 user = User.where(id: 1).first # user = User.find_by(email: ‘[email protected]‘) user.password = 'aiai1234' user.password_confirmation = 'aiai1234' user.save!
4、Jenkins
4.1、安装
4.1.1、安装方式
1、rpm包 yum安装 【演示使用该方法】 2、war包 tomcat上运行 3、jar包 java -jar xxx.jar
4.1.2、安装JDK
# 查询jdk版本 yum --showduplicates list java* # 安装对应的jdk版本,此版本需要安装jdk11 yum install java-11-openjdk-devel -y
4.1.3、下载jenkins
# 清华大学,yum源查询地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/ # 下载jenkins软件包 wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.375.3-1.1.noarch.rpm
4.1.4、开启jenkins服务
# 如果系统安装多个jdk版的话,需要选择对应的jdk alternatives --config java # 开启jenkins服务 systemctl enable jenkins systemctl start jenkins # 检查开启状态 [root@jenkins ~]# netstat -tunlp | grep java tcp6 0 0 :::8080 :::* LISTEN 4058/java
4.2、Jenkins目录介绍
[root@jenkins ~]# rpm -ql jenkins /etc/init.d/jenkins # jenkins启动和停止脚本 /etc/logrotate.d/jenkins # jenkins日志切割配置文件 /etc/sysconfig/jenkins # jenkins配置文件 /usr/bin/jenkins # jenkins启动脚本 /usr/lib/systemd/system/jenkins.service # 服务管理 /usr/sbin/rcjenkins # /etc/init.d/jenkins 的软链接 /usr/share/java/jenkins.war /usr/share/jenkins /usr/share/jenkins/migrate # 迁移目录 /var/cache/jenkins # 缓存目录 /var/lib/jenkins # 主要目录 /var/log/jenkins # 日志目录
4.3、浏览器访问jenkins
4.3.1、配置hosts
192.168.10.21 jenkins.test.com
4.3.2、访问jenkins
http://jenkins.test.com:8080/
# 登陆密码 [root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword cec8b4bc0fdb4002912b57a1106c6e78
4.3.3、跳过插件安装,直接关闭对话框
因为国外网站下载速度慢,后面配置国内源,下载稳定些
4.4、插件安装
4.4.1、插件安装方式
第一种:到jenkins网页版手机点击一个一个下载。 第二种:下载离线插件安装,插件位置:/var/lib/jenkins/plugins/ 第三种:到安装好插件的服务器上拷贝插件整个目录,替换到新的jenkins插件目录上
4.4.2、安装显示中文的插件
安装完成,需要重启jenkins服务才生效
4.5、jenkins第一个shell构建任务
4.5.1、创建任务
4.5.2、增加选项参数
4.5.3、构建步骤选择-执行shell
#!/bin/bash # author: suk if [ $env =="master" ];then echo "生产环境" elif [ $env =="dev" ];then echo "开发环境" else echo "测试环境" fi
4.5.4、构建项目
4.5.5、构建结果
4.5.6、配置构建限额
5、Jenkins与Gitlab集成
5.1、Gitlab准备一个仓库项目
5.1.1、本地项目
cat index.html <h1>项目1<h1> <p>完美的项目</p>
5.1.2、演示的项目,关闭验证master上传的权限
5.1.3、给仓库配置访问的公钥
ssh-keygen cat /c/Users/Administrator/.ssh/id_rsa.pub
5.1.4、本地项目上传至gitlab
cd existing_repo git remote add origin [email protected]:ops/conf-center.git git branch -M main git push -uf origin main # 查看远程origin地址 git remote -v # 删除远程origin git remote remove origin
5.1.5、上传完成
5.2、配置jenkins从gitlab下载代码
5.2.1、jenkins安装所需要的插件
Git # 集成Git GitLab # 允许Gitlab触发jenkins构建并在Gitlab中显示 Credentials # 存储认证的凭据 GitLab Authentication # 身份验证插件 Generic Webhook Trigger # 自动触发jenkins构建项目
5.2.2、在Jenkins服务器上创建ssh公钥和密钥
ssh-keygen # 将公钥复制到Gitlab仓库的公钥管理 # 将密钥复制到jenkins凭证上
5.2.3、公钥给Gitlab仓库
[root@jenkins ~]# cat .ssh/id_rsa.pub
5.2.4、密钥给Jenkins
[root@jenkins ~]# cat .ssh/id_rsa
5.2.5、配置hosts
192.168.10.20 gitlab.test.com
5.2.6、jenkins服务器需安装git
yum install git -y
5.2.7、关闭jenkins主机ssh校验
系统管理 -> 全局安全配置 ->Git Host Key Verification Configuration -> No verification
5.2.8、Jenkins配置gitlab下载相关
5.2.9、保存构建
5.2.9、查看服务器下载代码位置
[root@jenkins ~]# cat /var/lib/jenkins/workspace/gitlab_jenkins/index.html <h1>项目1<h1>
5.3、jenkins与Gitlab集成自动发布代码
5.3.1、准备主机
nginx_lsb # 192.168.10.23 nginx01 # 192.168.10.23 nginx02 # 192.168.10.23
5.3.2、nginx_lsb 配置
[root@nginx_lsb ~]# cat /usr/local/nginx-1.12.2/conf.d/web_lsb.conf upstream html { server 192.168.10.24:80; server 192.168.10.25:80; } server { listen 80; server_name html.test.com; location / { proxy_pass http://html; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; } }
5.3.3、jenkins主机分发公钥用于免钥登陆
nginx01 ssh-copy-id [email protected] nginx02 ssh-copy-id [email protected]
5.3.4、需要jenkins用户给布署端设置免密登陆
# 修改支持bash [root@jenkins ~]# vi /etc/passwd jenkins:x:998:996:Jenkins Automation Server:/var/lib/jenkins:/bin/bash [root@jenkins ~]# su - jenkins ssh-keygen ssh-copy-id [email protected] ssh-copy-id [email protected]
5.3.5、编写一键布署脚本
[root@jenkins ~]# cat /opt/script/test_deploy.sh #!/bin/bash # author:suk # 2023-3-8 #pro_dir=$WORKSPACE/$JOB_NAME pro_dir=/var/lib/jenkins/workspace/gitlab_jenkins pkg_name=gitlab_jenkins_`date +%F-%H-%M` upload_dir=/opt nginx_html=/usr/local/nginx-1.12.2/html # 打包文件 make_pkg(){ cd ${pro_dir} && tar -Pczf ${pkg_name}.tar.gz . --exclude '*.git' --exclude '*.tar.gz' } scp_pkg(){ for ip in 24 25 do scp ${pro_dir}/${pkg_name}.tar.gz [email protected].${ip}:/opt/ done } deploy_pkg(){ for ip in 24 25 do ssh [email protected].${ip} "mkdir ${upload_dir}/${pkg_name} &&\ cd ${upload_dir}/${pkg_name} &&\ tar -xf ../${pkg_name}.tar.gz .&&\ rm -rf ${nginx_html} &&\ ln -s ${upload_dir}/${pkg_name} ${nginx_html}" done } main(){ # 打包 make_pkg # 发送安装包 scp_pkg # 布署安装包 deploy_pkg } main
5.3.6、配置到jenkins运行脚本
5.3.7、构建结果
5.3.8、访问SLB测试
[root@jenkins ~]# curl 192.168.10.23 <h1>项目1<h1> <p>完美的项目</p>[
5.3.9、修改代码,将仓库的代码重新拉取,jenkins重新构建,重新访问SLB服务看看有没有更新
5.4、jenkins与Gitlab持续集成、发布
5.4.1、jenkins开启Hook链接
# 记录下链接地址:http://jenkins.test.com:8080/project/gitlab_jenkins
5.4.2、jenkins生成密钥
# 点击高级,创建密钥,记录下密钥:7489b04b84a00dad61af66ef647aee61
5.4.3、jenkins配置完成-点击保存
5.4.4、gitlab仓库配置hook URL
5.4.5、配置gitlab的hosts配置文件
192.168.10.21 jenkins.test.com
5.4.6、配置Gitlab允许向哪台机器发送WebHook
5.4.7、测试推送是否成功
5.4.8、查看jenkins是否构建成功
5.5、Jenkins gitlab tags选择发布
5.5.1、jenkins git 插件安装
Git Parameter
5.5.2、jenkins可选择git分支或标签的配置
5.5.3、给项目打标签
# 原来版本打标签 1.0 git tag -a 'v1.0_release' -m '1.0' git push origin main --tags # 增加一个test.html,打标签 2.0 git tag -a 'v2.0_release' -m 'v2.0' git push origin dev --tags
5.5.4、查看构建的选择
5.5.5、把打包名字增加标签名
[root@jenkins script]# cat tags_deploy.sh #!/bin/bash # author:suk # 2023-3-8 #pro_dir=$WORKSPACE/$JOB_NAME pro_dir=/var/lib/jenkins/workspace/gitlab_jenkins pkg_name=gitlab_jenkins_${tag}_`date +%F-%H-%M` upload_dir=/opt nginx_html=/usr/local/nginx-1.12.2/html # 打包文件 make_pkg(){ cd ${pro_dir} && tar -Pczf ${pkg_name}.tar.gz . --exclude '*.git' --exclude '*.tar.gz' } scp_pkg(){ for ip in 24 25 do scp ${pro_dir}/${pkg_name}.tar.gz [email protected].${ip}:/opt/ done } deploy_pkg(){ for ip in 24 25 do ssh [email protected].${ip} "mkdir ${upload_dir}/${pkg_name} &&\ cd ${upload_dir}/${pkg_name} &&\ tar -xf ../${pkg_name}.tar.gz .&&\ rm -rf ${nginx_html} &&\ ln -s ${upload_dir}/${pkg_name} ${nginx_html}" done } main(){ # 打包 make_pkg # 发送安装包 scp_pkg # 布署安装包 deploy_pkg } maintag_deplay.sh
5.5.6、构建结果
[root@jenkins script]# ll /var/lib/jenkins/workspace/gitlab_jenkins total 3 gitlab_jenkins_v2.0_release_2023-03-10-12-06.tar.gz -rw-r--r-- 1 jenkins jenkins 167 Mar 10 10:38 index.html -rw-r--r-- 1 jenkins jenkins 5 Mar 10 11:52 test.html
标签:git,name,--,Gitlab,gitlab,jenkins,Jenkins,布署,root From: https://www.cnblogs.com/ygbh/p/17173615.html