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

目录

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    

回滚成功!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/13069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VUE基本使用详解

目录 一、VUE框架原理 1. 了解VUE框架 2. VUE框架原理 3. MVC设计模式 4. MVVM设计模式 二、引入VUE框架 1. 本地引入 2. 网络引入 三、安装Vue插件 一、VUE框架原理 1. 了解VUE框架 vue 框架 是基于MVVM设计模式的前端框架,其中的Vue对象是MVVM设计模式中的VM视图…

Zebec Protocol 出席香港 Web3 峰会,带来了哪些信息?

梳理香港加密新政的细节,一个明确的脉络是,香港加密新政的整体目的是令虚拟资产交易明确化和合法化,通过不断完善的监管框架,促进香港虚拟资产行业的可持续和负责任地发展。 在加强合规和持牌经营的监管思路下,长期审慎…

TensorFlow 和 Keras 应用开发入门:1~4 全

原文:Beginning Application Development with TensorFlow and Keras 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形…

《简化iOS APP上架流程,App Uploader助你搞定!》

转载:Appuploader常见问题 Appuploader 常见错误及解决方法 问题解决秘籍 遇到问题,第一个请登录苹果开发者官网 检查一遍账号是否有权限,是否被停用,是否过期,是否有协议需要同意,并且在右上角切换账号后…

页表结构详细说明

一、页表 1. 内存地址的分解 我们知道linux采用了分页机制,通常采用四级页表,页全局目录(PGD),页上级目录(PUD),页中间目录(PMD),页表(PTE)。如下: 其含义定义在arch/arm64/include/asm/pgtable-hwdef.…

HCIP-6.9BGP路由反射器原理与配置

路由反射器原理与配置 1、路由反射器概念1.1、路由反射器原理:1.2、多集群路由反射器1.3、备份路由反射器2、路由反射器配置3、路由反射器防环机制 1、路由反射器概念 IBGP的水平分割,IBGP 1只能update一跳,就是说在IBGP 2 设备收到IBGP 1设…

密码学|DES加密算法|学习记录

DES简介 DES属于对称密码算法中的分组加密算法 密钥一共64bit,其中56位参与运算,其余8bit为校验位(8 16 24 32 40 48 56 64) n个64位明块经过加密后得到的n个64位密文块加在一起就是密文 DES一般步骤 IP置换 : IP置…

Python中的异常——概述和基本语法

Python中的异常——概述和基本语法 摘要:Python中的异常是指在程序运行时发生的错误情况,包括但不限于除数为0、访问未定义变量、数据类型错误等。异常处理机制是Python提供的一种解决这些错误的方法,我们可以使用try/except语句来捕获异常并…

AI已经解锁自动化能力 | 颠覆商业模式和劳动力市场

AI已经解锁自动化能力,将颠覆商业模式和劳动力市场。目前AutoGPT的开源项目: BabyAGI、Auto-GPT、AgentGPT、TeenagerAGI、Jarvis。 AutoGPT原理: 3个GPT4协同合作,一个GPT4负责分解目标创建任务,另一个GPT4负责分配…

C# switch case语句入门and业务必知点

具体的语法形式如下。 switch(表达式) { case 值 1: 语句块 1; break; case 值 2: 语句块 2; break; ... default: 语句块 n; break; } 在这里,switch 语句中表达式的结果必须是整型、字符串…

Linux用户的分类与家目录,ls、pwd、cd、mkdir、touch、rmdir、rm指令与选项等

Linux中用户的分类与用户的家目录 在Linux当中,用户的分类只分为两类,一类叫做超级用户root,还有就是其他也就是传说中的普通用户。我们刚刚登进去时,默认所处的目录是***/root或者/home/用户名***,比如说/root, /hom…

Unity InputSystem (一)

什么是InputSystem InputSystem 是 2019 年 Unity 新推出的插件,输入系统包实现了一个系统来使用任何类型的输入设备来控制你的 Unity 内容。它旨在成为 Unity 的经典输入管理器更强大、更灵活、更可配置的替代品。 新输入系统基于事件,输入设备和动作逻…

信安大佬真的用kali吗?

Kali只是现在网络安全和kali比较火的一个操作系统 下面我为大家讲讲kali系统都有那些优点 Kali介绍Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。面向专业的渗透测试和安全审计。 集成化:预装超过300个渗透测试工具兼容好&#x…

【JavaEE】File、InputStream和OutputStream的使用

1.File 在计算机中目录结构如下: 而File就表示一个目录或者一个普通文件。 File表示目录: File表示普通文件: 我们先来看File的构造方法: 构造器描述File(File parent, String child)根据父目录 孩子文件路径,创…

ROS学习第九节——服务通信

1.基本介绍 服务通信较之于话题通信更简单些,理论模型如下图所示,该模型中涉及到三个角色: ROS master(管理者)Server(服务端)Client(客户端) ROS Master 负责保管 Server 和 Client 注册的信息,并匹配话题相同的 Server 与 Client &#…

如何在不丢失数据的情况下重装Windows 10?

为什么需要重新安装Windows 10? 随着时间的推移,Windows可能会变慢。这可能是由多种原因引起的,例如您安装了许多额外的启动程序,这些程序会延长启动过程等。如果您的Windows系统速度变慢并且无论您卸载多少程序都没有加速&…

Pixhawk基础—认识Pixhawk

Pixhawk简介 pixhawk是由3DR联合APM小组与PX4小组于2014年推出的飞控PX4的升级版,它同时拥有PX4和APM两套固件和相应的地面站软件。该飞控是目前全世界飞控产品中硬件规格最高的产品。 Pixhawk基础 端口介绍 1、Spektrum DSM receiver(Spektrum DSM信号转换为PWM…

PXE+Kickstart自动化安装操作系统

文章目录 PXEKickstart 完美自动化部署系统理论知识:1、PXE2、DHCP 实践实验:1、DHCP服务器配置2、TFTP服务器配置3、HTTP服务器安装4、PXE配置5、Kickstart实践配置 PXEKickstart 完美自动化部署系统 理论知识: 无人值守原理:K…

思科实验 EIGRP

1.1.1 实验目的 通过对 CCNA 课程中的 EIGRP 实验部分进行回顾,从而更加准确掌握 EIGRP 路由协议的 配置方法,以及对 network 命令的正确理解。并且学会对 EIGRP 路由协议查看排错的相关命 令。 1.1.2 实验拓扑 拓扑说明:本实验由两台思科路…

第七章 法律行为与法律意识

目录 第一节 法律行为 一、 法律行为的含义与特征二、 法律行为的结构 (一)法律行为的内在方面 动机目的认知能力 (二)法律行为的外在方面 行动(行为)手段结果 三、法律行为的分类 第二节 法律意识 一、法…
最新文章