DevOps系列文章之 GitLab CI/CD

【云原生】DevOps之使用Gitlab Runner进行CICD 在很久之前的文章中,我们已经搭建过了Jenkins+Docker+Harbor+SpringCloud微服务持续集成自动化部署,今天来介绍Gitlab原生的Gitlab Runner CICD功能。Gitlab实现CICD的方式有很多,比如通过Jenkins,通过Gitlab Runner等,今天主要介绍后者。Gitlab在安装的时候,就默认包含了Gitlab CI的能力,但是该能力只是用于协调作业,并不能真的去执行作业,因此需要搭配Gitlab Runner来作为执行器实现具体的CICD工作。 阅读详情

CICD是什么?

由于目前公司使用的gitlab,大部分项目使用的CICD是gitlab的CICD,少部分用的是jenkins,使用了gitlab-ci一段时间后感觉还不错,因此总结一下

介绍gitlab的CICD之前,可以先了解CICD是什么

我们的开发模式经历了如下的转变:瀑布模型->敏捷开发→DevOps(Development、Operations的组合词,是一组过程、方法与系统的统称)

后来随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法,关于持续集成、持续交付、持续部署,总结如下:

  • 持续集成的重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
  • 持续交付的目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
  • 持续部署是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。

持续集成的好处是什么?

持续集成可以使问题尽早暴露,从而也降低了解决问题的难度,持续集成无法消除bug,但却能大大降低修复的难度和时间。

持续交付的好处是什么?

持续交付的好处在于快速获取用户反馈;适应市场变化和商业策略的变化。开发团队保证每次提交的修改都是可上线的修改,那么决定何时上线,上线哪部分功能则完全由产品业务团队决定。

虽然持续交付有显著的优点,但也有不成立的时候,比如对于嵌入式系统的开发,往往需要软硬件的配合。

持续部署的好处是什么?

持续部署的目标是通过减少批量工作的大小,并加快团队工作的节奏,帮助开发团队在其开发流程中消除浪费。这使团队能够一直处于一种可持续的平稳流状态, 让团队更容易去创新、试验,并达到可持续的生产率

市面上的CI有很多,如果在github上搜一下ci工具,也会搜到很多,比如:

  1. Travis CI
  2. Circle CI
  3. Jenkins
  4. AppVeyor
  5. CodeShip
  6. Drone
  7. Semaphore CI
  8. Buildkite
  9. Wercker
  10. TeamCity

这里只介绍Gitlab-CI

Gitlab-CI

在这里插入图片描述

GitLab 是 CI/CD 领域的一个新手玩家,但它已经在 Forrester Wave 持续集成工具中占据了领先地位。在这样一个竞争对手众多而水平又很高的领域,这是一项巨大的成就。是什么让 GitLab CI 如此了不起?

  • 它使用 YAML 文件来描述整个管道。
  • 它还有一个功能叫 Auto DevOps,使比较简单的项目可以自动构建内置了若干测试的管道。
  • 使用 Herokuish 构建包来确定语言以及如何构建应用程序。有些语言还可以管理数据库,对于构建新的应用程序并在开发过程一开始就将其部署到生产环境中,这是一个很重要的功能。
  • 提供到 Kubernetes 集群的原生集成,并使用多种部署方法的一种(如基于百分比的部署和蓝绿部署)将应用程序自动部署到 Kubernetes 集群中。

除了 CI 功能之外,GitLab 还提供了许多补充功能,比如自动把 Prometheus 和你的应用程序一起部署,实现运行监控;使用 GitLab 问题(Issues)、史诗(Epics)和里程碑(Milestones)进行项目组合和项目管理;管道内置了安全检查,提供跨多个项目的聚合结果;使用 WebIDE 在 GitLab 中编辑代码的能力,它甚至可以提供预览或执行管道的一部分,以获得更快的反馈。

相关概念

pipeline(管道、流水线)

  • 一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程(Stage),比如自动构建、自动进行单元测试、自动进行代码检查等流程 ;
  • 任何提交或者 Merge Request 的合并都可以触发 Pipeline ;

