步骤:
- 代码中编写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,如下图
1. 点击Advanced按钮,可看到 Secret token,如下图:
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,如下图所示
<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/