> 
> settings.xml 中增加了 maven 部署的 server 节点,否则项目 deploy 时会失败
> 
> 
> 


#### 3.2、创建Dockerfile


在`environment`目录下创建 `daemon.json`



vi /usr/local/docker/runner/environment/daemon.json


内容如下:



{
“registry-mirrors”: [
“https://mirror.ccs.tencentyun.com”
],
“insecure-registries”: [
“192.168.110.158:5000”
]
}


* `registry-mirrors`:为镜像加速地址,这里是使用的腾讯云的镜像加速地址。
* `insecure-registries`:Docker仓库的IP。



> 
> **注意:需要提前搭建Docker 私服(Docker Registry)**
> 
> 
> 


在`environment`目录下创建 `Dockerfile`



vi /usr/local/docker/runner/environment/Dockerfile


内容如下:



FROM gitlab/gitlab-runner:v11.0.2

修改软件源

RUN echo ‘deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse’ > /etc/apt/sources.list &&
echo ‘deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse’ >> /etc/apt/sources.list &&
echo ‘deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse’ >> /etc/apt/sources.list &&
echo ‘deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse’ >> /etc/apt/sources.list &&
apt-get update -y &&
apt-get clean

安装 Docker

RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common &&
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - &&
add-apt-repository “deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable” &&
apt-get update -y &&
apt-get install -y docker-ce
COPY daemon.json /etc/docker/daemon.json

安装 Docker Compose

WORKDIR /usr/local/bin
COPY docker-compose /usr/local/bin
RUN chmod +x docker-compose

安装 Java

RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u341-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u341-linux-x64.tar.gz &&
rm -fr jdk-8u341-linux-x64.tar.gz

安装 Maven

RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
COPY apache-maven-3.5.3-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.5.3-bin.tar.gz &&
rm -fr apache-maven-3.5.3-bin.tar.gz
COPY settings.xml /usr/local/maven/apache-maven-3.5.3/conf/settings.xml

配置环境变量

ENV JAVA_HOME /usr/local/java/jdk1.8.0_341
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.5.3
ENV PATH P A T H : PATH: PATH:JAVA_HOME/bin:$MAVEN_HOME/bin

WORKDIR /


#### 3.3、创建docker-compose


在`runner`目录下创建 `docker-compose.yml`



vi /usr/local/docker/runner/docker-compose.yml


内容如下:



version: ‘3.1’
services:
gitlab-runner:
build: environment
restart: always
container_name: gitlab-runner
privileged: true
volumes:
- ./config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock


构建启动



docker-compose up -d



> 
> 启动后,会自动进行构建
> 
> 
> 


#### 3.4、注册Runner


需要将每一个项目都注册 Runner。


进入到我们需要注册Runner的项目