Stage(构建阶段)

  • Stage表示构建阶段,就是上面提到的流程 ;
  • 可以在一次 Pipeline中定义多个 Stage;
  • Stage有如下特点 :
    • 所有 stages 会按照顺序运行,即当一个 stage 完成后,下一个 Stage才会开始
    • 只有当所有 Stage 成功完成后,该构建任务 Pipeline 才算成功
    • 如果任何一个 Stage失败,那么后面的 Stage 不会执行,该构建任务 (Pipeline) 失败

阶段是对批量的作业的一个逻辑上的划分,每个 pipeline都必须包含至少一个 Stage。多个 Stage是按照顺序执行的,如果其中任何一个 Stage失败,则后续的 Stage不会被执行,整个 CI 过程被认为失败。

Jobs(任务)

  • job表示构建工作,表示某个stage里面执行的工作 ;
  • 一个stage里面可以定义多个job ;
  • jobs有如下特点 :
    • 相同 stage 中的jobs 会并行执行
    • 相同 stage 中的 jobs 都执行成功时,该 stage 才会成功
    • 如果任何一个job 失败,那么该 stage 失败,即该构建任务 (Pipeline) 失败

举一个例子,比如下面这个图:

在这里插入图片描述

这里的四个Statge(阶段): Verify、Build、Dockerpush、Deploy四个,这四个阶段组成一条Pipeline

每个阶段都有一个job,所以总共四个job,也就是unit-test、java-package、docker-push、service-1这四个,当然,每个stage可以由多个job组成,比如下面这个图:

Job 的执行过程中往往会产生一些数据,默认情况下 GitLab Runner 会保存 Job 生成的这些数据,然后在下一个 Job 执行之前(甚至不局限于当次 CI/CD)将这些数据恢复。这样即便是不同的 Job 运行在不同的 Runner 上,它也能看到彼此生成的数据。

.gitlab-ci.yml中提供了 before_script 和 after_script 两个全局配置项。这两个配置项在所有 Job 的 script 执行前和执行后调用。

关于.gitlab-ci.yml、before_script、after_script是什么,先别急,在后面有介绍

在了解了 Job 配置的 script、before_script、after_script 和 cache 以后,可以将整个 Job 的执行流程用一张图概括:

在这里插入图片描述

所以了解了Pipeline、Stage、Jobs后,还有一个很重要的东西,就是Runner

Runner

Runner就像一个个的工人,而Gitlab-CI就是这些工人的一个管理中心,所有工人都要在Gitlab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,Gitlab-CI就会通知相应的工人执行软件集成脚本。如下图所示:

在这里插入图片描述

gitlab里面的runner叫Gitlab-Runner,Gitlab-Runner是配合Gitlab-CI进行使用的。一般地,Gitlab里面的每一个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工作。当这个工程的仓库代码发生变动时,比如有人push了代码,GitLab就会将这个变动通知Gitlab-CI。这时Gitlab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预定义好的执行脚本(也就是在Job执行流程那个图中所示的第三步:script),所以,Gitlab-Runner就是一个用来执行软件集成脚本script的东西。

Runner类型

Gitlab-Runner可以分类两种类型:Shared Runner(共享型)和Specific Runner(指定型)。

  • Shared Runner:这种Runner(工人)是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
  • Specific Runner:这种Runner(工人)只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。

关于Gitlab-runner的安装,会以单独一个文章进行介绍,注册runner会对应一个tag,记住这个tag;

.gitlab-ci.yml简介

.gitlab-ci.yml 文件被用来管理项目的 runner 任务,Gitlab CI通过.gitlab-ci.yml文件管理配置job,该文件定义了statge顺序、job应该如何触发和工作、执行什么脚本、如何构建pipeline等流程

该文件存放于仓库的根目录, 默认名为.gitlab-ci.yml

我们先看一个简单的例子:.gitlab-ci.yml

## 定义pipeline流程:verify->build->dockerpush->deploy
stages:
  - verify
  - build
  - dockerpush
  - deploy

#单元测试
unit-test:
  stage: verify # 属于哪个流程
  tags:
    - test-cicd # 在哪个runner上面执行,在注册runner可以自定义
  script:
    - echo unit-test # 执行脚本

