# 持续集成实战用户管理服务
# 部署通用模块项目
先将所有被依赖项目(通用模块项目)部署到 Nexus,为项目创建一个 deploy.bat
文件,示例代码如下:
cd ..
cd myshop-dependencies
call mvn deploy
cd ..
cd myshop-commons
call mvn deploy
cd ..
cd myshop-commons-domain
call mvn deploy
cd ..
cd myshop-commons-mapper
call mvn deploy
cd ..
cd myshop-commons-dubbo
call mvn deploy
cd ..
cd myshop-static-backend
call mvn deploy
cd ..
cd myshop-service-user-api
call mvn deploy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 持续集成依赖管理项目
由于我们所有项目的父工程都是依赖于 myshop-dependencies
,所以我们持续集成的第一步是将该项目进行持续集成,在项目目录创建 .gitlab-ci.yml
文件,代码如下:
stages:
- deploy
deploy:
stage: deploy
script:
- /usr/local/maven/apache-maven-3.5.3/bin/mvn clean install
1
2
3
4
5
6
7
2
3
4
5
6
7
# 持续集成服务提供者
# gitlab-ci.yml
# 定义阶段
stages:
- build
- push
- run
- clean
build:
stage: build
script:
- /usr/local/maven/apache-maven-3.5.3/bin/mvn clean package
- cp target/myshop-service-user-provider-1.0.0-SNAPSHOT.jar docker
- cd docker
- docker build -t 192.168.10.133:5000/myshop-service-user-provider:v1.0.0 .
push:
stage: push
script:
- docker push 192.168.10.133:5000/myshop-service-user-provider:v1.0.0
run:
stage: run
script:
- cd docker
- docker-compose down
- docker-compose up -d
clean:
stage: clean
script:
- docker image prune -f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Dockerfile
FROM openjdk:8-jre
MAINTAINER cmcc <13691363167@163.com>
ENV APP_VERSION 1.0.0-SNAPSHOT
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
RUN mkdir /app
COPY myshop-service-user-provider-$APP_VERSION.jar /app/app.jar
ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "tcp://192.168.10.131:3306", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]
EXPOSE 8501 22222 20881
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# docker-compose.yml
version: '3.1'
services:
myshop-service-user-provider:
image: 192.168.10.133:5000/myshop-service-user-provider:v1.0.0
container_name: myshop-service-user-provider
ports:
- 8501:8501
- 22222:22222
- 20881:20881
networks:
default:
external:
name: dubbo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 持续集成服务消费者
# gitlab-ci.yml
stages:
- build
- push
- run
- clean
build:
stage: build
script:
- /usr/local/maven/apache-maven-3.5.3/bin/mvn clean package
- cp target/myshop-service-user-consumer-1.0.0-SNAPSHOT.jar docker
- cd docker
- docker build -t 192.168.10.133:5000/myshop-service-user-consumer:v1.0.0 .
push:
stage: push
script:
- docker push 192.168.10.133:5000/myshop-service-user-consumer:v1.0.0
run:
stage: run
script:
- cd docker
- docker-compose down
- docker-compose up -d
clean:
stage: clean
script:
- docker image prune -f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Dockerfile
FROM openjdk:8-jre
MAINTAINER cmcc <13691363167@163.com>
ENV APP_VERSION 1.0.0-SNAPSHOT
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
RUN mkdir /app
COPY myshop-service-user-consumer-$APP_VERSION.jar /app/app.jar
ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "tcp://192.168.10.131:20881", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]
EXPOSE 8601 8701
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# docker-compose.yml
version: '3.1'
services:
myshop-service-user-consumer:
image: 192.168.10.133:5000/myshop-service-user-consumer:v1.0.0
container_name: myshop-service-user-consumer
ports:
- 8601:8601
- 8701:8701
networks:
default:
external:
name: dubbo
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
注意: 因为 Docker 的沙箱机制,在不同 compose 中部署的项目会在不同的局域网中,为了解决这个问题,我们可以创建一个专门的外部网络,创建命令如下:
docker network create <网络名>
1