用 GitLab 做 CI/CD 是什么感觉,太强了!!

(点击上方公众号,可快速关注)


来自:废物大师兄 | 责编:乐乐

链接:cnblogs.com/cjsblog/p/12256843.html


GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发:


  • Continuous Integration (CI)  持续集成

  • Continuous Delivery (CD)     持续交付

  • Continuous Deployment (CD)   持续部署


  • 持续集成的工作原理是将小的代码块推送到Git仓库中托管的应用程序代码库中,并且每次推送时,都要运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。


    持续交付和部署相当于更进一步的CI,可以在每次推送到仓库默认分支的同时将应用程序部署到生产环境。


    这些方法使得可以在开发周期的早期发现bugs和errors,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。


    GitLab CI/CD 由一个名为 .gitlab-ci.yml 的文件进行配置,改文件位于仓库的根目录下。文件中指定的脚本由GitLab Runner执行。


    1. GitLab CI/CD 介绍


    软件开发的持续方法基于自动执行脚本,以最大程度地减少在开发应用程序时引入错误的机会。从开发新代码到部署新代码,他们几乎不需要人工干预,甚至根本不需要干预。


    它涉及到在每次小的迭代中就不断地构建、测试和部署代码更改,从而减少了基于已经存在bug或失败的先前版本开发新代码的机会。


    Continuous Integration(持续集成)


    假设一个应用程序,其代码存储在GitLab的Git仓库中。开发人员每天都要多次推送代码更改。对于每次向仓库的推送,你都可以创建一组脚本来自动构建和测试你的应用程序,从而减少了向应用程序引入错误的机会。


    这种做法称为持续集成,对于提交给应用程序(甚至是开发分支)的每项更改,它都会自动连续进行构建和测试,以确保所引入的更改通过你为应用程序建立的所有测试,准则和代码合规性标准。


    Continuous Delivery(持续交付)


    持续交付是超越持续集成的更进一步的操作。应用程序不仅会在推送到代码库的每次代码更改时进行构建和测试,而且,尽管部署是手动触发的,但作为一个附加步骤,它也可以连续部署。此方法可确保自动检查代码,但需要人工干预才能从策略上手动触发以必输此次变更。


    Continuous Deployment(持续部署)


    与持续交付类似,但不同之处在于,你无需将其手动部署,而是将其设置为自动部署。完全不需要人工干预即可部署你的应用程序。


    1.1. GitLab CI/CD 是如何工作的


    为了使用GitLab CI/CD,你需要一个托管在GitLab上的应用程序代码库,并且在根目录中的.gitlab-ci.yml文件中指定构建、测试和部署的脚本。


    在这个文件中,你可以定义要运行的脚本,定义包含的依赖项,选择要按顺序运行的命令和要并行运行的命令,定义要在何处部署应用程序,以及指定是否 要自动运行脚本或手动触发脚本。


    为了可视化处理过程,假设添加到配置文件中的所有脚本与在计算机的终端上运行的命令相同。


    一旦你已经添加了.gitlab-ci.yml到仓库中,GitLab将检测到该文件,并使用名为GitLab Runner的工具运行你的脚本。该工具的操作与终端类似。


    这些脚本被分组到jobs,它们共同组成一个pipeline。一个最简单的.gitlab-ci.yml文件可能是这样的:


    before_script:  - apt-get install rubygems ruby-dev -yrun-test:  script:    - ruby --version 6


    before_script属性将在运行任何内容之前为你的应用安装依赖,一个名为run-test的job(作业)将打印当前系统的Ruby版本。二者共同构成了在每次推送到仓库的任何分支时都会被触发的pipeline(管道)。


    GitLab CI/CD不仅可以执行你设置的job,还可以显示执行期间发生的情况,正如你在终端看到的那样:



    为你的应用创建策略,GitLab会根据你的定义来运行pipeline。你的管道状态也会由GitLab显示:



    最后,如果出现任何问题,可以轻松地回滚所有更改:



    1.2. 基本 CI/CD 工作流程


    一旦你将提交推送到远程仓库的分支上,那么你为该项目设置的CI/CD管道将会被触发。


    GitLab CI/CD 通过这样做:


  • 运行自动化脚本(串行或并行) 代码Review并获得批准

  • 构建并测试你的应用

  • 就像在你本机中看到的那样,使用Review Apps预览每个合并请求的更改

  • 代码Review并获得批准

  • 合并feature分支到默认分支,同时自动将此次更改部署到生产环境

  • 如果出现问题,可以轻松回滚


  • 通过GitLab UI所有的步骤都是可视化的:



    1.3. 深入了解CI/CD基本工作流程


    如果我们深入研究基本工作流程,则可以在DevOps生命周期的每个阶段看到GitLab中可用的功能,如下图所示:



    1. Verify


  • 通过持续集成自动构建和测试你的应用程序

  • 使用GitLab代码质量(GitLab Code Quality)分析你的源代码质量

  • 通过浏览器性能测试(Browser Performance Testing)确定代码更改对性能的影响

  • 执行一系列测试,比如Container Scanning , Dependency Scanning , JUnit tests

  • 用Review Apps部署更改,以预览每个分支上的应用程序更改


  • 2. Package


  • 用Container Registry存储Docker镜像

  • 用NPM Registry存储NPM包

  • 用Maven Repository存储Maven artifacts

  • 用Conan Repository存储Conan包


  • 3. Release


  • 持续部署,自动将你的应用程序部署到生产环境

  • 持续交付,手动点击以将你的应用程序部署到生产环境

  • 用GitLab Pages部署静态网站,可以点击这里参考这篇文章

  • 仅将功能部署到一个Pod上,并让一定比例的用户群通过Canary Deployments访问临时部署的功能(PS:即灰度发布)

  • 在Feature Flags之后部署功能

  • 用GitLab Releases将发布说明添加到任意Git tag

  • 使用Deploy Boards查看在Kubernetes上运行的每个CI环境的当前运行状况和状态

  • 使用Auto Deploy将应用程序部署到Kubernetes集群中的生产环境


  • 使用GitLab CI/CD,还可以:


  • 通过Auto DevOps轻松设置应用的整个生命周期

  • 将应用程序部署到不同的环境

  • 安装你自己的GitLab Runner

  • Schedule pipelines

  • 使用安全测试报告(Security Test reports)检查应用程序漏洞


  • 2. GitLab CI/CD 快速开始


    .gitlab-ci.yml文件告诉GitLab Runner要做什么。


    一个简单的管道通常包括三个阶段:build、test、deploy


    管道在 CI/CD > Pipelines 页面


    2.1. 创建一个 .gitlab-ci.yml 文件


    通过配置.gitlab-ci.yml文件来告诉CI要对你的项目做什么。它位于仓库的根目录下。


    仓库一旦收到任何推送,GitLab将立即查找.gitlab-ci.yml文件,并根据文件的内容在Runner上启动作业。


    下面是一个Ruby项目配置例子:


     image: "ruby:2.5" before_script:   - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs   - ruby -v   - which ruby   - gem install bundler --no-document   - bundle install --jobs $(nproc)  "${FLAGS\[@\]}" rspec:   script:     - bundle exec rspec rubocop:   script:     - bundle exec rubocop


    上面的例子中,定义里两个作业,分别是 rspec 和 rubocop,在每个作业开始执行前,要先执行before_script下的命令


    2.2. 推送 .gitlab-ci.yml 到 GitLab


    git add .gitlab-ci.ymlgit commit -m "Add .gitlab-ci.yml" git push origin master


    2.3. 配置一个Runner


    在GitLab中,Runner运行你定义在.gitlab-ci.yml中的作业(job)

    一个Runner可以是一个虚拟机、物理机、docker容器,或者一个容器集群


    GitLab与Runner之间通过API进行通信,因此只需要Runner所在的机器有网络并且可以访问GitLab服务器即可


    你可以去 Settings ➔ CI/CD 看是否已经有Runner关联到你的项目,设置Runner简单又直接



    2.4. 查看 pipeline 和 jobs的状态


    在成功配置Runner以后,你应该可以看到你最近的提交的状态



    为了查看所有jobs,你可以去 Pipelines ➔ Jobs 页面



    通过点击作业的状态,你可以看到作业运行的日志



    回顾一下:


    1、首先,定义.gitlab-ci.yml文件。在这个文件中就定义了要执行的job和命令

    2、接着,将文件推送至远程仓库

    3、最后,配置Runner,用于运行job


    3. Auto DevOps


    Auto DevOps 提供了预定义的CI/CD配置,使你可以自动检测,构建,测试,部署和监视应用程序。借助CI/CD最佳实践和工具,Auto DevOps旨在简化成熟和现代软件开发生命周期的设置和执行。


    借助Auto DevOps,软件开发过程的设置变得更加容易,因为每个项目都可以使用最少的配置来完成从验证到监视的完整工作流程。只需推送你的代码,GitLab就会处理其他所有事情。这使得启动新项目更加容易,并使整个公司的应用程序设置方式保持一致。


    下面这个例子展示了如何使用Auto DevOps将GitLab.com上托管的项目部署到Google Kubernetes Engine


    示例中会使用GitLab原生的Kubernetes集成,因此不需要再单独手动创建Kubernetes集群


    本例将创建并部署一个从GitLab模板创建的应用


    3.1. 从GitLab模板创建项目


    在创建Kubernetes集群并将其连接到GitLab项目之前,你需要一个Google Cloud Platform帐户


    下面使用GitLab的项目模板来创建一个新项目



    给项目起一个名字,并确保它是公有的



    3.2. 从GitLab模板创建Kubernetes集群


    点击 Add Kubernetes cluster 按钮,或者 Operations > Kubernetes



    安装Helm, Ingress, 和 Prometheus



    3.3. 启用Auto DevOps (可选)


    Auto DevOps 默认是启用的。


    导航栏 Settings > CI/CD > Auto DevOps

    勾选 Default to Auto DevOps pipeline


    最后选择部署策略



    一旦你已经完成了以上所有的操作,那么一个新的 pipeline 将会被自动创建。为了查看pipeline,可以去 CI/CD > Pipelines



    3.4. 部署应用


    到目前为止,你应该看到管道正在运行,但是它到底在运行什么呢?

    管道内部分为4个阶段,我们可以查看每个阶段有几个作业在运行,如下图:


    构建 -> 测试 -> 部署 -> 性能测试



    现在,应用已经成功部署,让我们通过浏览器查看。


    首先,导航到 Operations > Environments



    在Environments中,可以看到部署的应用的详细信息。在最右边有三个按钮,我们依次来看一下:


    第一个图标将打开在生产环境中部署的应用程序的URL。这是一个非常简单的页面,但重要的是它可以正常工作!


    紧挨着第二个是一个带小图像的图标,Prometheus将在其中收集有关Kubernetes集群以及应用程序如何影响它的数据(在内存/ CPU使用率,延迟等方面)



    第三个图标是Web终端,它将在运行应用程序的容器内打开终端会话。


    4. Examples



    使用GitLab CI/CD部署一个Spring Boot应用。


    示例 .gitlab-ci.yml


     image: java:8
     
     stages:
       - build
       - deploy
     
     before_script:
       - chmod +x mvnw
     
     build:
       stage: build
       script: ./mvnw package
       artifacts:
         paths:
           - target/demo-0.0.1-SNAPSHOT.jar
     
     production:
       stage: deploy
       script:
       - curl --location "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar zx
       - ./cf login -u $CF_USERNAME -p $CF_PASSWORD -a api.run.pivotal.io
       - ./cf push
       only:
       - master


    5. Docs


    https://about.gitlab.com/solutions/kubernetes/

    https://docs.gitlab.com/ee/ci/README.html

    https://docs.gitlab.com/ee/ci/introduction/

    https://docs.gitlab.com/ee/topics/autodevops/

    https://docs.gitlab.com/ee/ci/examples/README.html


    推荐程序员必备微信号 

    程序员内参
    微信号:

    progrmer0001


    推荐理由:
    在这里,我们分享程序员相关技术,职场生活,行业热点资讯。不定期还会分享IT趣文和趣图。这里属于我们程序员自己的生活,工作和娱乐空间。
     ▼长按下方↓↓↓二维码识别关注

    收外国男骗中国妹子的炮?天朝竟有这样一帮「女权组织」 2018-03-19 INSIGHT视界 From 酷玩实验室 微信号:coollabs 其实我读书的时候 也曾经想过做一个女权主义者 但是后来发生了一些事情 让我选择了放弃 简单来说是这么一个事情:我发现 女权对于一些中国人来说是信仰 但是对另一些中国人来说是生意 所谓的“伪女权”“女权癌” 大概就是这么回事 尽管早就有这样的思想准备 但让我没想到的是 这两天,知乎上曝光了一件大事 还是让我三观震碎 我没想到,这些“伪女权” 竟然已经形成了黑色产业链 让人细思恐极—— 国内竟然有一群人 打着“女权主义”的名号 从事着组织卖淫的事情 在中国女生不知情的情况下 把她们卖给外国男人!事情是这样的:根据知乎用户伊利丹·怒风的爆料 他在知乎和一个伪女权主义者 吵了起来 一开始,他可能以为这只是一个 脑子比较轴的伪女权主义者 所以两人就吵了一通 本来,他以为就是撕个逼而已 没想到的是 这个伪女权主义者 可不是什么好惹的主 这个自称为“玛丽女王”的人 竟然在半个月中 持续不断地骚扰他 而最夸张的是 玛丽女王声称 自己有能力 让伊利丹的QQ号 在5天之内被封掉 到这里为止 伊利丹一直以为 他不过是碰到了一个杠精 但是万万没想到 5天之后 他的QQ号竟然真的被永久封禁了!说真的,这就有点吓人了 这个不起眼的玛丽女王 竟然还能操控别人的QQ账号被封?难不成,她真的背后有人?伊利丹这才意识到 自己好像惹到了一个组织 他去扒了扒这个玛丽女王的QQ空间 这才发现 自己简直捅出一个马蜂窝:这个人平时干的 竟然是把中国女生 卖给外国男人的皮肉生意!真的,我本来以为 我是一个见过不少套路的人 但没想到 这一套操作 真的是惊为天人 简单来说是这样的 首先,玛丽女王自称是“女权主义者” 但是实际上她的言论 宣传的却是 中国男人配不上中国女人 她甚至恶意辱骂中国男人 恨不得中国男人全部死光 连自己的爸爸都不放过 但是,这么做对她有什么好处呢?很简单 骂完中国男人以后 接下来她就说—— 既然中国男人这么差劲 那就找外国男人吧!于是,她就经常发布外国男人的介绍 看起来是一个热心的媒婆 还在各种QQ和微信群里 散播此类信息 但是看到这里 我们不难发现有点问题 看看其中这些不堪入目的措辞 这并不是普通的介绍男友啊!这简直是在拉皮条啊!果然,伊利丹发现 玛丽女王真的在 拉皮条的过程中 收外国男人的钱!下面是聊天记录实锤:而且,请注意—— 在这个过程中 她会收外国男人的钱 但是钱不给中国女生 却落到了她自己的腰包 于是一个诡异的情况出现了:中国妹子 并不知道收钱这回事 还以为是正常交友 而外国男人 却都交了钱 很可能认为自己是在买春!额,也就是说 在中国女孩不知情的情况下 她们被“卖”给了外国男人 而好处费 却全都进了玛丽女王的腰包... 我真的是没见过这种操作 这说轻了是骗炮 说重了,已经可以算是卖淫了吧?我想请熟悉刑法的朋友们看看 这个玛丽女王 至少应该算是个 介绍组织卖淫罪吧?而且,从伊利丹曝光的资料看来 这个组织规模不小 玛丽女王甚至把外国男生的信息 建了一个完整的表格 有详细的个人资料、照片 可以说 是一条非常完整的产业链 那如果按照这样操作 外国男人都是来嫖的 中国女生却不知道 还以为是要跟他们谈恋爱 那双方难道不会穿帮吗?恩,在这方面 玛丽女王早有对策 根据知乎一位 从事过这个产业的匿名用户提供的信息 针对这种情况 玛丽女王们 还会手把手地教外国男人 怎么快速摆脱女生的纠缠 怎么调教中国女生 怎么让女生觉得自己很可爱 可以说 各种套路一应俱全 甚至还可以开发票!看到这里 她们背后的产业就非常清楚了 这个玛丽女王 她根本就不是什么女权主义者 而是打着女权主义的口号 贩卖中国女生的人贩子 一方面 她们通过辱骂中国男人 吸引对外国男人感兴趣的中国女生 另一方面 她们向外国男人收钱 然后把中国女生卖给他们!图片来源:知乎@渭水徐工 而可怜的中国妹子们 还以为自己是在 追求男女平权 其实,不过是沦为了 这些老鸨的赚钱工具 伊利丹把这整个事情 写出来以后 在知乎、微博引起了巨大的关注 关于其中提到的 伊利丹的QQ被永久封禁的问题 腾讯经过核查 目前也有了结果:经调查,是玛丽女王利用伪造证据 恶意举报了伊利丹的QQ号 目前,腾讯已经将伊利丹的QQ解封 同时封禁了玛丽女王等人的 两个QQ账号 警方也就此事立案侦查了 相信很快就会有结果 这个事情算是告一段落了 但是在我看来 却有一件事让我无法释怀:为什么“女权主义”竟然会和 辱骂中国男性等同起来?为什么“和外国男人交友” 竟然还能演变成 一个免费的陪睡组织?我想,这个玛丽女王 也许只是一个 发现了恶性赚钱模式的生意人 但是在这背后隐藏的 其实是一个很深的问题:为什么有不少中国女人 越来越看不上中国男人 甚至觉得嫁给外国男人 是一种时尚?这里面的原因可能非常复杂 我这里先提供一个思路 供大家讨论:我发现 现在中国很多大型的女权组织 背后都有着西方势力的影子 她们打着女权的名号 为自己谋取暴利 为西方国家从事破坏活动 而那些真正为女性平权而奔走的人 却得不到应有的帮助 我之所以这样说 并不是信口开河 而是有充足的证据 有一个非常有名的民间女权组织 叫做“女权之声” 它一再声称 自己只是一个自发的民间组织 致力于促进男女平等的 它所有的微博账号、微信账号 全部都是由一个 叫做妇女传媒监测网络的创办的 而这个妇女传媒监测网络 有这么多媒体产品 那它的钱都是哪里来的呢?从她们介绍的合作组织里 我们可以清楚地找到 她们的资助者—— 竟然有西方的福特基金会 有人也许会问 收了西方的钱怎么了?中国的组织不能收西方的钱吗?然而,她们不只是收了西方的钱而已 女权之声组织里 有一个人叫做郑楚然 她除了女权运动之外 没有任何其他工作 表面上,是一个全职的女权工作者 在2015年的时候 她还因为寻衅滋事 被警察拘留过30多天 甚至在她被拘留的时候 希拉里还借题发挥 指责中国侵犯人权、压制民主 一个中国的小小民间组织的首领 在互联网上的粉丝还没有我多 竟然能得到希拉里这个级别的关注?我真的是惊掉了下巴 这样看来 我离希拉里也不是很远了??而不止是希拉里 这样一个明明思想上毫无建树的人 却被西方媒体BBC评为了 全球百大思想家 图:郑楚然在王宝强事件中发表的言论 除此以外 更让人匪夷所思的 是她们平时就喜欢攻击政府 甚至于,她们还会试图分裂我们国家 比如,女权之声这个组织里 著名的女权斗士洪理达 就曾经转发著名的港独媒体 Hong Kong Free Press的言论 甚至曾公开发表过 支持藏独、港独、台独的言论 她也经常和郑楚然混在一起 我很想不通 如果她们真的只是单纯的女权主义者 为何要发表分裂国家的言论?为何要支持藏独、港独、台独?我只能说,这大概就叫 拿人家的手短,吃人家的嘴软吧 以前,我在接触中国的女权组织时 我就觉得很奇怪 她们都喜欢声称 自己是不盈利的非政府组织 但是她们无论是宣传 还是组织各类活动 都需要大量的钱 如果她们真的不盈利 那这些钱都是哪里来的呢?而这些外国的金主 他们也更加不可能是什么慈善组织 大发善心来给中国人投钱 每一分投出去的钱 一定都是要有回报的 那么,他们的回报是什么呢?他们给中国的“女权组织”投钱 能得到什么利益呢?联想到中国网络上 如火如荼的对中国男人的讨伐 我只能说,细思恐极 我绝不是危言耸听 因为我们就看不远的邻国日本 近些年来日本对于西方的崇拜 可谓深入骨髓 已经到了崇洋媚外的程度 而这其中 当然也包括对白人男性的崇拜 甚至在2016年一个瑞士白人 发了一个视频,赤裸裸的说 “在东京,只要你是白人, 做什么都可以” 视频里面他在日本便利店 随意的亲吻不认识的收银员女孩 在酒吧把不认识的日本女孩 按向自己的裤裆 而日本女孩回应的却是谄媚的笑容 我想,并不会有那么多中国人 真正被西方伪女权主义控制 但是,我们要警惕的是 别在你自己都没有察觉的时候 被别有用心的人洗了脑 更有甚者 别在你自己都不知道的情况下 被别人卖给了外国男人 还去帮他数钱 本文系授权发布,From 酷玩实验室,微信号:coollabs,欢迎分享到朋友圈,未经许可不得转载,INSIGHT视界 诚意推荐 Forwarded from Official Account 酷玩实验室 酷玩实验室 Learn More Scan QR Code via WeChat to follow Official Account 采集文章采集样式近似文章查看封面