#java编译
java-package:
  stage: build
  tags:
    - test-cicd
  script:
    - echo build

#push镜像
docker-push:
  stage: dockerpush
  tags:
    - test-cicd
  script:
    - echo docker-push

#deploy
service-1:
  stage: deploy
  tags:
    - test-cicd
  script:
    - echo deploy

该配置对应下面的pipeline,test-cicd是一个Specific Runner,执行脚本的类型是shell

在这里插入图片描述

所以,以unit-test这个job为例,点击该任务可以进入到log界面查看整个log执行流程

在这里插入图片描述

在这里插入图片描述

剩下的job的执行日志都大部分如此,就不一一列举了

几个重要的关键字解析

关于gitlab-ci.yml,里面有很多关键字配置,下面我主要列举一些比较常用的关键字

before_script和after_script

随着项目越来越大,Job 越来越多,Job 中包含的重复逻辑可能会让配置文件臃肿不堪。.gitlab-ci.yml 中提供了 before_script 和 after_script 两个全局配置项。这两个配置项在所有 Job 的 script 执行前和执行后调用。

before_script 和 script 在一个上下文中是串行执行的,after_script 是独立执行的。所以根据执行器(在runner注册的时候,可以选择执行器,docker,shell 等)的不同,工作树之外的变化可能不可见,例如,在before_script中执行软件的安装。

你可以在任务中定义 before_script,after_script,也可以将其定义为顶级元素,定义为顶级元素将为每一个任务都执行相应阶段的脚本或命令。

stages

stages的允许定义多个,灵活的场景阶段的pipline。定义的元素的顺序决定了任务执行的顺序。例如:

## 定义pipeline流程:verify->build->dockerpush->deploy
stages:
  - verify
  - build
  - dockerpush
  - deploy
  • build场景的任务将被并行执行。test、deploy 同理
  • build 任务成功后,test 执行。test 成功后,deploy 执行
  • 所有的都成功了,提交将会标记为成功
  • 任何一步任务失败了,提交标记为失败并之后的场景,任务都不回执行。

tags

tags可以从允许运行此项目的所有Runners中选择特定的Runners来执行jobs。

在注册Runner的过程中,我们可以设置Runner的标签,tags可通过tags来指定特殊的Runners来运行jobs:

#单元测试
unit-test:
  stage: verify # 属于哪个流程
  tags:
    - test-cicd # 在哪个runner上面执行,在注册runner可以自定义

script

script是一段由Runner执行的shell脚本,可以执行多个,例如:

job:
    script: mvn clean test

这个参数也可以使用数组包含好几条命令

job:
    script:
        - pwd
        - mvn clean test

only and except

only和except两个参数说明了job什么时候将会被创建:

  • only定义了job需要执行的所在分支或者标签
  • except定义了job不会执行的所在分支或者标签

以下是这两个参数的几条用法规则:

  • only和except如果都存在在一个job声明中,则所需引用将会被only和except所定义的分支过滤.
  • only和except允许使用正则
  • only和except可同时使用。如果only和except在一个job配置中同时存在,则以only为准,跳过except(从下面示例中得出)。
  • only和except允许使用特殊的关键字:branches,tags和triggers。
  • only和except允许使用指定仓库地址但不是forks的仓库(查看示例3)。

例子解析:

1.job将会只在issue-开头的refs下执行,反之则其他所有分支被跳过:

job:
    # use regexp
    only:
        - /^issue-.*$/
    # use special keyword
    except:
        - branches

2.job只会在打了tag的分支,或者被api所触发,或者每日构建任务上运行

job:
    # use special keywords
    only:
        - tags      # tag 分支 commit 之后触发
        - triggers  # API 触发
        - schedules # 每日构建触发

3.job将会在父仓库gitlab-org/gitlab-ce的非master分支有提交时运行。

job:
    only:
        - branches@gitlab-org/gitlab-ce
    except:
        - master@gitlab-org/gitlab-ce

when

