重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一、使用Git拉取项目到本地
我们提供的服务有:网站制作、成都做网站、微信公众号开发、网站优化、网站认证、腾冲ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的腾冲网站制作公司
1、团队实际开发Git概况
在实际开发的项目中,一个项目会有 三种版本分支:master版本分支、dev版本分支、自定义版本分支
master版本分支: 正式运行环境中的程序代码,运行环境会定期自动或按计划手动从该master版本分支中获取代码并重新编译和运行,不允许随意修改,一旦出错将对系统造成严重后果。所以开发人员不会被项目管理员授予:在Master上创建分支、直接提交代码到Master分支上、使用Master分支合并其他分支的权限。
dev版本分支: 测试环境中运行的代码,master版本分支会定期合并该dev版本版本分支的代码,也不允许随意修改,如果想要修改,必须先新建一个自定义版本分支,编写好代码之后同步到云端仓库,在云端使用Git向该项目的管理员发出合并请求(merge),项目管理员同意之后才能在dev分支中看到自己写好的代码。所以开发人员也不会被授予:直接提交代码到dev分支、使用dev合并其他分支的权限;但是拥有在dev分支上新建自定义分支的权限。
自定义版本分支: 自己定义的版本分支,有两种情况。
情况1: 一般情况下,开发人员使用git clone命令、使用IDEA或GitHub Desktop等其他图形化工具从云端复制项目到本地的是当前时间的master版本,开发人员需要在本地新建一个分支(可以命名为dev)关联到云端的dev分支,再在本地dev分支上新建一个自定义版本分支。
情况2: 还有一种情况是先在云端的dev上新建一个自己的分支,再使用命令行自定义拉取信息,拉取刚才新建的分支到本地。
当开发人员在自定义分支上开发完了自己的代码之后,将当前自定义版本分支同步到云端,这时候请求合并到dev分支,管理员或者被授权合并权限的人员就可以审核开发人员的代码并进行合并了,如果测试不通过则不予合并,如果在合并之后出现问题,则将dev分支回退到之前的版本。
2、Git拉取项目:就是复制项目到本地。
本文介绍使用IDEA从云端拉取项目,默认拉取的是master分支的快照,相当于在本地新建一个master分支,再把当前master分支的代码复制到本地master分支。
(1)新建项目,从版本控制系统拉取。
(2)从云端查看要被拉去的项目路径,在IDEA中输入项目路径
在这里复制
在这里输入
然后确认即可
3、用IDEA打开或者导入刚才的项目,项目为git-test
打开或者导入都可以,以下是打开
信任项目选择信任
此时项目就已经下载到本地并且作为一个项目文件存在了,但是还是不能直接运行,因为大型项目往往需要配置运行环境。
二、本地运行
克隆好的SpringBoot项目用IDEA打开自动会根据maven加载项目依赖,并配置启动类。
IDEA右上角菜单栏出现下图所示的情况表示加载成功。
由于项目是团队开发,所以项目的src\main\resource目录下会有对应多个状态的properties配置文件,如下图:
application.properties、application-dev.properties、application-prod.properties分别对应总体配置、测试开发环境配置、运行环境配置。需要这些配置的原因是:测试环境(dev)和生产环境(prod)的数据库或者资源不一致,测试环境的数据库是生产环境的一个副本,生产环境数据库只允许增加和查看,修改和删除需要严格控制。
由于我们当前是在开发环境之下,所以需要加载使用dev环境的配置。但是加载和使用dev环境的配置不能在代码中设置,如果上线到运行环境运行到这部分代码就会出错,所以需要在运行时设置VM Options参数:-Dspring.profiles.active = dev,如下图:
三、本地测试
正常情况下本地测试:
在Test同路径下面创建测试类,并在类上添加注解@SpringBootTest;创建方法,并添加注解@Test
代码如下:
@SpringBootTest
public class SpringBootFunctionTests {
@Autowired
UserService userService;
@Test
public void testMethod1() {
//方法体
}
}
登录后复制
但是在某些情况下可能会报错,尤其是在某个地方使用了@WebEnvironmentAutoConfig注解之后,可能需要重新指定测试类的运行环境。
此时需要
(1)先检查pom.xml,看是否配置了spring-boot-starter-test
(2)查看import,分别尝试import org.junit.Test;和import org.junit.jupiter.api.Test;
(3)尝试修改注解,如:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {OperationApplication.class})
@SpringBootTest
public class SpringBootFunctionTests {
@Autowired
UserService userService;
@Test
public void testMethod1() {
//方法体
}
}
登录后复制

(4)如果此时还是出错,并且是在未添加@RunWith(SpringRunner.class)注解出现NullPointer错误,添加了次注解出现上下文环境无法加载错误(ApplicationContext not found),说明没有指定测试类的运行环境配置,就像上文指定开发运行环境配置一样。
指定测试类的运行环境配置
方法有三种:
(1)一种是给Junit添加VM Options:-Dspring.profiles.active = dev
添加Junit在此项目中的总体运行配置,此时在每一次运行Junit测试的时候,IDEA都会加上此运行配置,一劳永逸。
(2)单个测试方法添加运行配置
此时需要对每个测试方法都添加配置,比较麻烦。
(3)在每个测试类上添加@ActiveProfiles(“dev”)指定运行环境,并添加@RunWith(SpringRunner.class)
代码如下:
@RunWith(SpringRunner.class)
@ActiveProfiles("dev")
@SpringBootTest
public class SpringBootFunctionTests {
@Autowired
UserService userService;
@Test
public void testMethod1() {
//方法体
}
}
登录后复制
也需要对每个测试类都添加这两个注解。
@RequestMapping("/git/version")
public String getGitVersion() {
try {
//需要安装git并配置git环境变量
String command = "git --version";
//执行系统命令
Process p = Runtime.getRuntime().exec(command);
//获取命令执行结果,封装在IO流中了
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String
//输出结果
String s;
StringBuilder sb = new StringBuilder();
while ((s = br.readLine()) != null) {
sb.append(s);
}
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
安装一个git ,别问我git是什么,自己百度,然后找到项目链接,直接 git clone 链接,或者你ssh 链接(这个你还是算了你不会的。),然后就拉下来了,然后就是git pull ,git add路径(git add .是所有项目文件)然后git commit -m "你要说的话",然后 git push 就行了,私聊我给一个脚本你,只需要 sh 就行了。
把nginx和php作为两个容器,代码另外放在volume,分别供php和nginx两者挂载
好处:代码更新灵活
坏处:感觉这作为一个服务来说很“山寨”(可以和Java/NodeJS的服务类比一下);另外,如果你用到了composer,依赖部分无法在制作镜像中过程中自动化安装
把nginx作为一个容器,php和代码放在另一个容器,但其中代码目录也需要供nginx挂载
好处:相比1,可以把composer放入PHP容器中,制作镜像时帮你安装依赖
坏处:作为服务依然很“山寨”
把nginx、php和代码全放入同一个容器
好处:更符合微服务的定义,整体对外构成一个服务;nginx和php之间可以直接用unix socket通信
坏处:除了灵活性之外,不太符合Docker官方一个容器只跑一个服务的建议