#### 1.1 新建Kubernetes集群:

#### 1.2 新建命名空间gito
我们将会把gitlab和jenkins全部部署到此命名空间下
2. 创建GitLab应用 (可选项,可以对接已有GitLab环境)
容器服务控制台上依次点击
市场
->
应用目录
->
gitlab-ce
:
在
参数
中设置externalUrl和gitlabRootPassword后选择gitops命名空间并创建应用,本次实践中
externalUrl
设置为
http://ls-gitlab.example.com/
, 如果没有dns解析的话,可以在创建成功后直接使用ip
容器服务控制台上依次点击
路由与负载均衡
->
服务
查看gitlab应用的访问地址,大约2分钟后可访问gitlab并登陆:
3. 设置GitLab并上传示例源码项目
3.1 新建private group application
创建private group application:
3.2 新建并上传private project application-demo
创建private project application-demo, 示例源码地址:
https://code.aliyun.com/haoshuwei/application-demo.git
上传源码到自己的源码仓库之前需要注意修改application-demo.yaml文件中的cbf5fdabb9f6a4d5897190935ab3d3155字段为您自己的k8s集群id:
- host: INGRESS_HOST.cbf5fdabb9f6a4d5897190935ab3d3155.cn-beijing.alicontainer.com
从master新建一个分支latest:
设置master和latest分支只有管理员才能merge和push代码的操作:
3.3 新建private group builds
3.4 新建并上传private project preview-pipeline staging-pipeline production-pipeline
preview-pipeline示例源码地址为:
https://code.aliyun.com/haoshuwei/preview-pipeline.git
staging-pipeline示例源码地址为:
https://code.aliyun.com/haoshuwei/staging-pipeline.git
production-pipeline示例源码地址为:
https://code.aliyun.com/haoshuwei/production-pipeline.git
上传3个构建项目之前需要替换以下字段:
IMAGE_REPO
: 应用容器镜像要上传到哪个镜像仓库,镜像仓库地址
dingTalkToken
: 钉钉通知所使用的钉钉机器人accessToken
Fetch Git Repo
->
credentialsId
: 用于Jenkins拉取git项目的证书名称,需要在Jenkins中创建名为gitlab的证书
Fetch Git Repo
->
url
: Jenkins拉取git repo的url
preview-pipeline:
staging-pipeline
production-pipeline
3.5 注册一个普通开发者用户developer
管理员用户登录后将developer用户添加为application组的developer member:
此时developer用户只有application组下projects的权限, 没有builds组的权限:
3.6 生成一个apiToken用于Jenkins配置gitlabConnection
生成并复制保存apiToken:
4. 创建Jenkins应用
容器服务控制台上依次点击
市场
->
应用目录
->
jenkins
:
在
参数
中设置Master.AdminPassword的值,并更改rbac.install的值为true,选择gitops命名空间后点击创建:
容器服务控制台上依次点击
路由与负载均衡
->
服务
查看jenkins应用的访问地址,大约1分钟后可访问jenkins并登陆:
5. 配置Jenkins并创建构建任务
5.1 配置gitlabConnection
系统管理 -> 系统设置 -> Gitlab:
配置完毕后点击 Save 保存。
5.2 新建构建任务preview-pipeline
5.2.1 新建任务,输入名称选择流水线类型并点击创建:
5.2.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
点击 Advanced 进行高级选项配置如图所示:
复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。
5.2.3 Pipeline区域配置preview-pipeline构建项目的git repo
完成配置后点击 保存。
5.3 新建构建任务staging-pipeline
5.3.1 新建任务,输入名称选择流水线类型并点击创建:
5.3.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
点击 Advanced 进行高级选项配置如图所示:
复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。
5.3.3 Pipeline区域配置staging-pipeline构建项目的git repo
完成配置后点击 保存。
5.4 新建构建任务production-pipeline
5.4.1 新建任务,输入名称选择流水线类型并点击创建:
5.4.2 Build Triggers 区域勾选 GitLab 插件配置如图所示:
点击 Advanced 进行高级选项配置如图所示:
复制并保存GitLab webhook URL和Secret token的值用于在Gitlab上配置webhook。
5.4.3 Pipeline区域配置production-pipeline构建项目的git repo
完成配置后点击 保存。
5.5 创建docker registry auth secret:
$ docker login registry.cn-hangzhou.aliyuncs.com
$ kubectl -n gitops create secret generic jenkins-docker-cfg --from-file=/root/.docker/config.json
5.6 创建clusterrolebinding授予serviceaccount default对gitops命名空间的管理权限
clusterrolebinding.yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gitops-cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: gitops
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
$ kubectl create -f clusterrolebinding.yaml
5.7 设置匿名用户的可读权限
系统管理 ->全局安全管理-> Authorization -> 勾选 Allow anonymous read access 并保存:
6. 配置GitLab webhook
进入application-demo项目的webhook配置页面:
6.1 配置触发jenkins job preview-pipeline的触发器
所图所示:
6.2 配置触发jenkins job staging-pipeline的触发器
所图所示:
6.3 配置触发jenkins job production-pipeline的触发器
所图所示:
7. GitOps模型发布应用
7.1 developer用户做以下操作
7.1.1 在application-demo项目上新建一个开发分支features/change-index-1
7.1.2 修改src/main/resources/static/index.html中的kubernetes.svg为jenkins.svg并提交修改
7.1.3 创建请求合并到latest分支的Merge Request
Open MergeRequest的动作会触发jenkins job preview-pipeline的自动构建,并完成以下stages:
(1)拉取
http://xxx.xxx.xxx/builds/preview-pipeline.git
项目并按照Jenkins定义的内容继续执行以下内容
(2)Fetch Git Repo: 拉取应用源码项目
http://xxx.xxx.xxx.xxx/application/application-demo.git
(3)Maven Build: 打包
(4)Maven Test: 测试
(5)Docker Build And Publish: docker镜像构建和推送
(6)Kubectl Deploy: 部署应用到Kubernetes集群(本示例使用的是本集群的一个动态创建的命名空间preview-xxx)
(7)Post Actions: 钉钉通知
developer可以查看Merge Request页面的内容
点击可跳转至jenkins构建日志:
7.1.4 构建完成后可以看到一个application-demo应用的预览页面
点击预览应用:
也可以直接在钉钉群里查看应用访问链接等信息:
7.1.5 应用预览验证后, developer可以申请管理员接受此合并
7.2 管理员合并指向latest分支的MergeRequest
合并MR:
Accept MR的动作或触发staging-pipeline的构建,拉取application-demo项目的latest分支代码并构建和部署到staging命名空间下
查看钉钉通知并访问staging环境中的application-demo应用:
7.3 管理员创建latest到master分支的Merge Request并合并此指向master的Merge Request
Accept MR的动作或触发production-pipeline的构建,拉取application-demo项目的master分支代码并构建和部署到production命名空间下
查看钉钉通知并访问production环境中的application-demo应用:
集度汽车 Flink on native k8s 的应用与实践
在集度汽车实时计算的发展过程中,Flink 起到了至关重要的作用。Flink 的低延迟,高吞吐,支撑着整个公司的实时数据流。
蜻蜓:GitLab结合fortify实现自动化代码扫描实践
在甲方做安全的同学可能会有一项代码审计的工作,通常需要从gitlab把代码拉取下来,然后使用代码审计工具进行扫描,然后对结果进行人工确认;
在这个流程中需要做的事情比较繁琐,比如说gitlab如何配置token、如何自动化把代码拉取到本地、如何调用fortify实现批量扫描等诸多繁琐问题。
本篇文章以甲方安全代码安全建设为主线,分享如何让代码审计工具自动化扫描gitlab仓库里的代码。并且提供了一个便捷的实验环境供大家测试。
Gitlab的落地与应用(二)测试代码接入Gitlab实践
Git&SVN对比、优缺点分析;Git目录、核心概念讲解;Git环境搭建、配置免密访问;测试代码接入gitlab、代码管理;
实践分享!GitLab CI/CD 快速入门
本文给大家讲述如何使用 GitLab CI/CD 构建、测试、部署 Spring Boot 应用,将产物运行在 Rainbond 上。
Semgrep结合GitLab实现代码审计实践-服务端
为了能让开发者时时刻刻关注安全问题,我在gitlab服务端放了一个钩子,这个钩子主要是将本次提交的代码文件进行了检测,遇到可能存在安全风险的问题将其输出出来,这样开发者能够对培训的内容有更深的感受,更注重编码时候的安全问题。
基于docker-compose的Gitlab CI/CD实践&排坑指南
经过长时间实操验证,终于完成基于Gitlab的CI/CD实践,本次实践的坑位很多, 实操过程尽量接近最佳实践(不做hack, 不做骚操作),记录下来加深理解。