when可以设置以下值:

  1. on_success - 只有前面stages的所有工作成功时才执行。 这是默认值。
  2. on_failure - 当前面stages中任意一个jobs失败后执行。
  3. always - 无论前面stages中jobs状态如何都执行。
  4. manual - 手动执行(GitLab8.10增加)。
stages:
- build
- cleanup_build
- test
- deploy
- cleanup
 
build_job:
  stage: build
  script:
  - make build
 
cleanup_build_job:
  stage: cleanup_build
  script:
  - cleanup build when failed
  when: on_failure
 
test_job:
  stage: test
  script:
  - make test
 
deploy_job:
  stage: deploy
  script:
  - make deploy
  when: manual
 
cleanup_job:
  stage: cleanup
  script:
  - cleanup after jobs
  when: always

脚本说明:

  • 只有当build_job失败的时候才会执行`cleanup_build_job 。
  • 不管前一个job执行失败还是成功都会执行`cleanup_job 。
  • 可以从GitLab界面中手动执行deploy_jobs。

manual:

  • 在GitLab的用户界面中显示该作业的“播放”按钮
  • 意味着deploy_job仅在单击“播放”按钮时才会触发job。

修改上面那个例子

stages:
  - verify
  - build
  - dockerpush
  - deploy
  - cleanup

before_script:
  - pwd
after_script:
  - echo after_script

#单元测试
unit-test:
  stage: verify
  tags:
    - test-cicd
  script:
    - echo unit-test

#java编译
java-package:
  stage: build
  tags:
    - test-cicd
  script:
    - echo build

#push镜像
docker-push:
  stage: dockerpush
  tags:
    - test-cicd
  script:
    - echo docker-push

#deploy
service-1:
  stage: deploy
  tags:
    - test-cicd
  script:
    - echo deploy
  when: manual # 手动触发job,只有点击按钮才会触发

cleanup_job:
  stage: cleanup
  script:
    - echo clean up
  when: always # 前面的job成功与否,都会执行该job

pipeline如下:

在这里插入图片描述

allow_failure

跟when一起控制job执行与否的配置还有一个就是allow_failure

allow_failure可以用于当你想设置一个job失败的之后并不影响后续的CI组件的时候。失败的jobs不会影响到commit状态。

下面的这个例子中,java-package和java-package2将会并列进行,如果java-package2失败了,它也不会影响进行中的下一个stage,因为这里有设置了allow_failure: true。

stages:
  - verify
  - build
  - dockerpush
  - deploy
  - cleanup

before_script:
  - pwd
after_script:
  - echo after_script

#单元测试
unit-test:
  stage: verify
  tags:
    - test-cicd
  script:
    - echo unit-test

#java编译
java-package:
  stage: build
  tags:
    - test-cicd
  script:
    - echo build

#java编译
java-package2:
  stage: build
  tags:
    - test-cicd
  script:
    - execute_script_that_will_fail # 该shell会导致job执行失败
  allow_failure: true # 不影响后面的任务进行

#push镜像
docker-push:
  stage: dockerpush
  tags:
    - test-cicd
  script:
    - echo docker-push

#deploy
service-1:
  stage: deploy
  tags:
    - test-cicd
  script:
    - echo deploy
  when: manual

cleanup_job:
  stage: cleanup
  tags:
    - test-cicd
  script:
    - echo clean up
  when: always

java-package2会执行错误

在这里插入图片描述

运行的pipeline如下,可见java-package2的执行错误

在这里插入图片描述

variables

GitLab CI允许你为.gitlab-ci.yml增加变量,该变量将会被设置入任务环境。通过两种方式可以引用

  • 美元符+大括号引用:${}
  • 美元符:$

示例如下:

variables:
  SOFT_VERSION: '1.0'
  TAG_NAME: 'xxx'
#构建镜像
docker-build:
  stage: dockerpush
  tags:
    - test-cicd
  script:
    - docker build -t $TAG_NAME:${SOFT_VERSION}

如果有些值不想在配置文件中显示,比如密码什么的,可以在代码仓库中setting->CICD->Variables 自定义变量,跟在.gitlab-ci.yml配置变量效果是一样的

在这里插入图片描述

variables的保留字

