GitLab CI新手教程

入门

GitLab CI / CD由.gitlab-ci.yml文件配置,该文件位于项目库根目录。.gitlab-ci.yml文件创建一个流水线(pipeline)以更改存储库中的代码。流水线由一个或多个顺序运行的阶段(stages)组成,每个阶段可以包含一个或多个并行运行的作业(jobs)。

在项目根目录下创建一个.gitlab-ci.yml文件,该文件定义了CI/CD作业,将含有该文件的项目提交后,作业将会被执行并将结果显示在流水线中,CI/CD > Pipeline可显示详细信息。

快速开始

创建.gitlab-ci.yml文件

在项目主页选择分支,创建.gitlab-ci.yml文件。GitLab提供了针对不同语言的.gitlab-ci.yml模板文件。

以一个Java项目为例,.gitlab-ci.yml内容为

stages:

  - test

  - build

  - deploy

test:

  stage: test

  script:

    - mvn clean test

build:

  stage: build

  artifacts:

    paths:

      - target/

  script:

    - mvn package -Dmaven.test.skip=true

deploy-to-prod:

  stage: deploy

  script:

    - mvn deploy -Dmaven.test.skip=true

通常流水线可能包含三个阶段,按以下顺序执行:

test阶段,作业名称为test,通常用于运行测试用例。

build阶段,作业名称为build,通常用于项目编译。

deploy阶段,作业名称为deploy-to-prod,通常用于部署到线上环境。

示例中deploy阶段向Artifactory上传jar包,需要配置自定义环境变量MAVEN_REPO_USER和MAVEN_REPO_PASS,配置方法参考下面的“自定义环境变量”章节。其中MAVEN_REPO_USER为你的用户名,MAVEN_REPO_PASS为你的密码。

验证.gitlab-ci.yml文件

要验证.gitlab-ci.yml文件,请使用CI Lint工具。

查看流水线和作业状态

CI/CD > Pipeline

点击流水线ID可显示流水线详情

点击作业名称可显示作业详情

环境变量

预定义环境变量

GitLab CI/CD有一组默认的环境变量,在脚本中直接调用即可。

自定义环境变量

自定义环境变量可在Settings > CI/CD > Variables手动添加

也可在.gitlab-ci.yml中设置。

variables:

  CI_REGISTRY: cr.d.demo.net

  CI_REGISTRY_IMAGE: cr.d.demo.net/gitlab-cicd/helloworld

anchors

YAML具有“锚点”功能,可用于在整个文档中复制内容。使用&定义锚点的名称,以.开头定义作业为隐藏作业,GitLab CI / CD将不会对此处进行处理。

Stages

stages的顺序决定了jobs执行的顺序,每个阶段可以包含一个或多个作业,作业由一系列关键字定义。同一阶段的作业并行执行,不同阶段的作业按阶段顺序执行。当有任何一作业失败,流水线标记为failed,后续阶段不会被执行。

