步骤:
- 代码中编写Dockerfile及build.gradle
- jenkins 配置gitlab repo,并使用 gradle 构建项目
- k8s部署镜像
构建代码准备
项目中编写 build.gradle 文件,内容如下 ``` defaultTasks ‘push’
project.group = ‘cbd’ project.version = “${VERSION}” // 依赖环境变量 VERSION(后续可在jenkins上设置)
ext { env = System.getenv() }
// 依赖环境变量 DOCKER_REPO、TAG_VALUE def imageName = “${env.DOCKER_REPO}/${project.group}/${project.name}:${env.TAG_VALUE}”
task build(type: Exec) { workingDir ‘.’ // Dockerfile 放置在项目根目录的 docker 目录下 commandLine ‘docker’, ‘build’, ‘-t’, imageName, ‘-f’, ‘docker/Dockerfile’, ‘.’ }
task push(type: Exec, dependsOn: ‘build’) { commandLine ‘docker’, ‘push’, imageName }
<a name="xPJp3"></a>
## jenkins配置
<a name="o4tcv"></a>
### 代码位置
- Repository URL:git@git.tianrang-inc.com:jd/java-web-tools.git
- Credentials:jenkins (to login gitlab by privatekey)<br />
<a name="zhtOr"></a>
### 自动构建(可选)
1. 勾选 Build when a change is pushed to GitLab. GitLab webhook URL: http://xyz,如下图![截屏2020-05-19 10.03.59.png](https://cdn.nlark.com/yuque/0/2020/png/402171/1589854124360-4b06370c-a398-49b4-bc1a-6180fea18b56.png#align=left&display=inline&height=522&margin=%5Bobject%20Object%5D&name=%E6%88%AA%E5%B1%8F2020-05-19%2010.03.59.png&originHeight=522&originWidth=2350&size=97313&status=done&style=none&width=2350)
1. 点击Advanced按钮,可看到 Secret token,如下图:![截屏2020-05-19 10.03.23.png](https://cdn.nlark.com/yuque/0/2020/png/402171/1589854106211-6f8d9933-6b9c-47ed-bacb-de8672e99b59.png#align=left&display=inline&height=522&margin=%5Bobject%20Object%5D&name=%E6%88%AA%E5%B1%8F2020-05-19%2010.03.23.png&originHeight=522&originWidth=2350&size=91806&status=done&style=none&width=2350)
1. 只勾选 Push Events,当 gitlab 的 master 分支发生 push 时,会**触发自动构建**操作
gitlab中增加web hook步骤:
1. settings -> integrations(新版为webhooks)
1. URL填写jenkins中所展示的项目URL
1. Secret Token填写jenkins中的token
1. Trigger选择Push Events,如下图所示![截屏2020-05-19 10.06.01.png](https://cdn.nlark.com/yuque/0/2020/png/402171/1589854066525-cecc81ab-f26a-42de-b9e8-57de7516b883.png#align=left&display=inline&height=754&margin=%5Bobject%20Object%5D&name=%E6%88%AA%E5%B1%8F2020-05-19%2010.06.01.png&originHeight=754&originWidth=2350&size=148847&status=done&style=none&width=2350)
<a name="RfMkG"></a>
### 配置使用gradle打包
<a name="zfm6C"></a>
#### 构建环境
Inject environment variables to the build process -> Properties Content
支持读取 .properties 中的设置,比如project.properties
```bash
DOCKER_REPO=hub-docker.tianrang-inc.com
DOCKER_REPO_HZ=hub-docker.tianrang-inc.com
VERSION_NUMBER=0.0.1
TAG_VALUE=${GIT_LOCAL_BRANCH}-${VERSION_NUMBER}-build.${BUILD_NUMBER}
Set Build Name -> Build Name: ${TAG_VALUE}
构建
docker login -p ${REGISTRY_PASSWD} -u ${REGISTRY_NAME} http://${DOCKER_REPO} docker login -p ${REGISTRY_PASSWD} -u ${REGISTRY_NAME} ${DOCKER_REPO_HZ}
2. 选择 Involke gradle,其他选项保存默认值
<a name="baUvK"></a>
### 自动部署(可选)
1. 切换至 build 标签
1. 点击下方“Add build Step”按钮,选择“Send files or execute commands over SSH”
1. SSH Server选择恰当的地址
1. Exec command填写以下内容
```bash
#!/bin/bash
kubectl set image deploy/homepage homepage=hub-docker.tianrang-inc.com/tianrang/tr-homepage:${TAG_VALUE} -n tianrang-dev
k8s配置
创建命名空间
apiVersion: v1
kind: Namespace
metadata:
name: tianrang-dev
创建部署
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: homepage
namespace: tianrang-dev
labels:
app: homepage
spec:
replicas: 1
selector:
matchLabels:
app: homepage
template:
metadata:
labels:
app: homepage
spec:
containers:
- name: homepage
image: hub-docker.tianrang-inc.com/tianrang/tr-homepage:master-0.0.1-build.3
ports:
- name: api
containerPort: 80
protocol: TCP
imagePullPolicy: IfNotPresent
resources:
limits:
memory: 256Mi
requests:
memory: 256Mi
imagePullSecrets:
- name: regcred
schedulerName: default-scheduler
创建服务
---
kind: Service
apiVersion: v1
metadata:
name: homepage
namespace: tianrang-dev
spec:
ports:
- name: api
protocol: TCP
port: 80
targetPort: 80
selector:
app: homepage
type: NodePort
#type: ClusterIP
sessionAffinity: None
externalTrafficPolicy: Cluster
查看访问地址
- 打开k8s dashboard
- 命名空间切换选择“tianrang-dev”
- 切到服务页面,点击“homepage”,查看内部端点的第二行端口,如下图所示
- 使用dashboard的IP地址加上第三步的端口组成服务访问地址,如dashboard地址为http://172.18.192.7:31111/,服务端口为30458,那么服务访问地址就是http://172.18.192.7:30458/