目录
GItlab配置邮箱
#修改配置文件
vim /etc/gitlab/gitlab.rb
#去掉注释并修改内容
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "17633164083@163.com"
gitlab_rails['smtp_password'] = "BMEOXDBBMJGWOIHT"
#这是邮箱域名(可写可不写)
#gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_pool'] = true
#手动添加
gitlab_rails['gitlab_email_from'] = '17633164083@163.com'
#重载gitlab
gitlab-ctl reconfigure
#登录控制台测试
gitlab-rails console
#往邮箱发送邮件
Notify.test_email('17633164083@163.com','test','lyh').deliver_now
绑定邮箱
创建群组
Gitlab中的组和项目有三种访问权限:Private、Internal、Public
Private: 只有组成员才能看到
Internal: 只要登录的用户就能看到
Public: 所有人都能看到
开源项目和组设置的是Internal
群组名称随便起,但最好是英文,不然访问的时候群组URL会变成别的
随便选,最后点击创建群组
添加人员
用户名是登录时候的用户名,访问级别是根据这个人来定的,这里选的是管理员,改完点击创建即可。
登录这个账户
会向qq邮箱里面发送一个初始密码
点击
Click here to set your password
会让他设置密码,跟着引导走即可
改完密码也会发送一个邮件
将lyh加入到project group
角色:
Guest: 可以创建issue、发表评论,不能读写版本库
Reporter: 可以克隆代码,不能提交,QA、PM可以赋予这个权限(总监)
Developer: 可以克隆代码、开发、提交、push,RD可以赋予这个权限(开发)
Master: 可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限(项目开发头头)
Owner: 可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限(运维人员)
也可以
在这里可以设置用户最大角色,和过期时间,同时也会发送一封邮件
创建一个项目
在首页点击新建项目到下图
空白项目就是一个空文档
从模板创建就是可以选择一些已经创好的模板
导入就是将其他地方导入到gitlab
我们选择创建空文档
项目名称最好起英文名,可见界别根据具体情况而定,然后点击创建新建项目
使用说明:跟使用GitHub一样,需要注意的是没有在账号中新建ssh公钥之前,将无法通过ssh拉取或推送代码
添加文件
新建分支
创建两个分支wyb和lzz
在wyb中添加文件
这个是在其他分支看不到的
但是main是他们的主分支,在main里面新建文件,在其他子分支是看得到的
如何拉取代码
首先公司的开发肯定用的是windows系统或者Mac系统,所以需要在他们的电脑上安装一个软件叫做“Git Bash”
下载地址
https://git-scm.com/download/win
下载完之后安装
之后一直默认到下图,选择第一个
之后一直默认安装即可。装完之后桌面上就有Git bash了
Git bash是命令行
Git gui是图形化
Git bash 演示
打开Git bash输入ls 就会把你桌面上的内容
git config –global user.name “lyh”,作用是声明是谁,只需要声明1次
git config –global user.email “1684954874@qq.com”,写的是当时创用户的邮箱
这时就可以直接拉代码了,复制第二个
会弹出这个界面,这里写的用户名和密码是登录gitlab的用户名密码
确定以后,桌面上会有一个test目录,目录里的文件就是刚刚在gitlab上创建的
修改一下内容,重新上传到gitlab,再到gitlab看看数据是否更改
Git bush上传流程
工作区到暂存区是可以撤回的,一旦发送到本地仓库后,就不可以撤回了
可以看到gitlab中的内容已经修改了
Git GUI演示
source源 target是目标地址
进到里面有五个按钮,一个一个点,注意是一个一个,就OK了
linux系统的操作方法跟Git bash的操作一样
安装jenkins
首先安装jdk
#安装jdk
yum -y install java-11-openjdk
#解压
rpm -ivh jenkins-2.387.2-1.1.noarch.rpm
#修改配置文件
vim /etc/sysconfig/jenkins
...
JENKINS_USER="root" #改成root
...
#启动
/etc/init.d/jenkins start
[root@localhost ~]# /etc/init.d/jenkins start
Starting jenkins (via systemctl): [ 确定 ]
访问 jenkins服务器IP:8080
主要把汉化包安装上
之后一直默认就行了
更改插件镜像源
Manage jekins —->Manage Plugins —>Advanced在最下面的升级站点改成国内的
我用的是
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
除此之外还需要修改这个文件
cd /var/lib/jenkins/updates/
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
如果是手动安装插件,导致版本不匹配,则需要下载
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/jenkins.war
关闭jekins
然后把/usr/share/java/中的jekins.war替换掉
开启jenkins
配置jenkins使用gitlab更新代码
安装jekins插件
Manage jekins —->Manage Plugins—>Avaiable plugins
搜索要安装的插件
Gitlab、Git、Git Clinet、Gitlab Authentication、SSH agent、Publish Over SSH
Geneic Webhook Trigger 、Build Authorization Token、Build Token、Role-based Authorization Strategy
等他下完自动重启即可
配置jenkins免密拉取gatlab代码
[root@bogon ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:NDVi5sr6a7jorx9Rvs/cG7xKrk+SGMAIyVqVSd/SRds root@bogon
The key's randomart image is:
+---[RSA 2048]----+
|o. ooo +.= |
|o+. o. * + + |
|o.o + * . E |
|. . + + . |
| o + S |
| = o . |
| +.+ o o |
| ..o.O . o |
| .+++o++B.+. |
+----[SHA256]-----+'
[root@bogon ~]# cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAwAlMU1euHJwb0bbc9f0ceqjL7zTchKMkH/3AUEqZG4p6e81f
h9e0jQ5VeT7p4+zvRbN7BM8W6SlWZwuNIi/lAw/NqADdhMHZq1Q/WGzzBavvBZF4
OmGTZj++2385jRyl1V+vle2W0/g9bXM47WlKP00Rtny0D8qA5oaEXef2tTqLKqzZ
YE1fmlQyCOu6n6/CzYTJr+OOlymM06vVyl38Q7iaZIOs6vYKbC8eZv6X0N8qKtXQ
EYpHDUye1ZCtvK4QZcijsQkiVXDZdeIBz9rww2WMQ92Ks5AQtSk6Y6uAPOQU84m8
ieDEISc9W/Y3DEguEsL4KaiOquwaFzTcb2A3EwIDAQABAoIBAGyv1ocFBQIkSIp1
GLIQw2GYz3NfU7+uJfAFSicnUWiJA7G2Fu9nYkTDbBTnSrE5lGK6plGec7UbNE+1
9fb3bIJDG36OntFYdb3GPOPrJdB78xgPsSA5wZcJVRgd9ZCsOh99vH76rXbi9MFR
iVK1WNRi5jeGdNLLJhFS6O/NLZB7yNyaxokHBlULK6egYlCwVb+B5LNh3lF7v88e
1N50bK3ux0+dEyd4JNEcpZuhkeCNpESiN6S2FuBDIoF+SOlRVa/2HKQ1wr5G8Fht
Ef3bOmc3kh4o/gzQH4vZzsFkNVSFMkidlzPs2XPbokwcns7WQe7Y609QIF8ymnDw
yliGtmECgYEA/Ee+fMVEj1r6bEMcDLWPYvN7Qr4oDZmV5d9iB4w8YBuiTfjrxpKo
60jU1WvZYW6QIx9+641/gR+UBue6KTOg96NNILIw9kykpkikgcxxZJdxK88IzF4d
fKc3H/k5CJ8yTgqgzsaiU2IAaYdhTToiwx0lfeigpvKiJyAV7mef+cUCgYEAwt4o
V6pRZZLL3hpQ7AzywDOKq9+o4o7p3CkqR0poUUwzalRtq2Zw3upcldZLr6y2hUaK
EvxeghT24ij3fdRgEA32I1IzecaHd8jZ7rKD6RSAqp/gZGe8bLbyVWrlYGS5REnW
ys08vzNz3SK+opIlTVRXwUH5MVo9IMvPiXLi8vcCgYEA+yIUHrJlAGupdBIOHxyx
ougL4LHYv0kPbehD9o2EIIwBsqrDUkX2f1ld/SJCH/pm43/b4XJW5dvgiEsvBwrN
Bxb5lT2s/dHn6VvQ3yD8FA2pa9nJwV9C7S6r8lkujEWlVwi/cXdMacLZ9DL/Clh/
+EjQZJkpK2fHQTlwe4WOO50CgYAVS6Xo/qnqicJRwVp6kWet7XQIGGciay/PaYg/
RjhkOgmcYyGhC47mLYJ0tXiL+DnyEqVgMcg6OwRH7uYtEBp3Zq8xaPhLJJEFXCPE
3CliPWVaQCKLlnKXBt8wyn/Kqvc8KT2Z6BftZTgSQIvIxGPjMYZtjkInTI9FmEBT
6wQ2PQKBgQDY6nU+BVZm5wFKwFSeHQVsT7P6yZxsXzp08hYhAvKmKyhsACQVEnBO
SilPkJqpePaFOTlsxoMM9K7ZBaVIJi5iMM32MVQcrANERxRZ6xv6EFP7r9ke2VLJ
Da27rah7tCs1si70YVXTRYAJ9cR41/mv8/CFiocDWrhyGPWseCBgMg==
-----END RSA PRIVATE KEY-----
[root@bogon ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDACUxTV64cnBvRttz1/Rx6qMvvNNyEoyQf/cBQSpkbinp7zV+H17SNDlV5Punj7O9Fs3sEzxbpKVZnC40iL+UDD82oAN2EwdmrVD9YbPMFq+8FkXg6YZNmP77bfzmNHKXVX6+V7ZbT+D1tczjtaUo/TRG2fLQPyoDmhoRd5/a1OosqrNlgTV+aVDII67qfr8LNhMmv446XKYzTq9XKXfxDuJpkg6zq9gpsLx5m/pfQ3yoq1dARikcNTJ7VkK28rhBlyKOxCSJVcNl14gHP2vDDZYxD3YqzkBC1KTpjq4A85BTzibyJ4MQhJz1b9jcMSC4SwvgpqI6q7BoXNNxvYDcT root@bogon
jenkins创建项目
这只是一个描述信息,随便写,之后点击源码管理
如果出现这样的
就需要打开 Manage jenkins –> Configure Global Security ,找到 Git Host Key Verification Configuration,按下图修改后保存。警告信息可以忽略
或者改成Known hosts file就OK了
就不报错了
构建一次
在gitlab里面修改文件再重新构建,看看内容是否修改
查看内容,免密构建成功
将代码发布到web服务器
这里我开了一台docker机器模拟网站服务,nginx和apache都可以
[root@localhost ~]# docker run -itd -p 80:80 -v /var/www/html/:/usr/local/apache2/htdocs/ httpd:2.4.57
将本地的/var/www/html/挂载到容器内部的/usr/local/apache2/htdocs/
配置免登
[root@localhost ~]# ssh-copy-id root@192.168.100.10
写脚本
vim /root/deploy.sh
#!/bin/bash
scp /var/lib/jenkins/workspace/web-test/index.html root@192.168.100.10:/var/www/html
#将/var/lib/jenkins/workspace/web-test/index.html复制到192.168.100.10的/var/www/html目录下
#给权限
[root@localhost ~]# chmod 777 deploy.sh
在jenkins上配置
保存
测试
到jenkins服务器把之前的文件全删掉
[root@localhost ~]# rm -rf /var/lib/jenkins/workspace/*
如果报错没权限,如下图:
则需要
#首先
vim /etc/sysconfig/jenkins
....
JENKINS_USER="root"
JENKINS_GROUP="root"
....
#然后
vim /usr/lib/systemd/system/jenkins.service
....
User=root
Group=root
....
systemctl daemon-reload
systemctl restart jenkins.service
访问网站
给不同的用户分配权限
开启role
Manage jenkins –> Configure Global Security—>授权策略
设置角色
开启了Role-Based后,系统管理里多了个Manage and AssignRoles
他有两个角色需要配置:一个是global roles全局角色,另一个是item roles项目角色
给lyh用户分配角色
创建角色
添加baserole,给予权限
添加role1 ,pattern里面是项目名称,再把上面的√点上,然后点击save保存
分配角色
点击save保存,登录lyh
能够进行相应的操作
在创建一个用户alex,在创建一个item过程省略,向上面找
有项目以后分配权限
登录lyh,只能看到web-test项目
登录alex,只能看到web-test项目
分支回滚
首先先说一下项目合并
#在linux上git下载
git config --global user.name "lyh"
git config --global user.email "1684954874@qq.com"
git clone http://192.168.100.5/liuyuhao/test.git
cd test
#查看所有分支,前面的*表示当前在那个分支
[root@localhost test]# git branch
* main
#创建分支
[root@localhost test]# git branch lyh
#切换分支
[root@localhost test]# git checkout lyh
切换到分支 'lyh'
#创建并切换分支
[root@localhost test]# git checkout -b lzz
切换到一个新分支 'lzz'
#列出所有分支
[root@localhost test]# git branch
lyh
* lzz
main
#在lzz分支创建一个文件,名字和内容随意
vim 123.txt
#将文件上传到暂存区--->本地仓库--->远程仓库
[root@localhost test]# git add 123.txt
[root@localhost test]# git commit -m "add 123.txt"
[lzz da2e3f1] add 123.txt
1 file changed, 1 insertion(+)
create mode 100644 123.txt
[root@localhost test]# git push origin lzz
Username for 'http://192.168.100.5': liuyuhao
Password for 'http://liuyuhao@192.168.100.5':
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 305 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for lzz, visit:
remote: http://192.168.100.5/liuyuhao/test/-/merge_requests/new?merge_request%5Bsource_branch%5D=lzz
remote:
To http://192.168.100.5/liuyuhao/test.git
aac72a4..da2e3f1 lzz -> lzz
在gitlab仓库的项目查看
项目合并
方法一:
main主分支就有123.txt了
方法二:在linux上操作
#切换到lyh分支
[root@localhost test]# git checkout zmy
切换到分支 'zmy'
#内容随意
[root@localhost test]# vim lzz.txt
#上传
git add .
git commit -m "add lzz.txt"
git push origin zmy
#切换至main
git checkout main
#合并
git merge zmy
#上传
git push -u origin main
回滚操作
删除没用的文件
lzz里面是合并前的文件,main里面是合并后的文件。
现在网站发布的是合并后的网页(即2.0),现在2.0出现问题了,想让网站发布合并前的网站(1.0)
#在jenkins服务器上
#写脚本
vim test.sh
#!/bin/bash
cd /root
git clone -b lzz git@192.168.100.5:liuyuhao/test.git
cd /root/test
scp -r ./* root@192.168.100.10:/var/www/html
#给予权限
chmod 777 test.sh
#手动执行
[root@localhost ~]# ./test.sh
正克隆到 'test'...
remote: Enumerating objects: 59, done.
remote: Counting objects: 100% (39/39), done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 59 (delta 5), reused 0 (delta 0), pack-reused 20
接收对象中: 100% (59/59), 7.72 KiB | 0 bytes/s, done.
处理 delta 中: 100% (7/7), done.
index.html 100% 16 7.2KB/s 00:00
回滚成功!