gitlab-ci有一些预定义变量,这些变量大部分以CI开头

预定义变量:
VariableGitLabRunnerDescription
CIall0.4标识该job是在CI环境中执行
CI_COMMIT_REF_NAME9.0all用于构建项目的分支或tag名称
CI_COMMIT_REF_SLUG9.0all先将$CI_COMMIT_REF_NAME的值转换成小写,最大不能超过63个字节,然后把除了0-9和a-z的其他字符转换成-。在URLs和域名名称中使用。
CI_COMMIT_SHA9.0allcommit的版本号
CI_COMMIT_TAG9.00.5commit的tag名称。只有创建了tags才会出现。
CI_DEBUG_TRACE9.01.7debug tracing开启时才生效
CI_ENVIRONMENT_NAME8.15alljob的环境名称
CI_ENVIRONMENT_SLUG8.15all环境名称的简化版本,适用于DNS,URLs,Kubernetes labels等
CI_JOB_ID9.0allGItLab CI内部调用job的一个唯一ID
CI_JOB_MANUAL8.12all表示job启用的标识
CI_JOB_NAME9.00.5.gitlab-ci.yml中定义的job的名称
CI_JOB_STAGE9.00.5.gitlab-ci.yml中定义的stage的名称
CI_JOB_TOKEN9.01.2用于同GitLab容器仓库验证的token
CI_REPOSITORY_URL9.0allgit仓库地址,用于克隆
CI_RUNNER_DESCRIPTION8.100.5GitLab中存储的Runner描述
CI_RUNNER_ID8.100.5Runner所使用的唯一ID
CI_RUNNER_TAGS8.100.5Runner定义的tags
CI_PIPELINE_ID8.100.5GitLab CI 在内部使用的当前pipeline的唯一ID
CI_PIPELINE_TRIGGEREDallall用于指示该job被触发的标识
CI_PROJECT_DIRallall仓库克隆的完整地址和job允许的完整地址
CI_PROJECT_IDallallGitLab CI在内部使用的当前项目的唯一ID
CI_PROJECT_NAME8.100.5当前正在构建的项目名称(事实上是项目文件夹名称)
CI_PROJECT_NAMESPACE8.100.5当前正在构建的项目命名空间(用户名或者是组名称)
CI_PROJECT_PATH8.100.5命名空间加项目名称
CI_PROJECT_PATH_SLUG9.3all$CI_PROJECT_PATH小写字母、除了0-9和a-z的其他字母都替换成-。用于地址和域名名称。
CI_PROJECT_URL8.100.5项目的访问地址(http形式)
CI_REGISTRY8.100.5如果启用了Container Registry,则返回GitLab的Container Registry的地址
CI_REGISTRY_IMAGE8.100.5如果为项目启用了Container Registry,它将返回与特定项目相关联的注册表的地址
CI_REGISTRY_PASSWORD9.0all用于push containers到GitLab的Container Registry的密码
CI_REGISTRY_USER9.0all用于push containers到GItLab的Container Registry的用户名
CI_SERVERallall标记该job是在CI环境中执行
CI_SERVER_NAMEallall用于协调job的CI服务器名称
CI_SERVER_REVISIONallall用于调度job的GitLab修订版
CI_SERVER_VERSIONallall用于调度job的GItLab版本
ARTIFACT_DOWNLOAD_ATTEMPTS8.151.9尝试运行下载artifacts的job的次数
GET_SOURCES_ATTEMPTS8.151.9尝试运行获取源的job次数
GITLAB_CIallall用于指示该job是在GItLab CI环境中运行
GITLAB_USER_ID8.12all开启该job的用户ID
GITLAB_USER_EMAIL8.12all开启该job的用户邮箱
RESTORE_CACHE_ATTEMPTS8.151.9尝试运行存储缓存的job的次数

更多配置,可以参考官方参考文档:CI/CD YAML syntax reference | GitLab

前端devops——利用gitlab实现CI/CD自动化部署 Git是一个用于代码的存储和版本控制开源的分布式版本控制系统。GitLab 则是一个用于仓库管理系统的开源项目。本篇文章将讲解如何用gitlab搭建一个私有化的代码管理平台,并实现CI/CD自动化部署。由于条件限制,本篇的所有操作都在windows下执行,并使用docker进行操作。 阅读详情

