Docker 自动化部署
yum -y install docker
systemctl daemon-reload && systemctl restart docker
查看docker版本
docker version
安装 GitLab Runner
在具有gitlab的机子上安装 GitLab Runner
Runner 可以 Shell 方式也可以以 Docker 容器方式运行。Shell 比较简单,问题会比较少。 用 Docker Container 方式一台机器可以装多个 Runner。本文中 GitLab Runner 和 GitLab 安 装在同一台机器,装容器方式装多个会有性能问题,所以用简单的 Shell 方式。 官方参考文档:
https://docs.GitLab.com/runner/install/linux-repository.html
https://docs.gitlab.com/runner/
获取 Runner Token
打开 GitLab 网页,按下图指示,找到注册 token。
注册 Runner
官方文档参考:https://docs.GitLab.com/runner/register/index.html
注册成功显示:
Registering runner... succeeded runner=KZi5yDuK
Runner registered successfully. Feel free to start it, but if it's running already the config should
be automatically reloaded!
本文使用 socket binding 方式运行 docker,需修改/etc/gitlab-runner/config.toml 为 socket binding 方式,并添加 maven 库目录的本地映射,这样每次打包时不需要重下依赖包。另 外末尾加上 pull_policy = “if-not-present”,这样不会每次都拉镜像。
检查结果
打开 GitLab > Admin > Runners,如下图看到 Runner 列表即为成功。
创建 kubectl 镜像
需要一个 kubectl 镜像在 Gitlab 服务器上运行,并能远程连接 K8S 服务器的镜像。 kubectl的版本根据你安装的k8s而定。
Dockerfile:
FROM lachlanevenson/k8s-kubectl:v1.18.5
LABEL maintainer="key_dong@huatek.com"
ENV KUBE_LATEST_VERSION="v1.18.5"
ADD admin.conf /root/.kube/config
WORKDIR /root
编译上传
docker build -t kubectl:1.18.5 .
docker push kubectl:1.18.5
部署
#新建.gitlab-ci.yml
内容为:
variables:
MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository" # 指定maven本地库路径
DOCKER_DRIVER: overlay2 # 用overlay2优化性能
PROJECT_NAME: $CI_PROJECT_NAME # 用Gitlab工程名环境变量做后面打包的名字
PROJECT_VERSION: "2.0.0"
stages:
- build
- deploy
maven-build:
stage: build
script:
- mvn package -B -DskipTests # 跳过测试节省时间
- mv target/$CI_PROJECT_NAME*.jar target/app.jar # 打好的包重命名为app.jar
- docker build -t docker镜像 . # 生成docker镜像
- docker push docker镜像 # 提交到镜像库
artifacts:
paths:
- ./*.yaml
k8s-deploy:
stage: deploy
only:
- master # 只不是master节点
image:
name: k8s-kubectl:1.18.5 # 根据自己推送的地址改动
entrypoint: [""]
script:
#- /usr/bin/kubectl delete -f Deployment.yaml # 如果第一次部署请注释掉
- /usr/bin/kubectl create -f Deployment.yaml
- /usr/bin/kubectl set env deploy/$PROJECT_NAME DEPLOY_DATE="$(date)" # 让k8s强制更新镜像
Deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: 自定义名称
labels:
app: 自定义名称
version: 自定义版本号
spec:
selector:
matchLabels:
app: 自定义名称
replicas: 1
template:
metadata:
labels:
app: 自定义名称
spec:
containers:
- name: 自定义名称
image: 镜像地址
imagePullPolicy: Always
env:
- 启动参数
---
apiVersion: v1
kind: Service
metadata:
name: torch-gen
labels:
app: 自定义名称
version: 自定义版本
spec:
selector:
app: 自定义名称
type: LoadBalancer
完成,当提交master节点代码时候 就会自己部署到k8s docker中