k8s笔记7.3--基于gitlab、jenkins、helm、k8s的CI/CD
k8s笔记7.3--基于gitlab、jenkins、helm、k8s的CI/CD介绍软件配置流程案例注意事项说明介绍在云环境下,服务运维和发布通常会用到gitlab、jenkins、helm、k8s 和 harbor,因此基于这些工具搭建一套CI/CD 流程是非常有必要的。笔者在学习jenkins的时候,基于gitlab-jenkins-helm-k8s搭建了一套CI/CD,现将相关步骤记录在此
k8s笔记7.3--基于gitlab、jenkins、helm、k8s的CI/CD
1 介绍
在云环境下,服务运维和发布通常会用到gitlab、jenkins、helm、k8s 和 harbor,因此基于这些工具搭建一套CI/CD 流程是非常有必要的。笔者在学习jenkins的时候,基于gitlab-jenkins-helm-k8s搭建了一套CI/CD,现将相关步骤记录在此处,以便于后续查阅、相关读者参考。
2 软件配置
- 搭建k8s集群
笔者在学习k8s的时候搭建过多种k8s环境,并提供了完整的安装包,因此可以直接参考笔者如下博文搭建集群:
k8s笔记6–使用kubeadm快速部署k8s集群 v1.19.4
k8s笔记8–快速部署k8s集群 v1.19.4–calico网络 - 搭建私有helm仓库
helm搭建需要nginx提供http服务,通过helm客户端深沉基础chart包,并与k8s交互,具体搭建流程参考笔者博文:
k8s笔记7.2–搭建私有helm仓库 - 搭建gitlab
测试期间可以直接使用docker安装gitlab,对应的目录最好配置为777,否则可能存在一些文件权限问题,导致gitlab为unhealthy状态。
若忘记系统密码,那么可以参考官方文档修改密码,具体见: gitlab 修改密码docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 8081:80 --publish 22:22 \ --name gitlab \ --volume /home/xg/soft/gitlab/config:/etc/gitlab \ --volume /home/xg/soft/gitlab/logs:/var/log/gitlab \ --volume /home/xg/soft/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
- 搭建jenkins
此处直接使用docker安装jenkins,jenkins实例启动后接入web界面按需选择插件即可。docker run -d --name=jenkins -u 0 -p 8080:8080 -p 50000:50000 -v /home/xg/soft/jenkins_home:/var/jenkins_home jenkins:2.60.3 部分插件需要升级(建议升级到最新,否则有些插件无法使用) wget https://mirrors.huaweicloud.com/jenkins/war/2.299/jenkins.war docker stop jenkins docker cp jenkins.war jenkins:/usr/share/jenkins/jenkins.war docker start jenkins
3 CI/CD流程案例
- 新建helm的chart xgnginx
笔者搭建好helm仓库后,新建了一个xgnginx的chart,具体见 k8s笔记7.2–搭建私有helm仓库–3 chart 更新发布和案例 - gitlab 新建repo
新建gitlab repo: test-ops-trigger
添加 Jenkinsfile 文件,内容如下;
其中全局使用 agent any, Deploy 使用label 为 xg 的node(该node可以直接使用helm、能直接访问 k8s)pipeline { agent any stages { stage('Build') { steps { sh 'echo "Hello World, trigger main"' retry(3) { sh 'touch /home/flakey-deploy.sh' } timeout(time: 3, unit: 'MINUTES') { sh 'rm /home/flakey-deploy.sh' } sh ''' pwd ls -lah ''' } } stage('Deploy') { agent { node { label 'xg' } } steps { sh 'helm install repo xgrepo/xgnginx --namespace sre-test' sh 'sleep 5' sh 'helm list --namespace sre-test' } } stage('Test') { steps { sh 'echo "Success!"; exit 0' } } } post { always { echo 'This will always run' } success { echo 'This will run only if successful' } failure { echo 'This will run only if failed' } unstable { echo 'This will run only if the run was marked as unstable' } changed { echo 'This will run only if the state of the Pipeline has changed' echo 'For example, if the Pipeline was previously failing but is now successful' } } }
- 配置 jenkins
- 新建pipeline ops-trigger-pipeline-main
- General 中配置 GitLab Repository Name
- Build Triggers 中配置gitlab 相关配置和 Secret token
- Pipeline 中配置对应的Repo URL 和认证用户名密码以及对应的分支
- 配置 gitlab webhook
找到 test-ops-trigger 项目,在Settings -> Webhooks 中添加URL、Secret token,并选择Trigger方式,如下图所示;
配置成功后,点击 test 出现 Hook executed successfully: HTTP 200 即为配置成功。
- 更新gitlab repo触发jenkins流程
clone git repo,更新配置任意一个文件,然后push上去,发现可以正常触发 jenkins 的 pipeline,如下图所示:
4 注意事项
-
jenkins 更新插件异常
笔者在 dashboard -> pluginManager -> advanced ->Check now 中更新plugin,发现报错 Signature verification failed in update site ‘default’ (show details), 且几乎没有几个可用的plugin,这通常是Update Site的URL和认证有问题导致的。
此时需要:
1)找到正确的URL
2)更新对应的update-center.crt文件
3)重启jenkins并重新Check now更新plugin可以从Jenkins 插件中心国内镜像源发布 和 使用国内镜像加速你的jenkins 中找到可用的URL,并通过起github找到对应的crt文件,一般在 github repo的某个目录内部。
笔者这里提供一个亲测可用的华为插件镜像和对应的crt文件
URL: https://cdn.jsdelivr.net/gh/lework/jenkins-update-center@master/updates/huawei/update-center.json crt: wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center@master/rootCA/update-center.crt -O war/WEB-INF/update-center-rootCAs/update-center.crt
-
gitlab 测试报错 403 No valid crumb was included in the request
很多使用配置好了jenkins流程和gitlab 钩子后,测试的时候报错,提示 403 No valid crumb was included in the request,这种情况一般是jenkins的认证没有处理好导致的。对于早期版本,很多博友反馈可以通过 全局安全配置 前端配置即可,但是笔者使用的最新版本有所变化,前端选项也不同了因此在前端配置也无效。需要更改jenkins的启动配置,在exec java 后面加上如下配置,然后重启jenkins即可vim /usr/local/bin/jenkins.sh -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
如图所示:
-
若涉及到多种不同执行环境的时候,需要配置多个agent,并将不同的stage绑定到不同的agent上,例如笔者Deploy对应的agent xg就可以访问 helm和 k8s 环境。
5 说明
- 软件环境
nginx:1.19.6
gitlab-ce:latest
helm v3.6.1
jenkins 2.299
k8s 1.19.4
ubuntu 20.04(主机) - 参考文档
基于 Jenkins、Gitlab、Harbor、Helm 和 Kubernetes 的 CI/CD(一)
Jenkins配置Gitlab自动触发构建
解决Error:403 No valid crumb was included in the request-最新版本不支持该选项
测试ok–Error 403 No valid crumb was included in the request 报错解决 容器化jenkins关闭CSRF
Jenkins 插件中心国内镜像源发布
使用国内镜像加速你的jenkins
修改gitlab密码
更多推荐
所有评论(0)