相关推荐

Auto DevOps之gitlab CI/CD

文章目录CI/CD介绍CI/CD的工作流程ci整体原理安装gitlab runner编写.gitlab-ci.yml关于更优雅的达成目标 CI/CD介绍 CI(Continuous Integration)跟CD(Continuous Delivery/Continuous Deployment)的出现主要是为了帮助我们在开发时能更早的发现代码中的bug,避免我们在这些bug上进行后续的开发(一错再错-.-),甚至将这些bug合并到qa或者staging环境去(错上加错)。 说人话就是,我们在提交代码到gi

scientificCommunity的博客 1545

gitlab-ci.yml关键字(五)tags 、only 、when

Gitlab CI 关键字

问白的博客 1万+

什么是devops,基于Gitlab从零开始搭建自己的持续集成流水线(Pipeline)

持续集成 devops pipeline CI/CD Gitlab 运维

Chengzi_comm的专栏 3万+

通过gitlab构建基于GitOps的微服务CICD流水线

通过gitlab构建基于GitOps的微服务CICD流水线,以gitlab+argocd+kubernetes为框架,以开源项目snowy为例,构建pipeline流水线

zhangper的博客 1380

Gitlab实现CI/CD,集成钉钉消息推送

文章目录(一)概念简介什么是CI/CD?什么是DevOps?做CI/CD,有什么好处?(二)实现CI配置Ranner.gitlab-ci.yml文件(三)代码评审安装SonarQube集成Gitlab(四)实现CD(五)钉钉消息推送 (一)概念简介 什么是CI/CD? 软件产业不成熟的时候,一个软件从零开始到最终交付,大概包括:规划、编码、构建、测试、发布、部署和维护。一个人可以完成上述所有工作。但随着软件的复杂度不断攀升,就开始出现了精细化分工。除了软件开发工程师之外,还有软件测试工程师,以及软件运维工

weixin_44861399的博客 3188

全网最全的Gitlab CI/CD自动化部署的介绍和教程,使用GitLab CI/CD自动化热部署SpringBoot或maven项目,GitLab CI/CD的Kubernetes集群的集成

在上家公司工作时,我提交代码到gitlab上。主管在合并代码时,会自动化部署到服务器上,当时对这个很感兴趣,于是潜心研究gitlab的自动化部署原理。本文是最全的Gitlab CI/CD自动化部署的介绍和教程,使用GitLab CI/CD自动化热部署SpringBoot或maven项目和GitLab CI/CD的Kubernetes集群的集成。......

念兮为美 2857

gitlab-ci.yml脚本打包报 some local refs could not be updated

登录对应打包环境的linux服务器上,使用find / -type d -name .git找到对应的gitlab-runner打包的文件夹,然后修改这个文件夹的名称,gitlab-runner就可以重新拉取了,这个问题就解决了。

qq_41458023的博客 605

PTPX功耗分析实战——从脚本配置到报告解读

本文详细介绍了PTPX功耗分析的全流程,从脚本配置到报告解读,帮助工程师快速掌握芯片设计中的功耗估算技术。文章涵盖了环境搭建、波形文件处理、功耗报告解析等关键环节,并提供了实战经验和优化建议,特别适合需要提升PTPX功耗分析效率的开发者。

weixin_29248313的博客 279

DevOps系列之总体目录

DevOps系列之Jenkins运维管理实践 01-Jenkins简介与应用场景 DevOps系列之Jenkins-01简介与应用场景_lee_yanyi的博客-优快云博客 02-Jenkins安装部署 03-Jenkins配置构建节点 04-Jenkins数据目录与用户项目管理 05-JenkinsPipline出体验 06-Jenkins项目与视图配置 07-Jenkins用户权限管理 08-Jenkins凭据管理与应用 09-BlueOcean应用与实践 De

lee_yanyi的博客 842

小龙虾 OpenClaw 安装全攻略:本地部署 AI 智能体一步到位

