网站后台有安全狗,移动互联网营销公司,安徽住建和城乡建设厅官网,自己做网站的公司在当今快速迭代的软件开发环境中#xff0c;DevOps#xff08;开发运维一体化#xff09;已经成为提升软件交付效率和质量的关键。而GitLab#xff0c;作为一个全面的开源DevOps平台#xff0c;不仅提供了强大的版本控制功能#xff0c;还集成了持续集成/持续交付(CI/CD)…在当今快速迭代的软件开发环境中DevOps开发运维一体化已经成为提升软件交付效率和质量的关键。而GitLab作为一个全面的开源DevOps平台不仅提供了强大的版本控制功能还集成了持续集成/持续交付(CI/CD)、容器编排、监控等一系列工具为团队提供了从代码管理到产品发布的端到端解决方案。本文将重点介绍GitLab在源码管理方面的应用以及如何通过提交流水线实践实现持续集成。
一、概述
GitLab是一个自我托管的Git仓库管理系统它提供了免费的公开和私有仓库、问题追踪、维基等功能并支持团队协作从项目规划到监控安全的全流程管理。GitLab通过Web界面简化了Git的使用提高了开发效率。同时GitLab还提供了自己的持续集成(CI)系统允许用户轻松管理项目并获得可视化的构建和测试结果。
二、GitLab安装部署
单独准备服务器采用Docker安装docker安装参照
https://blog.csdn.net/heijunwei/article/details/128706198?spm1001.2014.3001.5501
1、查看GitLab镜像
docker search gitlab
2、拉取GitLab镜像
docker pull gitlab/gitlab-ce
2、准备docker-compose.yml文件
version: 3.9
services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url http://ip:postgitlab_rails[gitlab_shell_ssh_port] 2224ports:- post:post- 2224:2224volumes:- ./config:/etc/gitlab- ./logs:/var/log/gitlab- ./data:/var/opt/gitlab
4、启动容器需要稍等一小会……
docker-compose up -d 5、查看root用户密码并登陆
docker exec -it gitlab cat /etc/gitlab/initial_root_password 6、第一次登录后需要修改密码 三、GitLab工作流
GitLab是一个分布式版本控制系统可以实现代码的存储、版本控制和协作。它使用Git作为代码仓库支持团队多人协作和开发保证代码的完整性。
1、创建项目组和项目
在GitLab上面可以使用项目组对同一组织或者类型的项目进行分类用项目组来管理项目用项目来存储实际的代码。
1.1创建项目组
项目组(Group)是GitLab中管理项目的主要方式。在项目组下可以创建多个项目并定义自己的成员和权限。项目组通常是由一个团队或部门的人一起使用的他们可以共享代码并协同处理任务。
选择Menu→Groups→Create group创建项目组如图 如果存在其他版本控制系统如GitHub等可以使用Import group导入其他系统中的项目组。这里选择Create group创建项目组 输入项目组的名称。项目组类型分为Public公开、Private私有、Internal内部访问这里我们选择Private类型项目组单击Create group按钮完成创建如图 1.2创建项目
项目(project)是GitLab中的每个代码库它们与项目组相关联。每个项目都有一个Git存储库用于存储原始的应用代码和其他文件。 2、分支开发策略
通过标准化的流程和最佳实践确保代码组织清晰、版本控制高效、变更管理有序从而提高软件开发的质量、效率和可维护性支持团队协作和持续集成/持续部署流程最终实现项目的长期成功和发展
参加文档https://blog.csdn.net/heijunwei/article/details/143820569?spm1001.2014.3001.5502
三、提交流水线实践
提交流水线是指在代码提交阶段自动触发一系列构建、测试和部署任务以确保每次提交都能够被及时验证并给出反馈。使用GitLab和Jenkins的集成可以轻松实现提交流水线。 1、Jenkins配置
Jenkins Pipeline需要被GitLab触发。使用Generic Webhook插件为Jenkins Pipeline开启Webhook特性。
1.1创建Pipeline
创建一个新的Jenkins Pipeline名称为devops-demo-service类型选择“流水线
1.2开启触发器
开启Generic Webhook Trigger触发器添加一个Post connect parameters用于捕获GitLab传递的数据如分支名称、项目地址等。这里定义的变量名称为WebHookData 上述配置将GitLab传递的数据存储到WebHookData变量中在Jenkins Pipeline中可以通过变量的方式解析变量的值。配置Jenkins Pipeline的触发Token。为了保证Token的唯一性这里采用当前项目名称 开启Debug调试模式如图中的两个选项有助于排查集成问题。例如集成时因为变量、参数导致的问题可以在Jenkins Pipeline构建日志中显示出来。 1.3触发测试
当我们配置好触发器后可以使用curl命令进行测试触发命令如下。
curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?token devops-demo-service
2、GitLab配置
GitLab内置Webhook特性可以在代码库开启并配置对应的事件以触发Webhook
2.1 项目开启Webhook
进入代码库导航到Settings单击左侧的Webhooks进入配置页面。在URL文本框中填写Jenkins的触发地址在Trigger选项组中选择Push events触发事件如图所示。 可以看到当前代码库具有Push events时就会触发Jenkins。代码提交、创建标签都属于Push events。确认参数无误后单击Add webhook按钮完成添加如图所示。可以看到当前代码库具有Push events时就会触发Jenkins。代码提交、创建标签都属于Push events。确认参数无误后单击Add webhook按钮完成添加如图所示。 提示如果提示“Url is blocked: Requests to the local network are not allowed”错误信息需要开启GitLab的local network配置。导航到Admin管理页面选择Settings单击Network进入配置页面。选中“Allow requests to the local network from web hooks and services”复选框。单击Save changes按钮保存配置
2.2 测试Webhook
进入代码库导航到Settings单击Webhooks进入配置页面。将鼠标滚动到页面最下方可以看到已添加的Webhook。在Test下拉列表框中选择Push events选项可以进行模拟触发如图所示。 2.3 编写Pipeline
在Jenkins Pipeline中需要编写脚本以解析Webhook数据、下载代码并执行构建、测试和部署任务。通过读取Webhook数据中的项目地址、分支名称、提交ID等信息可以确定需要构建的代码版本和分支。然后使用Git命令下载代码并执行后续的构建和测试任务。
2.3.1 解析Webhook数据
编写Jenkins Pipeline读取GitLab参数并解析出分支名称和仓库地址。代码如下
//GitLab传递的数据{}
println(${WebHookData})//数据格式化
webHookData readJSON text: ${WebhookData}//提取仓库信息
env.srcUrl webHookData[project][git_http_url] //项目地址
env.branchName webHookData[ref] - refs/heads/ //分支
env.commitId webHookData[checkout_sha] //提交ID
env.commitUser webHookData[user_username] //提交人
env.userEmail webHookData[user_email] //邮箱currentBuild.description Trigger by Gitlab \n branch: ${env.branchName}
//增加构建描述
currentBuild.displayName ${env.commitId} //将构建ID变为提交ID
将上述代码保存到Jenkins Pipeline中然后在GitLab项目中提交代码测试是否可以正常触发。提交代码后查看Jenkins构建结果。当出现了新的构建说明配置成功。
2.3.2 下载代码
首先在Jenkins系统中添加一个凭据用于存储下载代码库的账户信息 接下来是提交流水线中的核心逻辑—下载代码。打开片段生成器生成下载功能的代码,在项目分支中提交代码然后导航到Jenkins项目页面可以看到正在运行的构建。
pipeline {agent anystages {stage(CheckOut) {steps{script {checkout([$class :GitSCM,branches:[[name:env.branchName]],extensions:[],userRemoteConfigs:[[credentialsId:gitlabadmin-user,url:env.srcUrl]]])sh ls -l }}}}}
2.4 Pipeline优化
为了避免不必要的构建任务可以对Jenkins的Generic Webhook Trigger进行优化。例如可以设置触发构建的条件如只有当指定分支更新时才触发构建或者只有在特定标签添加时才构建。这样可以减轻服务器的负担提高系统的稳定性和可靠性。
如果要过滤新建分支和标签的触发构建可以在Generic Webhook中添加3个变量分别是object_kind、before、after以获取当前的提交信息如下图。 通过正则表达式配置触发条件在Expression文本框中填写^push\s(?!0{40}).{40}\s(?!0{40}).{40}$在Text文本框中填写$object_kind $before $after。该表达式匹配push请求只有在after和before的值都不是40个0时才会触发构建当值为40个0时删除分支或者新建分支操作过滤条件配置如图