创建GitLab源码项目并上传示例代码

1. 创建GitLab源码项目

  本示例中创建的GitLab源码项目地址为:https://gitee.com/SunHarvey/helloworld_java.git

2. 执行以下命令获取示例代码并上传至GitLab

git clone https://gitee.com/SunHarvey/helloworld_java.git
git remote add helloworld https://gitee.com/SunHarvey/helloworld_java.git
git push helloworld master

在Kubernetes集群中安装GitLab Runner

1. 获取GitLab Runner的注册信息

  • 登录你的GitLab
  • 在顶部导航栏中,选择Projects > Your projects。
  • 在Your projects页签下,选择相应的Project。
  • 在左侧导航栏中,选择Settings > CI / CD。
  • 单击Runners右侧的Expand。

获取URL和registration token, 这个url 和token下边要用到

2. 获取并修改GitLab Runner的Helm Chart

获取gitlab-runner

git clone https://github.com/haoshuwei/gitlab-runner.git

替换values.yaml文件中 gitlabUrl和runnerRegistrationToken字段, 就是上边看到的那个两个字段,

也可以配置全局的runner, 这个就不用每个项目都加了,具体方法请看文章末尾附录

gitlabUrl: http://xx.xx.xx.xx/
runnerRegistrationToken: "xxxxxx"

3 安装GitLab Runner

打包应用

helm package .

Successfully packaged chart and saved it to: /root/gitlab/gitlab-runner/gitlab-runner-0.1.37.tgz

安装应用

helm install --namespace gitlab --name  gitlab-runner *.tgz

查看相关的deployment/pod是否成功启动。若成功启动,则可在GitLab上看到注册成功的GitLab Runner

也可在kubernetes上查看

设置全局变量

在GitLab的顶部导航栏中,选择Projects > Your projects。
在Your projects页签下,选择相应的Project。
在左侧导航栏中,选择Settings > CI / CD。
单击Variables右侧的Expand。添加GitLab Runner可用的环境变量。本示例中,添加以下三个变量。

REGISTRY_USERNAME:镜像仓库用户名。
REGISTRY_PASSWORD:镜像仓库密码。
kube_config:KubeConfig的编码字符串。

执行以下命令生成KubeConfig的编码字符串:

echo $(cat ~/.kube/config | base64) | tr -d " "

编写.gitlab-ci.yml

编写.gitlab-ci.yml文件,完成 helloworld 源码项目的编译构建、镜像推送和应用部署(可参考hellowrld源码项目中的.gitlab-ci.yml)

image: docker:stable
stages:
- package
- docker_build
- deploy_k8s
variables:
KUBECONFIG: /etc/deploy/config
MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository"
mvn_build_job:
image: maven:3.6.2-jdk-14
stage: package
tags:
- k8s-runner
script:
- mvn clean install
- cp target/helloworld-1.0.jar /opt/cache/
docker_build_job:
image: docker:latest
stage: docker_build
tags:
- k8s-runner
script:
- docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com
- cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
- docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID .
- docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID deploy_k8s_job:
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
stage: deploy_k8s
tags:
- k8s-runner
script:
- mkdir -p /etc/deploy
- echo $kube_config |base64 -d > $KUBECONFIG
- sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml
- cat deployment.yaml
- kubectl apply -f deployment.yaml

.gitlab-ci.yml定义了一个Pipeline, 分三个阶段步骤执行

image: docker:stable     # Pipeline中各个步骤阶段的构建镜像没有指定时, 默认使用docker:stable镜像
stages:
- package # 源码打包阶段
- docker_build # 镜像构建和打包推送阶段
- deploy_k8s # 应用部署阶段
variables:
KUBECONFIG: /etc/deploy/config # 定义全局变量KUBECONFIG

maven源码打包阶段。

mvn_build_job:               # job名称
image: maven:3.6.2-jdk-14 # 本阶段构建使用的构建镜像
stage: package # 关联的阶段名称
tags: # GitLab Runner的tag
- k8s-runner # 指定runner-tag
script:
- mvn clean install # 执行构建脚本
- cp target/helloworld-1.0.jar /opt/cache/ # 构建物保存至缓存区

镜像构建和打包推送阶段

docker_build_job:
image: docker:latest
stage: docker_build
tags:
- k8s-runner
script:
- docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com # 登录镜像仓库
- cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
- docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID . # 打包Docker镜像,使用的tag为本次Pipeline的ID
- docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID # 推送Docker镜像

应用部署阶段

