步骤:

  1. 代码中编写Dockerfile及build.gradle
  2. jenkins 配置gitlab repo,并使用 gradle 构建项目
  3. 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 }

  1. <a name="xPJp3"></a>
  2. ## jenkins配置
  3. <a name="o4tcv"></a>
  4. ### 代码位置
  5. - Repository URL:git@git.tianrang-inc.com:jd/java-web-tools.git
  6. - Credentials:jenkins (to login gitlab by privatekey)<br />
  7. <a name="zhtOr"></a>
  8. ### 自动构建(可选)
  9. 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)
  10. 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)
  11. 1. 只勾选 Push Events,当 gitlab 的 master 分支发生 push 时,会**触发自动构建**操作
  12. gitlab中增加web hook步骤:
  13. 1. settings -> integrations(新版为webhooks)
  14. 1. URL填写jenkins中所展示的项目URL
  15. 1. Secret Token填写jenkins中的token
  16. 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)
  17. <a name="RfMkG"></a>
  18. ### 配置使用gradle打包
  19. <a name="zfm6C"></a>
  20. #### 构建环境
  21. Inject environment variables to the build process -> Properties Content
  22. 支持读取 .properties 中的设置,比如project.properties
  23. ```bash
  24. DOCKER_REPO=hub-docker.tianrang-inc.com
  25. DOCKER_REPO_HZ=hub-docker.tianrang-inc.com
  26. VERSION_NUMBER=0.0.1
  27. TAG_VALUE=${GIT_LOCAL_BRANCH}-${VERSION_NUMBER}-build.${BUILD_NUMBER}

Set Build Name -> Build Name: ${TAG_VALUE}

构建

  1. 执行 shell ```bash

    !/bin/bash

docker login -p ${REGISTRY_PASSWD} -u ${REGISTRY_NAME} http://${DOCKER_REPO} docker login -p ${REGISTRY_PASSWD} -u ${REGISTRY_NAME} ${DOCKER_REPO_HZ}

  1. 2. 选择 Involke gradle,其他选项保存默认值
  2. <a name="baUvK"></a>
  3. ### 自动部署(可选)
  4. 1. 切换至 build 标签
  5. 1. 点击下方“Add build Step”按钮,选择“Send files or execute commands over SSH
  6. 1. SSH Server选择恰当的地址
  7. 1. Exec command填写以下内容
  8. ```bash
  9. #!/bin/bash
  10. kubectl set image deploy/homepage homepage=hub-docker.tianrang-inc.com/tianrang/tr-homepage:${TAG_VALUE} -n tianrang-dev

k8s配置

创建命名空间

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: tianrang-dev

创建部署

  1. ---
  2. kind: Deployment
  3. apiVersion: extensions/v1beta1
  4. metadata:
  5. name: homepage
  6. namespace: tianrang-dev
  7. labels:
  8. app: homepage
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. app: homepage
  14. template:
  15. metadata:
  16. labels:
  17. app: homepage
  18. spec:
  19. containers:
  20. - name: homepage
  21. image: hub-docker.tianrang-inc.com/tianrang/tr-homepage:master-0.0.1-build.3
  22. ports:
  23. - name: api
  24. containerPort: 80
  25. protocol: TCP
  26. imagePullPolicy: IfNotPresent
  27. resources:
  28. limits:
  29. memory: 256Mi
  30. requests:
  31. memory: 256Mi
  32. imagePullSecrets:
  33. - name: regcred
  34. schedulerName: default-scheduler

创建服务

  1. ---
  2. kind: Service
  3. apiVersion: v1
  4. metadata:
  5. name: homepage
  6. namespace: tianrang-dev
  7. spec:
  8. ports:
  9. - name: api
  10. protocol: TCP
  11. port: 80
  12. targetPort: 80
  13. selector:
  14. app: homepage
  15. type: NodePort
  16. #type: ClusterIP
  17. sessionAffinity: None
  18. externalTrafficPolicy: Cluster

查看访问地址

  1. 打开k8s dashboard
  2. 命名空间切换选择“tianrang-dev”
  3. 切到服务页面,点击“homepage”,查看内部端点的第二行端口,如下图所示截屏2020-05-19 09.43.04.png
  4. 使用dashboard的IP地址加上第三步的端口组成服务访问地址,如dashboard地址为http://172.18.192.7:31111/,服务端口为30458,那么服务访问地址就是http://172.18.192.7:30458/