GitLab与jekins结合构建持续集成(cl)环境(2)

  • Post author:
  • Post category:其他



目录


GItlab配置邮箱


绑定邮箱


创建群组


添加人员


创建一个项目


添加文件


新建分支


如何拉取代码


Git bash 演示


Git GUI演示


安装jenkins


更改插件镜像源


配置jenkins使用gitlab更新代码


安装jekins插件


配置jenkins免密拉取gatlab代码


jenkins创建项目


将代码发布到web服务器


测试


给不同的用户分配权限


开启role


设置角色


给lyh用户分配角色


创建角色


分配角色


分支回滚


项目合并


回滚操作


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    


回滚成功!



版权声明:本文为faoids原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。