OpenClaw(昵称小龙虾)是一款 MIT 开源协议的本地优先 AI 智能体执行网关,支持多平台接入、本地部署,能实现自然语言驱动的设备自动化操作,区别于纯对话 AI,可直接操控系统执行实际任务,数据全程本地存储更安全。本文带来 2026 最新版 OpenClaw 安装教程,适配 Windows/macOS/Linux 全系统,新手也能一键搞定。

lujiawei00的专栏 1973

STM32使用 jansson 处理 Json格式字符

STM32 Json 字符的创建和解析1、Json简介2、jansson库的下载安装和报错解决2.1、下载安装2.2、STM32工程文件中导入jansson库2.3、报错解决2.4、修改堆栈空间3、Json 字符的创建4、Json 字符的解析4.1 纯键值对4.2、键的值是一个对象4.3、键的值是一个数组   STM32处理json字符串一般不常见,大部分都是不需要处理的数据,但是在一些通信中需要处理上传或者下传的数据,就别比如在物联网中,有一部分数据就是以json格式传输的,那么就需要对数据经行解析。我简

青烨慕容 7417

Gitlab CI/CD 简单介绍

基础概念 CI: CD : DevOps: Job Pipeline

wangjiang 3万+

电压电流双闭环PFC单相PWM整流

电压电流双闭环PFC单相整流。仿真及代码

xht2403267701的博客 6051

基于GitLab+Jenkins的DevOps

Jenkins是Java语言开发的一款开源 CI/CD 软件,用于自动化各种任务,包括项目的拉取、项目构建、以及项目部署等功能。中文官网地址:https://www.jenkins.io/zh/首先开发人员代码提交到仓库;然后Jenkins 作为持续集成工具,使用 Git 工具到仓库拉取代码到集成服务器,再配合 JDK,Maven 等完成代码编译、测试、审查、打包等工作;最后Jenkins把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用;

小白的博客 1672

揭秘CAS:深入理解与应用解析

在并发编程中,Compare-And-Swap(CAS)机制作为一种无锁算法,凭借其高效性和避免线程阻塞的优势,受到广泛关注。CAS不仅在底层实现上有着重要地位,还在实际开发中发挥着关键作用。本文将从CAS的工作原理、在Java中的实现及其增强机制来回顾和加深理解一下CAS。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 85万+

医疗影像配准与融合: 使用MATLAB对医学影像进行配准和融合,实现不同影像模态之间的对准和结构信息融合等

医疗影像配准与融合是医学影像处理的重要技术,它用于将不同来源、不同时间或不同模态的医学影像进行配准和融合,以获得更加完整、准确的患者解剖信息。基于MATLAB的医疗影像配准与融合可以帮助医生更准确地诊断疾病,制定更有效的治疗方案。医疗影像配准与融合是医学影像处理的关键技术,它对于提高医学影像诊断和治疗的准确性至关重要。MATLAB是一种功能强大的数学和科学计算软件,它可以为医疗影像配准与融合提供强大的工具和支持。

走向CTO的路上... 711

DevOps工具链:GitLab CI/CD实践

GitLab CI/CD 是一个基于GitLab仓库的持续集成服务工具,它能够帮助开发团队自动化代码的构建、测试、部署等过程。GitLab CI/CD 的核心优势在于它的易用性和集成性,用户可以通过简单的配置文件(.gitlab-ci.yml)来定义整个CI/CD流程。GitLab CI/CD作为一种DevOps工具链,在软件开发中具有重要的应用价值。通过自动化构建、测试和部署,它能够提高软件开发的效率和质量。然而,它也面临着配置复杂性、资源消耗等问题。未来的研究可以关注如何简化配置过程,优化资源使用。

2501_92487701的博客 588

EtherCAT主站SOEM -- 0 -- 该EtherCAT主站SOEM专栏后续安排

SOEM(Simple Open EtherCAT Master)是一个开源的EtherCAT主站库,允许开发者构建自定义的EtherCAT主站应用程序。EtherCAT是一种实时以太网通信协议,广泛应用于工业自动化和机器控制领域。开源性质:SOEM是一个开源项目,这意味着开发者可以自由地查看、修改和分发代码。这使其成为工业自动化领域的一个强大工具,可以根据具体需求进行定制。EtherCAT主站实现:SOEM库提供了一个完整的EtherCAT主站实现,允许主站与多个EtherCAT从站设备进行通信。

