GitLabCI/CD是GitLab内置的一个工具,通过持续的方法进行软件开发:持续集成(CI)持续集成持续交付(CD)持续交付持续部署(CD)持续部署的工作方式是将小块代码推送到Git存储库中托管的应用程序代码存储库中,每次推送时,都会运行一系列脚本来构建、测试和验证代码更改,然后再将它们合并到主分支。持续交付和部署相当于CI,将应用程序部署到生产环境,每次推送到存储库的默认分支。这些方法可以在开发周期的早期发现缺陷和错误,确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。GitLabCI/CD由位于存储库根目录中的名为.gitlab-ci.yml的文件配置。文件中指定的脚本由GitLabRunner执行。1.GitLabCI/CD引入了一种基于自动执行脚本的持续软件开发方法,以最大限度地减少在开发应用程序时引入错误的机会。他们从开发新代码到部署它,几乎没有人为干预。它涉及在小迭代中不断构建、测试和部署代码更改,减少基于已经存在错误或失败的先前版本开发新代码的机会。持续集成假定一个应用程序,其代码存储在GitLab的Git存储库中。开发人员每天多次推送代码更改。对于每次推送到存储库,您可以创建一组脚本来自动构建和测试您的应用程序,从而减少将错误引入应用程序的机会。这种做法称为持续集成,它会自动持续地构建和测试您提交给应用程序(甚至是开发分支)的每个更改,确保您引入的更改通过您为应用程序、指南和代码建立的所有测试合规标准。持续交付(ContinuousDelivery)持续交付是超越持续集成的进一步操作。不仅是通过将每个代码更改推送到代码库来构建和测试应用程序,而且,尽管部署是手动触发的,但作为附加步骤,它也可以持续部署。这种方法可确保自动检查代码,但需要从策略中手动触发人工干预以确认更改。持续部署(ContinuousDeployment)与持续交付类似,但不同的是它不是手动部署,而是可以设置为自动部署。完全无需人工??干预即可部署您的应用程序。1.1.GitLabCI/CD的工作原理为了使用GitLabCI/CD,您需要一个托管在GitLab上的应用程序代码存储库,并在根目录脚本中的.gitlab-ci.yml文件中指定构建、测试和部署。在此文件中,您可以定义要运行的脚本、定义要包含的依赖项、选择要顺序运行的命令和并行运行的命令、定义应用程序的部署位置,以及指定是自动运行脚本还是手动触发脚本。为了可视化该过程,假设添加到配置文件的所有脚本都是在计算机终端上运行的相同命令。将.gitlab-ci.yml添加到存储库后,GitLab将检测到此文件并使用名为GitLabRunner的工具运行脚本。该工具像终端一样运行。这些脚本被分组为作业,它们一起形成一个管道。一个最简单的.gitlab-ci.yml文件可能看起来像这样:run-test将打印当前系统的Ruby版本。它们一起形成了一个管道,每次推送到存储库的任何分支时都会触发该管道。GitLabCI/CD不仅可以执行你设置的作业,还可以显示执行过程中发生了什么,正如你在终端中看到的那样:为你的应用程序创建一个策略,GitLab将根据你的定义运行管道。GitLab也会显示管道的状态:最后,如果出现任何问题,您可以轻松回滚所有更改:1.2.基本CI/CD工作流CI/CD管道设置将被触发。GitLabCI/CD通过以下方式做到这一点:运行自动化脚本(串行或并行)代码审查和获得批准构建和测试您在本地计算机上看到的应用程序使用ReviewApps代码审查和批准预览每个合并请求的更改合并功能分支到默认分支,并自动将此更改部署到生产环境。如果出现问题,您可以轻松回滚。所有步骤都通过GitLabUI1.3可视化。深入理解CI/CD的基本工作流程如果深入了解基本工作流程,我们可以看到GitLab在DevOps生命周期的每个阶段可用的功能,如下图所示:1.VerifyAutomaticallybuildand使用GitLab代码质量通过持续集成测试您的应用程序(使用GitLab代码质量分析您的源代码质量使用浏览器性能测试确定代码更改对性能的影响执行一系列测试,例如容器扫描、依赖扫描、JUnit测试部署更改ReviewApps在每个分支上预览每个应用程序的变化2.Package使用ContainerRegistry存储Docker镜像使用NPMRegistry存储NPM包使用MavenRepository存储Mavenartifacts使用ConanRepository存储Conan包3.Release持续部署,自动部署你的应用到生产环境持续交付,手动点击部署你的应用到生产环境n使用GitLabPages部署静态网站仅将功能部署到一个Pod,并让一定比例的用户群通过CanaryDeployments访问临时部署的功能(PS:灰色在FeatureFlags之后部署功能使用GitLabReleases使用部署板以查看在Kubernetes上运行的每个CI环境的当前运行状况和状态使用自动部署将应用程序部署到Kubernetesetes集群中的生产环境使用GitLabCI/CD,您还可以:通过AutoDevOps轻松设置应用的整个生命周期将应用部署到不同的环境安装自己的GitLabRunnerSchedulepipelines使用安全测试报告(Security测试报告)检查应用程序漏洞2.GitLabCI/CD快速入门。gitlab-ci.yml文件告诉GitLabRunner要做什么。一个简单的管道通常由三个阶段组成:在CI/CD>管道页面2.1中构建、测试、部署管道。创建.gitlab-ci.yml文件通过配置.gitlab-ci.yml文件告诉CI如何处理您的项目。它位于存储库的根目录。一旦仓库收到任何推送,GitLab将立即查找.gitlab-ci.yml文件并根据文件内容在Runner上启动作业。以下是Ruby项目配置示例:image:"ruby:2.5"before_script:-apt-getupdate-qq&&apt-getinstall-y-qqsqlite3libsqlite3-devnodejs-ruby-v-whichruby-geminstallbundler--no-document-bundleinstall--jobs$(nproc)"${FLAGS[@]}"rspec:script:-bundleexecrspecrubocop:script:-bundleexecrubocop在上面的例子中,定义中的两个作业是rspec和rubocop。执行before_script2.2下的命令。将.gitlab-ci.yml推送到GitLabgitlab-ci.yml中的作业(job)一个Runner可以是虚拟机,也可以是物理机,也可以是docker容器,也可以是容器集群。GitLab通过API与Runner通信,所以只需要Runner所在的机器有网络,可以访问GitLab服务器即可。您可以转到设置?CI/CD以查看是否有与您的项目关联的Runner。设置Runner简单明了。2.4.检查管道和作业的状态。提交状态为了查看所有作业,您可以转到管道?作业页面,通过单击作业状态,您可以看到作业运行的日志。复习:1.首先定义.gitlab-ci.yml文件。在这个文件中,定义了要执行的作业和命令。2.接下来,将文件push到远程仓库。3.最后,配置Runner来运行作业。可以自动检测、构建、测试、部署和监控应用程序。借助CI/CD最佳实践和工具,AutoDevOps旨在简化成熟和现代软件开发生命周期的设置和执行。借助AutoDevOps,软件开发流程的设置变得更加容易,因为每个项目都可以通过最少的配置完成从验证到监控的完整工作流程。只需推送您的代码,GitLab就会处理其他一切。这使得启动新项目变得更加容易,并使整个公司的应用程序设置方式保持一致。以下示例展示了如何使用AutoDevOps将托管在GitLab.com上的项目部署到GoogleKubernetesEngine。该示例将使用GitLab的原生Kubernetes集成,因此无需手动创建Kubernetes集群。此示例将从模板创建3.1的GitLab应用程序创建和部署一个项目。从GitLab模板创建项目在创建Kubernetes集群并将其连接到GitLab项目之前,您需要一个GoogleCloudPlatform帐户。使用GitLab的项目模板创建一个新项目。为项目命名并确保它是公共的3.2。从GitLab模板创建Kubernetes集群单击添加Kubernetes集群按钮,或操作>Kubernetes安装Helm、Ingress和Prometheus3.3。启用AutoDevOps(可选)默认情况下启用AutoDevOps。导航栏Settings>CI/CD>AutoDevOpsCheckDefaulttoAutoDevOpspipeline最后选择deploymentstrategy完成以上所有操作后,会自动创建一个新的pipeline。要查看管道,请转至CI/CD>Pipelines3.4。部署应用程序到目前为止,您应该看到管道正在运行,但它究竟在运行什么?流水线分为4个阶段。我们可以看到每个阶段运行了多少个作业,如下图:Build->Test->Deployment->PerformanceTest现在应用已经部署成功,我们通过浏览器查看一下。首先,导航到Operations>Environments在Environments中,您可以看到已部署应用程序的详细信息。最右边是三个按钮,让我们依次看一下:第一个图标将打开在生产中部署的应用程序的URL。这是一个非常简单的页面,但重要的是它有效!第二个旁边是一个带有小图像的图标,Prometheus将在其中收集有关Kubernetes集群的数据以及应用程序如何影响它(在内存/CPU使用率、延迟等方面)。第三个图标是Web终端,它将在运行应用程序的容器内打开一个终端会话。4.Examples使用GitLabCI/CD部署一个SpringBoot应用example.gitlab-ci.ymlimage:java:8stages:-build-deploybefore_script:-chmod+xmvnwbuild:stage:buildscript:./mvnwpackageartifacts:paths:-target/demo-0.0.1-SNAPSHOT.jarproduction:stage:deployscript:-curl--location"https://cli.run.pivotal.io/stable?release=linux64-binary&source=github"|tarzx-./cflogin-u$CF_USERNAME-p$CF_PASSWORD-aapi.run.pivotal.io-./cfpushonly:-master
