2023年7月4日发(作者:)
持续集成---⾃动化部署gitlab的cicd简介和在服务器中部署使⽤名词概念解释持续集成互联⽹软件的开发和发布,已经形成了⼀套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)持续集成是⼀种软件开发实践,即团队开发成员经常集成他们的⼯作,通常每个成员每天⾄少集成⼀次,也就意味着每天可能会发⽣多次集成。每次集成都通过⾃动化的构建(包括编译,发布,⾃动化测试)来验证,从⽽尽早地发现集成错误。⾃动化构建 举例来说 我们提交代码后,只要满⾜某个条件,就会触发⾃动合并代码,⾃动编译代码,⾃动测试代码,以及⾃动发布到 相应部署环境中。持续集成指的是,频繁地(⼀天多次)将代码集成到主⼲。它的好处主要有两个。(1)快速发现错误。每完成⼀点更新,就集成到主⼲,可以快速发现错误,定位错误也⽐较容易。(2)防⽌分⽀⼤幅偏离主⼲。如果不是经常集成,主⼲⼜在不断更新,会导致以后集成的难度变⼤,甚⾄难以集成。持续集成的⽬的,就是让产品可以快速迭代,同时还能保持⾼质量。它的核⼼措施是,代码集成到主⼲之前,必须通过⾃动化测试。只要有⼀个测试⽤例失败,就不能集成。Martin Fowler说过,“持续集成并不能消除Bug,⽽是让它们⾮常容易发现和改正。”想要做到持续集成,就需要 做到⾃动化构建,能够实现⾃动化构建的软件很多,⽐如Jenkins,⽽我们⽤来保存代码的gitlab本⾝也提供了⾃动化构建的功能 gitlab-ci。ci/cdci/cd主要完成以下两个⼯作.ci(持续构建)代码提交后触发⾃动化的单元测试,代码预编译,构建镜像,上传镜像等.cd(持续发布)持续发布则指将构建好的程序发布到各种环境,如预发布环境,正式环境.GitlabGitLab是⼀个利⽤Ruby on Rails开发的开源应⽤程序,实现⼀个⾃托管的Git项⽬仓库,可通过Web界⾯进⾏访问公开的或者私⼈项⽬。它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它⾮常易于浏览提交过的版本并提供⼀个⽂件历史库。团队成员可以利⽤内置的简单聊天程序(Wall)进⾏交流。它还提供⼀个代码⽚段收集功能可以轻松实现代码复⽤,便于⽇后有需要的时候进⾏查找。Gitlab-CIGitlab-CI是GitLab Continuous Integration(Gitlab持续集成)的简称。从Gitlab的8.0版本开始,gitlab就全⾯集成了Gitlab-CI,并且对所有项⽬默认开启。只要在项⽬仓库的根⽬录添加.⽂件,并且配置了Runner(运⾏器),那么每⼀次合并请求(MR)或者push都会触发CIpipeline。Gitlab-runnerGitlab-runner是.脚本的运⾏器,Gitlab-runner是基于Gitlab-CI的API进⾏构建的相互隔离的机器(或虚拟机)或者k8s中的pod。GitLab Runner 不需要和Gitlab安装在同⼀台机器上,但是考虑到GitLab Runner的资源消耗问题和安全问题,也不建议这两者安装在同⼀台机器上。Gitlab Runner分为两种,Shared runners和Specific runners。Specific runners只能被指定的项⽬使⽤,Shared runners则可以运⾏所有开启 Allow shared runners选项的项⽬。PipelinesPipelines是定义于.中的不同阶段的不同任务。我把Pipelines理解为流⽔线,流⽔线包含有多个阶段(stages),每个阶段包含有⼀个或多个⼯序(jobs),⽐如先购料、组装、测试、包装再上线销售,每⼀次push或者MR都要经过流⽔线之后才可以合格出⼚。⽽.正是定义了这条流⽔线有哪些阶段,每个阶段要做什么事。Badges徽章,当Pipelines执⾏完成,会⽣成徽章,你可以将这些徽章加⼊到你的⽂件或者你的⽹站。特点gitlab ci/cd具有以下特性:跨平台⽀持只要⽀持go语⾔的平台均可以在上⾯进⾏ci,⽬前基本涵盖了⼤部分的操作系统多语⾔⽀持构建时是通过脚本触发,因此基本上⽀持所有的语⾔Pipeline可以通过不同的阶段形成⼯作流⽀持docker可以构建docker镜像,同时也⽀持触发在Kubernetes允许安装配置前提—安装gitlab对于安装gitlab有⼀点提醒,就是建议使⽤官⽅推荐的集成安装包的⽅式安装,通过源码安装会有很多坑踩不完。参考链接:/duyusean/article/details/80011540/p/ade38a53b1ac/p/62042884安装和配置gitlab-ci-multi-runner添加Gitlab的官⽅源并安装:# For Debian/Ubuntucurl -L /install/repositories/runner/gitlab-ci-multi-runner/ | sudo bash# For CentOScurl -L /install/repositories/runner/gitlab-ci-multi-runner/ | sudo bash# For Debian/Ubuntusudo apt-get install gitlab-ci-multi-runner# For CentOSsudo yum install gitlab-ci-multi-runner注册RunnerRunner需要注册到Gitlab才可以被项⽬所使⽤,⼀个gitlab-ci-multi-runner服务可以注册多个Runner。根据相应提⽰输⼊ 对应我们起的名称 和 给的域名即可。注意:如果想要使⽤docker runner,则需要安装docker。(可选)curl -sSL / | sh因为docker需要linux内核在3.10或以上,安装前可以通过uname -r查看Linux内核版本。$ sudo gitlab-ci-multi-runner registerPlease enter the gitlab-ci coordinator URL (e.g. )/ciPlease enter the gitlab-ci token for this runnerxxx-xxx-xxxPlease enter the gitlab-ci description for this runnermy-runnerINFO[0034] fcf5c619 Registering runner… succeededPlease enter the executor: shell, docker, docker-ssh, ssh?dockerPlease enter the Docker image (eg. ruby:2.1):maven:3-jdk-8INFO[0037] Runner registered successfully. Feel free to start it, but if it’srunning already the config should be automatically reloaded!说明:1、gitlab ci的地址以及token,从你要配置该runner到哪个项⽬,就去gitlab下该项⽬⾸页右侧设置—》CI/CD Pipelines—》SpecificRunners下可以找到,也可以注册称共享runner。2、gitlab-ci tags这个很重要,在项⽬构建流程yaml⽂件⾥⾯指定tag,就是匹配使⽤哪个tag的runner,这⾥我定义了hwy,回头再配置⽂件⾥⾯就指定这个tag。3、executor:执⾏者可以有很多种,这⾥我们使⽤docker,⽅便构建执⾏。4、Docker image:构建Docker image时填写的image名称,根据项⽬代码语⾔不同,指定不同的镜像。我这⾥项⽬是java语⾔的,所以我使⽤官⽅maven:3-jdk-8镜像。若是runner注册成功,此时到我们项⽬⾸页右侧设置—》CI/CD Pipelines—》Runners activated for this project就可以看到我们刚注册的runner了。如图:紧接着最后⼀步,启动我们刚注册的Runnersudo gitlab-ci-multi-runner start更新Runner如果需要更新Runner,只需要执⾏以下脚本:# For Debian/Ubuntusudo apt-get updatesudo apt-get install gitlab-ci-multi-runner# For CentOSsudo yum updatesudo yum install gitlab-ci-multi-runnerRunner⾼级配置通过gitlab-ci-multi-runner register注册的Runner配置会存储在/etc/gitlab-runner/中,如果需要修改可直接编辑该⽂件。更多配置参数参考官⽹:concurrent = 4check_interval = 0[[runners]]name = “test”url = “/ci“token = “your-token”executor = “docker”[] tls_verify = false image = “node:4.5.0” privileged = false disable_cache = false volumes = [“/cache”][][etes] host = “” cert_file = “” key_file = “” ca_file = “” image = “” namespace = “” privileged = false cpus = “” memory = “” service_cpus = “” service_memory = “”到这⾥我们的Runner就安装配置好了,接下来是对项⽬根⽬录中.进⾏配置。配置构建任务在项⽬根⽬录添加.⽂件关于.⽂件的各项配置和格式参考官⽹⽰例:variables: # This will supress any download for dependencies and plugins or upload messages which would clutter the console log. # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work. MAVEN_OPTS: "-=.m2/repository -4jMavenTransferListener=WARN -teTime=true -ss=true" # As of Maven 3.3.0 instead of this you may define these options in `.mvn/` so the same config is used # when running from the command line. # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins. MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true" IMAGE_NAME: /myimages/web
stages: - package - build - deploy# Cache downloaded dependencies and plugins between builds.# To keep cache across branches add 'key: "$CI_JOB_NAME"'cache: paths: - .m2/repository# Validate merge requests using JDK8package:package: image: maven:3-jdk-8 stage: package script: - 'mvn $MAVEN_CLI_OPTS package' artifacts: paths: - target/*.jar
build-sit: stage: build tags: - common only: - dev image: /public/docker-with-awscli:latest script: - eval $(aws ecr get-login --no-include-email --region cn-northwest-1) - docker build -t $IMAGE_NAME:sit . - docker push $IMAGE_NAME:sit variables: AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} AWS_DEFAULT_REGION: ${AWS_REGION} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}build-beta: stage: build tags: - common only: - master image: /public/docker-with-awscli:latest script: - eval $(aws ecr get-login --no-include-email --region cn-northwest-1) - docker build -t $IMAGE_NAME:beta . - docker push $IMAGE_NAME:beta variables: AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} AWS_DEFAULT_REGION: ${AWS_REGION} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}build-prod: image: /public/docker-with-awscli:latest tags: - common stage: build only: - tags script: - eval $(aws ecr get-login --no-include-email --region cn-northwest-1) - docker pull $IMAGE_NAME:beta - docker tag $IMAGE_NAME:beta $IMAGE_NAME:$CI_COMMIT_TAG - docker push $IMAGE_NAME:$CI_COMMIT_TAG variables: AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} AWS_DEFAULT_REGION: ${AWS_REGION} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}deploy: image: name: 123/k8s-kubectl:v1.14.4 entrypoint: [""] stage: deploy only: - tags script: - sed -i "s/_TAG_/${CI_COMMIT_TAG}/" - kubectl apply -f --record tags: - aws-online-k8s
deploy-test: image: name: 123/k8s-kubectl:v1.9.9 entrypoint: [""] stage: deploy only: - test tags: - aws-test-new-k8s script: - kubectl delete --ignore-not-found=true -f --namespace=sit - kubectl create -f --namespace=sit
deploy-beta: image: name: 123/k8s-kubectl:v1.14.4 entrypoint: [""] stage: deploy only: - beta - master tags: - eks-beta-k8s script: - kubectl delete --ignore-not-found=true -f - kubectl create -f 说明:⼀、variables 中可以放⼀些相关的参数,在下⾯的配置中复⽤,⽐如IMAGE_NAME,使⽤时如下: script: - eval $(aws ecr get-login --no-include-email --region cn-northwest-1) - docker pull $IMAGE_NAME:beta⼆、关于⽂件的路径在安装Runner时,我们说到⼯作⽬录,在⼯作⽬录下有⼀个builds⽬录,Runner的⼀切⼯作都在这个⽬录下⾯进⾏。每次提交代码Runner就会⾃⼰fetch下代码, 当前⽬录 跟我们项⽬代码的路径⼀致,⽐如 我的项⽬中 有这个⽂件,则使⽤时,直接⽤当前⽬录即可。如下:sed -i "s/_TAG_/${CI_COMMIT_TAG}/" 也可以是sed -i "s/_TAG_/${CI_COMMIT_TAG}/" ./三、关于GitLab CI中的stages,有如下⼏个特点:1、所有 Stages 会按照顺序运⾏,即当⼀个 Stage 完成后,下⼀个 Stage 才会开始2、只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功3、如果任何⼀个 Stage 失败,那么后⾯的 Stages 不会执⾏,该构建任务 (Pipeline) 失败4、stages的名字我们可以根据⾃⼰的需求进⾏定义,只要与后⾯的步骤stage字段对应就会运⾏四、tagstags⽤于指定使⽤哪⼀个runner进⾏运⾏五、imageimage指定在这个runner上使⽤什么镜像进⾏运⾏六、onlyonly⽤于指定 分⽀和tag版本的操作,只有对应上分⽀的命名或者 打tag的操作时 才会触发运⾏七、script具体运⾏的脚本⼋、variablesvariables是 运⾏ci操作时 环境变量中注⼊的 参数,⽐如 aws的key,这样可以保证 我们的runner运⾏ci的环境有 操作s3的权限。参考资料/p/705428ca1410/a/1197/zh/docs/installation-configuration/steps/gitlab-runner//entry/5ad8627d6fb9a045d639b043/p/705428ca1410/aixiaoyang168/article/details/72168834/aixiaoyang168/article/details/72168834/many/tps:///post/5ad47bddf265da23945ff4c8/post/5adb655c5c8ea/p/b1e098cdb46b/a/1199
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688437330a137718.html
评论列表(0条)