示例.gitlab-ci.yml文件包含了8个阶段,当上一阶段所有作业都执行成功后才会进入下一阶段。(示例仅供参考,stages顺序可根据项目实际情况定义。

stages:

  - test

  - build

  - scan

  - report

  - archive

  - dist

  - staging

  - deploy

test测试阶段,通常用于项目的测试。(若测试阶段需要用到编译后的二进制文件,可将test阶段放于build阶段后,从artifacts中获取二进制文件。)

build构建阶段,通常用于构建或打包项目,并将结果传入artifacts用于其他阶段。

scan 扫描阶段,通常用于代码审查并生成分析报告。

report报告阶段,通常用于将分析报告以评论的方式添加到合并请求的页面中。

archive 存档阶段,通常用于将指定文件上传作为存档。

dist 构建阶段,通常用于构建镜像用于后续部署。

staging 预发布环境部署阶段,通常用于部署到预发布环境。

deploy 线上环境部署阶段,通常用于部署到线上环境。

Test

测试阶段

test:

  stage: test

  only:

    - master

    - dev

    - merge_requests

  artifacts:

    paths:

      - target/

    reports:

      junit:

        - target/surefire-reports/TEST-*.xml

        - target/failsafe-reports/TEST-*.xml

  script:

    - mvn clean test verify

    - cat target/site/jacoco/index.html

stage定义了作业的阶段。

only限制了作业创建的条件。示例中表示作业仅在master,dev分支和提合并请求时被创建。

artifacts附加到作业的文件和目录列表,用于在不同运行阶段间传递结果。

artifacts:paths路径相对于项目目录($CI_PROJECT_DIR),不能直接链接到其外部。

artifacts:reports:junit 用于收集JUnit XML文件。

script程序执行的Shell脚本。

Build

构建阶段

build:

  stage: build

  only:

    - master

    - dev

    - merge_requests

  artifacts:

    paths:

      - target/

  script:

    - mvn package -Dmaven.test.skip=true

生成的文件传入artifacts

Scan

扫描阶段

sonar_scan:

  stage: scan

  only:

    - master

    - dev

    - merge_requests

  artifacts:

    paths:

      - report/

  script:

    - sonar scan --sources src/main --tests src/test --report -- -Dsonar.java.binaries=target/classes

基于SonarQube对代码进行扫描,并生成分析报告。

生成分析报告并以工件传递

Archive

存档阶段

upload_fds:

  stage: archive

  only:

    - master

    - dev

    - merge_requests

  script:

    - copy `ls target/*.jar` ${CD_BUCKET}/${CI_COMMIT_SHORT_SHA}.jar

将生成的jar包上传,其中${CI_COMMIT_SHORT_SHA}为预定义环境变量。

Dist

构建阶段

build_image:

  stage: dist

  dependencies:

    - build

  image:

    name: cr.d.demo.net/containercloud/kaniko-executor-demo:release

    entrypoint: [""]

  only:

    - master

    - dev

    - merge_requests

  script:

    - IMAGE=${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHORT_SHA}

    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"username\":\"${CI_REGISTRY_USER}\",\"password\":\"${CI_REGISTRY_PASSWORD}\"}}}" > /kaniko/.docker/config.json

    - /kaniko/executor --context ${CI_PROJECT_DIR} --dockerfile ${CI_PROJECT_DIR}/Dockerfile --destination ${IMAGE} --validate-image

image使用Docker映像kaniko-executor-demo:release。

name 镜像名称。

entrypoint  推荐为空,语法类似于Dockerfile’s ENTRYPOINT

使用kaniko构建镜像。其中${CI_REGISTRY} , ${CI_REGISTRY_IMAGE},{CI_COMMIT_SHORT_SHA},{CI_PROJECT_DIR}为预定义环境变量。{CI_REGISTRY_USER}和{CI_REGISTRY_PASSWORD}在Settings > CI/CD > Variables中配置。

Staging

预发布环境部署阶段

staging:

  stage: staging

  variables:

    CD_CLUSTER: "staging"

  environment:

    name: staging

    url: http://cicd-helloworld-cl.staging.demo.net

  only:

    - master

    - dev

    - merge_requests

environment在指定环境中进行部署。

name名称。

url业务链接。

Operations > Environments

Deploy

线上环境部署阶段

production:

  stage: deploy

  variables:

    CD_CLUSTER: "c"

  environment:

    name: production

    url: http://cicd-helloworld.demo.net

  only:

    refs:

      - master

pages:

  stage: deploy

  dependencies:

    - build

  only:

    refs:

      - master

  artifacts:

    paths:

      - public

  script:

    - mkdir -p public/

    - cp -r target/generated-docs/* public/

pages用于将静态内容上传到GitLab。需满足两点条件:

所有静态内容放置于public/文件夹下。

包含public/文件夹路径的artifacts必须被定义。

Operations > Environments

你可能感兴趣的:(GitLab CI新手教程)