gitlab

CI/CD 可观察性-基于grafana
CI/CD 可观察性-基于grafana
背景 什么是 CI/CD 可观察性,我们如何为更多可观察的管道铺平道路?可观察性不仅仅是观察错误或监控基本健康信号。相反,它会更深入,以便您可以了解系统内行为背后的“原因”。 CI/CD 可观察性在其中发挥着关键作用。这是关于深入了解持续集成和部署系统的整个管道——查看每个代码签入、每个测试、每个构建和每个部署。当您组合所有这些数据时,您可以全面了解整个软件交付过程,揭示效率领域、瓶颈和潜在故障点。 CI/CD 可观察性是可观察性的一个子集,专注于软件开发生命周期。它有助于以多种方式确保流程可靠、相关且易于理解: 积极主动解决问题。没有可观察性,我们只能对问题做出反应。有了它,我们可以在问题升级之前预见并解决问题,从而节省时间和资源。 更好的决策。通过了解 CI/CD 流程的细节,团队可以在资源分配、流程变更和工具采用方面做出更明智的决策。 建立信心。通过对 CI/CD 管道的清晰洞察,开发人员、测试人员和运营团队可以对他们发布的软件更有信心。它减少了“对部署的恐惧”并培育了持续改进的文化。 问责制和透明度。可观察性确保 CI/CD 流程的每一步都是可追溯的。这意味着,如果出现问题,可以追溯到其源头,促进问责并帮助解决根本原因,而不仅仅是解决症状。 问题 CI/CD 系统并非没有自身的挑战。破坏 CI/CD 管道平稳运行的常见问题是不稳定、性能下降和配置错误。 Flakiness 片状 片状测试是 CI/CD 方程中不可预测的变量。当测试在代码没有任何更改的情况下产生不同的结果(通过或失败)时,该测试被认为是“不稳定的”。出现片状现象通常有以下几个原因: 外部依赖和环境问题。如果这些依赖项不能始终可用,则依赖于外部服务、数据库或特定环境设置的测试可能会产生不可预测的结果。如果环境设置不正确或意外拆除,也可能会发生这种情况。从本质上讲,先前测试的残留或外部服务的不可用可能会扭曲结果,使其不可靠。 比赛条件。当系统的行为依赖于不可控事件的顺序或时间时,就会出现这种情况。特别是在异步操作中,如果管理不当,事件序列的不可预测性可能会导致偶发故障。 Performance regression 性能回归 随着 CI/CD 流程的发展并变得更加复杂,系统性能可能会开始下降。这种回归可能不会立即显现出来,但长期的累积效应可能会阻碍 CI/CD 管道的效率。以下是常见的原因: 测试执行效率低下。某些测试可能会运行比必要的时间更长的时间,这可能是因为冗余操作、设置的等待时间太长或查询效率低下。这在集成和端到端测试中尤其明显。 代码和测试膨胀。当我们添加更多功能和测试而不解决技术债务或进行优化时,我们的构建时间可能会增加。有些测试从添加之日起可能会很慢。如果不解决这些问题,整个构建和测试过程可能会比需要的时间更长。 Misconfigurations 配置错误 即使是最深思熟虑的管道也可能因配置错误而失败。这可能导致: 次优测试计划。 CI/CD 管道遵循一条关键路径,其中每个步骤都依赖于前一个步骤。如果步骤未设置为按正确的顺序执行或正在等待非依赖项,则可能会导致效率低下。 次优容量规划。未配置足够的资源或对所需工作负载规划不当可能会导致管道出现瓶颈。如果 CI/CD 流程在关键阶段没有必要的能力,则可能会减慢整个工作流程或导致中断和故障。 DORA 指标 Deployment frequency 部署频率 (DF):组织成功发布到生产环境的频率 Mean Lead time for changes 变更平均前置时间 (MLT):从代码提交到代码在生产中运行所需的时间 Mean time to recover 平均恢复时间 (MTTR):发生服务事件或缺陷后恢复服务需要多长时间 Change failure rate 变更失败率 (CFR):导致失败的变更百分比 优化 CI/CD 可观察性 目前GraCIe 是 Grafana 正在使用的应用程序插件,旨在为用户提供一种简单的方法来了解他们的 CI/CD 系统。它非常适合评估构建性能、识别测试结果中的不一致以及分析构建输出。该应用程序简化了这些流程,旨在轻松提供有关管道的见解。
sonarqube docker安装和配置
sonarqube docker安装和配置
背景 我是在ubuntu服务器安装docker服务,我已经安装好了docker和docker-compose服务,这里我就不写这些服务的安装过程,直接开始安装sonarqube服务 安装 sonarqube服务器 1.执行脚本文件 config.sh 1#!/bin/bash 2sysctl -w vm.max_map_count=262144 3sysctl -w fs.file-max=65536 4ulimit -n 65536 5ulimit -u 4096 6# # 永久改变 7# echo "vm.max_map_count=262144" >> /etc/sysctl.conf 8# sysctl -p 1sh config.sh 2.执行docker-compose文件 1version: '3' 2services: 3 postgres: 4 image: postgres:15 5 container_name: postgres 6 ports: 7 - 5432:5432 8 volumes: 9 - ./sonar/postgres/postgresql:/var/lib/postgresql 10 - ./sonar/postgres/data:/var/lib/postgresql/data 11 environment: 12 TZ: Asia/Shanghai 13 POSTGRES_USER: user #数据库用户 14 POSTGRES_PASSWORD: password #数据库密码 15 POSTGRES_DB: sonar 16 17 sonarqube: 18 depends_on: 19 - postgres 20 image: sonarqube:9.
SSH 通过 443 端口连接 GitHub
SSH 通过 443 端口连接 GitHub
背景 GitHub 提供了两种协议供用户使用 Git 连接—— SSH 和 HTTPS。理论上我可以随意选择两者之一连接到我在 GitHub 上的代码仓库,无论是将云端的仓库 clone 到本地,还是将本地的修改 push 到云端。然而,出于一些奇奇怪怪的原因,我所在的办公网络环境禁止了 22 端口,而 22 端口正是 GitHub 提供 SSH 访问的端口号。尽管可以换用 HTTPS 协议,但无论如何将我电脑上的所有代码仓库的上游都从 git@github.com:... 修改称 https://github.com/... 仍然是一个繁重的体力活。 解决 为了让Git也能通过上述端口用 SSH 访问 GitHub,我们为上述 SSH 连接方式设置一个别名。首先找到SSH的配置文件,它的路径一般是~/.ssh/config,如果这个文件不存在的话也可以创建一个。然后,在其中增加以下内容: 1Host github.com 2 HostName ssh.github.com 3 User git 4 Port 443 其中,Host 是别名,HostName 是实际的域名地址,Port 是端口号。因为我希望当我在用 SSH 连接 github.com 时,实际访问的是 ssh.github.com,所以 Host 和 HostName 分别设置成这两个域名(注意不要颠倒顺序)。 测试连接 1ssh -vT git@github.com
JOBCHER BLOG
ansible 命令
ansible 命令 Inventory:Ansible 管理的主机信息,包括 IP 地址、SSH 端口、账号、密码等 Modules:任务均有模块完成,也可以自定义模块,例如经常用的脚本。 Plugins:使用插件增加 Ansible 核心功能,自身提供了很多插件,也可以自定义插件。例如 connection 插件,用于连接目标主机。 Playbooks:“剧本”,模块化定义一系列任务,供外部统一调用。Ansible 核心功能。 编辑主机清单 1[webservers] 2192.168.0.20 ansible_ssh_user=root ansible_ssh_pass=’200271200’ 3192.168.0.21 ansible_ssh_user=root ansible_ssh_pass=’200271200’ 4192.168.0.22 ansible_ssh_user=root ansible_ssh_pass=’200271200’ 5 6[dbservers] 710.12.0.100 810.12.0.101 1sed -i "s/#host_key_checking = .*/host_key_checking = False/g" /etc/ansible/ansible.cfg 命令行 1ansible all -m ping 2ansible all -m shell -a "ls /root" -u root -k 常用模块 在目标主机执行 shell 命令。 shell 1- name: 将命令结果输出到指定文件 2 shell: somescript.sh >> somelog.txt 3- name: 切换目录执行命令 4 shell: 5 cmd: ls -l | grep log 6 chdir: somedir/ 7- name: 编写脚本 8 shell: | 9 if [ 0 -eq 0 ]; then 10 echo yes > /tmp/result 11 else 12 echo no > /tmp/result 13 fi 14 args: 15 executable: /bin/bash copy 将文件复制到远程主机。 1- name: 拷贝文件 2 copy: 3 src: /srv/myfiles/foo.
JOBCHER BLOG
Git 规则
Git 飞行规则(Flight Rules) 编辑提交(editting commits) 我刚才提交了什么? 我的提交信息(commit message)写错了 我提交(commit)里的用户名和邮箱不对 我想从一个提交(commit)里移除一个文件 我想删除我的的最后一次提交(commit) 删除任意提交(commit) 我尝试推一个修正后的提交(amended commit)到远程,但是报错: 我意外的做了一次硬重置(hard reset),我想找回我的内容 暂存(Staging) 我需要把暂存的内容添加到上一次的提交(commit) 我想要暂存一个新文件的一部分,而不是这个文件的全部 我想把在一个文件里的变化(changes)加到两个提交(commit)里 我想把暂存的内容变成未暂存,把未暂存的内容暂存起来 未暂存(Unstaged)的内容 我想把未暂存的内容移动到一个新分支 我想把未暂存的内容移动到另一个已存在的分支 我想丢弃本地未提交的变化(uncommitted changes) 我想丢弃某些未暂存的内容 分支(Branches) 我从错误的分支拉取了内容,或把内容拉取到了错误的分支 我想扔掉本地的提交(commit),以便我的分支与远程的保持一致 我需要提交到一个新分支,但错误的提交到了 main 我想保留来自另外一个 ref-ish 的整个文件 我把几个提交(commit)提交到了同一个分支,而这些提交应该分布在不同的分支里 我想删除上游(upstream)分支被删除了的本地分支 我不小心删除了我的分支 我想删除一个分支 我想从别人正在工作的远程分支签出(checkout)一个分支 Rebasing 和合并(Merging) 我想撤销 rebase/merge 我已经 rebase 过, 但是我不想强推(force push) 我需要组合(combine)几个提交(commit) 安全合并(merging)策略 我需要将一个分支合并成一个提交(commit) 我只想组合(combine)未推的提交(unpushed commit) 检查是否分支上的所有提交(commit)都合并(merge)过了 交互式 rebase(interactive rebase)可能出现的问题 这个 rebase 编辑屏幕出现’noop’ 有冲突的情况 Stash 暂存所有改动 暂存指定文件 暂存时记录消息 使用某个指定暂存 暂存时保留未暂存的内容 杂项(Miscellaneous Objects) 克隆所有子模块 删除标签(tag) 恢复已删除标签(tag) 已删除补丁(patch) 跟踪文件(Tracking Files) 我只想改变一个文件名字的大小写,而不修改内容 我想从 Git 删除一个文件,但保留该文件 配置(Configuration) 我想给一些 Git 命令添加别名(alias) 我想缓存一个仓库(repository)的用户名和密码 我不知道我做错了些什么 其它资源(Other Resources) 书(Books) 教程(Tutorials) 脚本和工具(Scripts and Tools) GUI 客户端(GUI Clients) 编辑提交(editting commits) 我刚才提交了什么?
JOBCHER BLOG
git版本控制
git 版本控制 版本回退 1.查看 git 提交历史 1#查看git提交历史 2git log 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数 1git log --pretty=oneline 2.回退到上一个版本 Git必须知道当前版本是哪个版本,在 Git 中,用HEAD表示当前版本,也就是最新的提交b534d741..(注意我的提交 ID 和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上 100 个版本写 100 个^比较容易数不过来,所以写成HEAD~100 1git reset --hard HEAD^ 最新的那个版本已经看不到了,可以顺着往上找,找到那个版本的 ID 1git reset --hard c8275ca Git 在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git 仅仅是把HEAD从指向update 1┌────┐ 2│HEAD│ 3└────┘ 4 │ 5 └──> ○ update 6 │ 7 ○ Create README.md 8 │ 9 ○ init 改为指向 Create README.md: 1┌────┐ 2│HEAD│ 3└────┘ 4 │ 5 │ ○ update 6 │ │ 7 └──> ○ Create README.
JOBCHER BLOG
CICD 概念
CICD 概念 DevOps Devlopment 和 Operation 的组合词 规划-》代码-》构建-》测试-》发布-》部署-》运营-》监控-》再次规划 devOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。 DevOps 希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗。更加高效的协同工作。良好的闭环可以大大增加整体的产出。 CICD 持续集成 持续部署 持续集成 持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。“持续集成”源自于极限编程(XP),是 12 最初的 12 种实践之一 Ci 需要具备这些: 1全面的自动化测试,这是实践持续集成和持续部署的基础,同时,选择合适的自动化测试工具也极其重要; 2灵活的基础设施。容器,虚拟化的存在让开发人员和QA不必再大费周折 3版本控制工具。如git,cvs,svn等 4自动化的构建和软件发布流程工具,如 Jenkins,flow.ci; 5反馈机制,如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。
JOBCHER BLOG
git使用方法
git 使用方法 一、git 安装配置 Debian/Ubuntu 1 apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ 2 libz-dev libssl-dev 3 4 apt-get install git 5 6 git --version 7 git version 1.8.1.2 Centos/RedHat 1 yum install curl-devel expat-devel gettext-devel \ 2 openssl-devel zlib-devel 3 4 yum -y install git-core 5 6 git --version 7 git version 1.7.1 二、git 拉取异常如何重新拉取 1.同一文件有修改,产生冲突。 先将本地修改存储起来 使用git stash命令,这样本地的所有修改就都被暂时存储起来 。其中stash@{0}就是刚才保存的标记。后续可以通过此标记访问。 再次拉取代码 1git pull 还原暂存的内容 1git stash pop stash@{0} 解决冲突 在存在冲突的文件中,Updated upstream 和=====之间的内容为拉取下来的代码,=====和stashed changes之间的内容就为本地修改的代码。解决完成之后,就可以正常的提交了。 5.
JOBCHER BLOG
Jenkins 安装与使用
Jenkins 安装与使用 代码在本地修改—-》提交到远程 gitlab—-》触发 jenkins 整个自动化构建流程(打包,测试,发布,部署) 安装 docker 安装 docker docker 安装 jenkins 1docker run \ 2 -u root \ 3 -d \ 4 -p 8080:8080 \ 5 -p 50000:50000 \ 6 -v jenkins-data:/var/jenkins_home \ 7 -v /etc/localtime:/etc/localtime:ro \ 8 -v /var/run/docker.sock:/var/run/docker.sock \ 9 --restart=always \ 10 jenkinsci/blueocean 访问 http://localhost:8080 显示初始密码 1docker exec -ti <容器名称> sh 2cat /var/jenkins_home/secrets/initialAdminPassword 工作流程 先定义一个流水线项目,指定项目的 git 位置 git 位置自动拉取代码 解析拉取代码里面的 Jenkinsfile 文件 按照 Jenkinsfile 指定的流水线开始加工项目 Jenkinsfile 语法 基础语法,在仓库创建一个 Jenkinsfile 文件
JOBCHER BLOG
Gitlab批量导出用户
Gitlab 批量导出用户 登陆 Gitlab 服务器进行数据库登陆、数据查询及信息导出操作。 操作步骤 根据配置文件,定位数据库相关信息 1cat /var/opt/gitlab/gitlab-rails/etc/database.yml 查看 Gitlab 对应的系统用户 1cat /etc/passwd | grep gitlab 切换用户 gitlab-psql 1su - gitlab-psql 登陆数据库(-h 指定 host,-d 指定数据库) 使用第 1 步获取的信息 1psql -h /var/opt/gitlab/postgresql -d gitlabhq_production (1) 查看帮助信息 1gitlabhq_production=# \h (2) 查看数据库 1gitlabhq_production=# \l (3) 查看库中的表(执行命令后,按回车键显示更多表信息) 1gitlabhq_production=# \dt (4) 通过筛查,可在库中找到 users 表,相关用户信息都记录在表中! 1gitlabhq_production=# \d users (5) 查看表信息 1gitlabhq_production=# SELECT * FROM users; (6) 查看 users 表中的 name 字段 1gitlabhq_production=# SELECT name FROM users; (7)登出数据库
JOBCHER BLOG
ansible 安装和部署
ansible 安装和部署 Ansible 默认通过 SSH 协议管理机器. 安装 ansible 下载安装 1# ubuntu 安装 2apt-get install software-properties-common 3apt-add-repository ppa:ansible/ansible 4apt-get update 5apt-get install ansible 6# centos 安装 7yum install ansible 检查文件 1#检查 2ansible --version ansible 配置 添加主机 1vim /etc/ansible/hosts 2#添加你需要添加的被控主机地址和IP 配置 SSH key 授权访问 1# 控制主机生成ssh 密钥对(一路回车) 2ssh-keygen -t rsa 3# 复制公钥IP到被控主机 4ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.2 5ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 6ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.4 7# ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中。 更改 ansible 配置 1vim /etc/ansible/ansible.cfg 2 3#禁用每次执行ansbile命令检查ssh key host 4host_key_checking = False 5# 开启日志记录 6log_path = /var/log/ansible.
JOBCHER BLOG
gitlab与github同步项目
gitlab 与 github 同步项目 本地同步项目 1git clone 创建一个同名的项目,命令行终端中添加 remote 地址 1git remote add githubOrigin git@github.com:sjtfreaks/blog.git 项目同步到 Github 上 1git push -u githubOrigin main 分别同步 github 与 gitlab 即可 1git push -u githubOrigin main 2git push -u origin main