![在这里插入图片描述](https://img-blog.csdnimg.cn/2c08d98de45a4e61a27a677029a9a2d2.jpeg#pic_center)


点击`设置`->`CI/CD`,在右侧找到`Runner`,点击`展开`  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ab5047159a714d84a341199d9036a195.jpeg#pic_center)


可以看到这个项目的 Runner 的详细信息,其中注册令牌是我们接下来注册 Runner 时必须要用到的


![在这里插入图片描述](https://img-blog.csdnimg.cn/045a578d57904ba29612aed4e846782a.jpeg#pic_center)


在 GitLab Runner 部署服务器上执行命令



docker exec -it gitlab-runner gitlab-runner register



输入 GitLab 地址

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.110.158:8080/

输入 Gitlab-ci token

Please enter the gitlab-ci token for this runner:
78qwWqvR9xDc5_BjYpwo

输入 Runner 的说明

Please enter the gitlab-ci description for this runner:
[cdc79d8453ec]:

设置 Tag

Please enter the gitlab-ci tags for this runner (comma separated):
deploy

选择 runner 执行器

Registering runner… succeeded runner=78qwWqvR
Please enter the executor: kubernetes, docker-ssh, parallels, virtualbox, docker-ssh+machine, docker, shell, ssh, docker+machine:
shell

Runner registered successfully. Feel free to start it, but if it’s running already the config should be automatically reloaded!


配置完后,项目中会显示一个有效可用的 runner  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/32358b7abf804f3d91b4935cd3e980af.jpeg#pic_center)


#### 3.4、项目配置


项目中需要添加一个 `.gitlab-ci.yml` 文件,用于定义要运行的脚本。


##### 3.4.1、依赖管理模块


刚刚在`my-project-dependencies`项目中配置了 Runner,而 `my-project-dependencies` 项目只需要将其部署到 `Nexus`私服中,所以此项目的 `.gitlab-ci.yml` 文件脚本内容就只需要将其`deploy`到`Nexus`即可。


![在这里插入图片描述](https://img-blog.csdnimg.cn/080535bcaefb43d8af647340438cb362.jpeg#pic_center)


内容如下:



stages:

  • deploy

deploy:
stage: deploy
script:
- /usr/local/maven/apache-maven-3.5.3/bin/mvn deploy


项目结构图如下:


![在这里插入图片描述](https://img-blog.csdnimg.cn/8d8b0b2826b44232a6ca5e36ac8ff772.jpeg#pic_center)


提交`my-project-dependencies`项目,可以在GitLab看到我们刚刚创建的流水线


![在这里插入图片描述](https://img-blog.csdnimg.cn/ab33b3dcef2c48ba99571730d0093320.jpeg#pic_center)


如果状态一直在`运行中`,在设置里面的 Runner 中,勾选`运行没有标签的作业`


![在这里插入图片描述](https://img-blog.csdnimg.cn/7c44b4756d7945f8adf3101a135ceb78.jpeg#pic_center)


##### 3.4.2、通用模块


`my-project-common`通用模块,也需要注册Runner,这里就不重复赘述了,参考上文。


通用模块持续集成步骤:


![在这里插入图片描述](https://img-blog.csdnimg.cn/3f71521a9a6b4284951ad642c025ef1d.jpeg#pic_center)


* 清理
* 打包


`.gitlab-ci.yml` 文件内容如下:



stages:

  • deploy

deploy:
stage: deploy
script:
- /usr/local/maven/apache-maven-3.5.3/bin/mvn clean deploy


提交`my-project-common`通用模块,可以在`Nexus`中看到上传的`jar`,持续集成成功。


![在这里插入图片描述](https://img-blog.csdnimg.cn/39d767da38194a40a5a9a0ad790c2176.jpeg#pic_center)


![在这里插入图片描述](https://img-blog.csdnimg.cn/884b9de1eee544af88f00529a853fbef.jpeg#pic_center)


##### 3.4.3、服务模块


`my-project-server`项目服务模块,同样需要注册Runner。


项目服务模块持续集成步骤:


![在这里插入图片描述](https://img-blog.csdnimg.cn/5970161b18d647f7949cda5965242563.jpeg#pic_center)


* 打包构建Docker镜像
* 推送Docker仓库
* 运行容器
* 清理虚悬镜像


`.gitlab-ci.yml` 文件内容如下:



stages:

  • build
  • push
  • run
  • clean

build:
stage: build
script:
- /usr/local/maven/apache-maven-3.5.3/bin/mvn clean package -Dmaven.test.skip=true
- cp target/my-project-server-1.0.0-SNAPSHOT.jar docker
- cd docker
- docker build -t 192.168.110.158:5000/my-project-server .

push:
stage: push
script:
- docker push 192.168.110.158:5000/my-project-server

run:
stage: run
script:
- cd docker
- docker-compose down
- docker-compose up -d

clean:
stage: clean
script:
- docker rmi $(docker images -q -f dangling=true)

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;

  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

[外链图片转存中…(img-tPvZ6Sm8-1719569462243)]

[外链图片转存中…(img-vbKG2HHv-1719569462244)]

[外链图片转存中…(img-fiF6tx0V-1719569462245)]

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