常驻客栈的博客--嵌入式EtherCAT 6661

企业级私有GitLab实战:从Docker部署到 DevOps 工作流完整指南

为什么选择自建GitLab?因为它不仅仅是代码仓库,更是完整的DevOps平台!本文将手把手带你搭建和管理企业级GitLab环境。

李赛赛的专栏 3230

STM32F103待机模式原理与低功耗实战指南

待机模式是嵌入式系统实现超低功耗的核心机制,其本质是通过切断内核域电源(VDD/VDDA)实现微安级静态电流,区别于睡眠/停止模式的状态保持特性。原理上依赖电源域隔离、WKUP引脚事件唤醒与RTC备份域协同,技术价值在于支撑电池供电设备长达数年续航。典型应用场景包括物联网传感器节点、智能电表、便携医疗设备等对功耗极度敏感的终端。工程落地需严格遵循GPIO模拟输入配置、唤醒标志清除、备份域解锁等关键步骤,避免因漏电或误唤醒导致实测电流超标。本文以STM32F103为例,深入解析待机模式的硬件基础与HAL库实现

weixin_32999557的博客 66

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

《实现 DevOps 平台(2) · GitLab CI/CD 交互》

本系列文章,打算介绍一下如何开发一个企业常用的 DevOps 工具。此系列的第二篇,先介绍基础的 GitLab CI/CD,具体是什么样的内容。。技术栈:后端 SpringCloud + 前端 Vue/NuxtGitLab CI/CD 是 GitLab 提供的持续集成和持续交付/部署工具,它允许你自动化构建、测试和部署你的应用程序。它基于 YAML 文件定义的流水线,可以轻松地配置和管理你的 CI/CD 流程。自动化构建: 自动构建你的代码,包括编译、打包、测试等。

山人行 1559

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【基于 GitLab 的 CI/CD 实践】01、GitLab CI/CD 基础概念

GitLab CI/CD 基础概念!!!

GG Bond 的博客 3346

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

CI/CD 工具选型:Jenkins 还是 GitLab CI/CD?

作者 | Rahul Jain策划 | 田晓旭近十年来,持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)领域都取得...

zz_jesse的博客 4487

GitLab+Jenkins搭建DevOps一体化运维平台

GitLab+Jenkins搭建DevOps一体化运维平台、使用FileBeat+Logstash+ES实现分布式日志收集

weixin_38277138的博客 9416

MLOps 的CI/CD VS DevOps 的CI/CD

一、使用MLOps应用到,可以看做是“数据驱动业务”与“AI模型落地”两大流程的集成视图万能作业流水线Organize(管数据)---->Engineer(做特征)---->Science(建模型)--->(上线)→(看效果)采集MES传感器-->实时流式处理--->训练缺陷分类模型--->部署在边缘网关--->产线大屏报警POS交易数据(Batch)------>特征聚合 → 销量时序模型 → 每日自动输出补货建议到 ERP。二、传统的ML交付 vs MLOps 交付。

weixin_50614575的博客 842

GitLab入门教程:打开DevOps全流程的大门

GitLab是一个基于Git的完整DevOps平台,提供代码托管、CI/CD工具链和项目管理等全生命周期解决方案。本文介绍了GitLab的核心优势,包括一站式DevOps平台、内置CI/CD、权限管理等。指导用户如何注册账号、创建项目、进行基本Git操作,以及使用Merge Request、CI/CD管道、Issues和Wiki等协作功能。还分享了进阶技巧如环境变量设置、GitLab Pages和Container Registry的使用,并提供了常见避坑指南。GitLab通过整合开发流程中的各个环节,帮助

niuma8888的博客 1029
上一篇: DevOps系列之 Python操作数据库
下一篇: DevOps系列文章之 GitLab Runner
Coder_Boy_
博客等级 码龄10年 2804粉丝 819原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值