deploy_k8s_job:      # job名称
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6 # 本阶段构建使用的构建镜像
stage: deploy_k8s # 关联的阶段名称
tags:
- k8s-runner # GitLab Runner的tag
script:
- mkdir -p /etc/deploy
- echo $kube_config |base64 -d > $KUBECONFIG # 配置连接Kubernetes集群的config文件
- sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml # 动态替换部署文件中的镜像tag
- cat deployment.yaml
- kubectl apply -f deployment.yaml

执行Pipeline

提交.gitlab-ci.yml文件后,Project gitlab-java-demo会自动检测到这个文件并执行Pipeline, 如下图所示

访问服务

如果部署文件中没有指定Namespace,则默认会部署到GitLab命名空间下
kubectl -n gitlab get svc

注意事项

1. 取消Auto DevOps

附录:

全局runner 添加

以管理员省份登录gitlab ,进入adminArea --> Overview --> Runners, 就可以看到 url 和token 了。

文本参考:https://help.aliyun.com/document_detail/106968.html

GitLab集成kubernetes的更多相关文章

  1. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  2. Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图

    Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图 转载自:原创 IT综合 作者:百联达 时间:2017-05-09 15:48:08 41 ...

  3. Jenkins与Gitlab集成

    一.安装jenkinshttps://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/     #清华yum源 yum -y install java-1.8. ...

  4. 持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]

    转载:https://www.abcdocker.com/abcdocker/2065 一.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkin ...

  5. LDAP落地实战(三):GitLab集成OpenLDAP认证

    上一篇文章介绍了svn集成OpenLDAP认证,版本控制除了svn外,git目前也被越来越多的开发者所喜爱,本文将介绍GitLab如何集成openldap实现账号认证 GitLab集成OpenLDAP ...

  6. Gerrit - Gerrit与GitLab集成

    1 - 简介 虽然Gerrit 本身提供 Code Review和 Git 仓库的两大功能,但实际上很多项目用的是其他的Git仓库,例如GitLab和GitHub. 一般情况下,Gerrit位于最终代 ...

  7. spring boot zuul集成kubernetes等第三方登录

    介绍一下,在单点登录平台集成kubernetes登录,集成其它系统的登录原理是一样的,如grafana, nacos, jenkins等. POM引用: <dependency> < ...

  8. 持续集成与自动化部署---代码流水线管理及Jenkins和gitlab集成

    1.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦.所以出现pipeline名词. 代 ...

  9. kubernetes实战(十四):k8s持久化部署gitlab集成openLDAP登录

    1.基本概念 使用k8s安装gitlab-ce,采用GlusterFS实现持久化(注意PG使用的是NFS存储,使用动态存储重启postgresql的pod后无法成功启动pg,待解决),并集成了open ...

随机推荐

  1. SQL获取多个字段中最大小值

    1.语法最大值: GREATEST(expr_1, expr_2, ...expr_n)最小值: LEAST(expr_1, expr_2, ...expr_n) 2.说明GREATEST(expr_ ...

  2. Jmeter系列(55)- 详解 Throughput Controller 吞吐量控制器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 自行调整该控制器下的子项的执 ...

  3. in文件注意事项及详细解释(转载)

    转载自:https://www.cnblogs.com/sysu/p/10817315.html  和   https://www.cnblogs.com/panscience/p/4953940.h ...

  4. 问题定位 | Peronca Xtrabackup 8.0近日踩坑总结 - xtrabackup 2.4和8.0区别

    目录 前言 适配过程中遇到的坑 xtrabackup 2.4和8.0区别 问题定位 坑一:MySQL 8.0 + Semi-Sync 重建问题 坑二:MySQL 8.0 + Group-Replica ...

  5. idea创建mybatis的逆向工程:generator

    1在工程的目录下配置mybatis-generator插件 <build> <plugins> <!-- mybatis逆向工程 --> <plugin> ...

  6. 企业网站SEO如何选择关键词

    http://www.wocaoseo.com/thread-17-1-1.html       企业网站的关键词应该如何去选择?有很多的企业老板在网上某某企业在网上做了一个网站,一天盈利多少后,觉得 ...

  7. drf中View和router的详解

    Rest Framework 视图和路由 因为涉及到视图层面了,而且下面的例子会反复用到request.data,所以我决定带大家稍微看下源码,感兴趣的可以自己深入了解 无论是View还是APIVie ...

  8. include标签—引用文件路径

    今天给大家讲解的是include标签,在打代码的时候总会出现一些重复的样式,这个时候就可以用include标签来减少打代码的次数. 文件名index.html,代码: {% from 'macros/ ...

  9. python - 平方根格式化 + 字符串分段组合

    题目来源:python123 平方根格式化 描述 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪ ...

  10. 如何用python制作贪吃蛇以及AI版贪吃蛇

    用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...