说明
由于我的项目之前都是采用 Jenkins 与 Docker 进行部署并运行的,所以在 Gitlab CI 中我也采用 Docker 的方式进行运行处理。
Runner
运行
1
docker run -d --name gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
容器 Docker 设置
http://docs.gitlab.com/runner/register/
原手册文档
https://gitlab.com/help/ci/runners/README.md
代码根目录配置
代码仓库根目录下创建文件 .gitlab-ci.yml
并参考下来配置进行设置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
stages:
- build
- package
maven-build:
image: maven:3-jdk-8-alpine
stage: build
script: "mvn clean package -Dmaven.test.skip=true"
artifacts:
paths:
- target/nakedhub*.war
docker-build:
image: docker:latest
stage: package
script:
- export DOCKER_TAG=$(date "+%Y%m%d%H%M%S")
- docker build -t registry.nakedhub.cn/nh/backend-ut:$DOCKER_TAG .
- docker login -u admin -p Naked2017 http://registry.nakedhub.cn
- docker push registry.nakedhub.cn/nh/backend-ut:$DOCKER_TAG
判断 Git 仓库是否发生变化脚本
https://stackoverflow.com/questions/3258243/check-if-pull-needed-in-git?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
获取最新更新内容。
1
git fetch / git remote update
执行以下脚本内容之前请先执行以上命令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @ "$UPSTREAM")
if [ $LOCAL = $REMOTE ]; then
echo "Up-to-date"
elif [ $LOCAL = $BASE ]; then
echo "Need to pull"
elif [ $REMOTE = $BASE ]; then
echo "Need to push"
else
echo "Diverged"
fi
Maven 依赖缓存解决
https://gitlab.com/gitlab-org/gitlab-ce/issues/15167
更多 .gitlab-ci.yml
配置
https://docs.gitlab.com/ee/ci/yaml/README.html#cache
示例
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
stages:
- build
variables:
MAVEN_OPTS: -Dmaven.repo.local=/cache/maven.repository
release-build:
image: maven:3-jdk-8-alpine
stage: build
script: "mvn compile"
only:
refs:
- master
tags:
- hello
merge-request-build:
image: maven:3-jdk-8-alpine
stage: build
script: "mvn compile"
only:
- /^feature-\/.*$/
except:
- branches
tags:
- hello