配置.gitlab-ci.yml - 自定义流水线

参考官网:
gitlab持续集成流水线配置

结合官网,以一种探索性的方式,展示gitlab持续集成流水线的搭建过程。

环境

软件 版本
gitlab 11.5.1
gitlab-runner 11.5.1

第一章 gitlab持续集成流水线 - 创建“流水线”


简介

如果您对“持续集成”“流水线”概念还处于模糊阶段,那么这节也许很适合您。
持续集成,对于当前的gitlab ci,个人理解,持续性表现在 gitlab push提交动作触发流水线、定时任务流水线;集成性的话想对较弱,至少是需要通过配置来加强。
流水线,基本上就是需要配置来实现,完成一整套操作:代码质量检查、单元测试、构建、接口测试等等。类似于工厂的流水线,毛件(代码等)放到传送带上,进行一系列检查(代码质量检查、测试)、处理(构建等),直到生成成品(可运行文件文件夹)或其他(出现异常、代码编译构建错误等)。

本章有两个目的,一是最简单的方式配置gitlab-ci流水线(暂时免去实际的操作),二是整体感受下gitlab-ci流水线。
还有,gitlab-ci流水线触发有三种方式,其中可通过“only”和“except”配置自定义触发方式:

  • 默认方式,gitlab服务器接收到更新后自动触发
  • Pipelines页面,“Run Pipeline”按钮,当然,单击后还需要选择分支,选择性添加变量,“Create pipeline”
    配置.gitlab-ci.yml - 自定义流水线_第1张图片
    配置.gitlab-ci.yml - 自定义流水线_第2张图片
  • TOKEN+ Pipeline triggers API,http请求触发,创建token,然后如下页面往下翻会有调用方式详情。
    配置.gitlab-ci.yml - 自定义流水线_第3张图片

简单例子

在代码库创建配置文件 .gitlab-ci.yml ,如下
配置stages和jobs,stages基本就是流水线的顺序,jobs有“sonar_analyze”和“my_build”,在此处,一个stage对应一个job,当然可以一个stage对应多个job。
job的tags,用于job与gitlab-runner关联配置(赶稿中。。。),只有打了这些标签的runner才配得上run我。

stages:
  - analyze
  - build
sonar_analyze:
  script:
    - echo sonar_analyze
    - echo job done 
  tags:
    - master
my_build:
  script:
    - echo my_build
    - echo job done 
  tags:
    - master

第二章 gitlab持续集成流水线 - 添加自定义操作


简介

在上章我们已经建立起自己的流水线,接下来,该添加实际应用中的操作步骤了。
需要重点说下的是,docker镜像的使用,这里是直接在(docker hub官网)[https://hub.docker.com/]找的,所以会出现有些工具没有的情况,在工程使用中是应该避免的,自动化成功率和这种流程精简密切相关的。

实用例子

# stages基本就是流水线的阶段顺序
stages:
  - analyze
  - build_build
  - build_docker
  - deploy
# 可以自定义一些参数,需要修改的参数方便配置
variables:
  APP_ID: "app_id"
  APOllO_HOST: "xxx.xxx.xxx.xxx:xxxx"
  APPHOUSE_HOST: "xxx.xxx.xxx.xxx:xxx"
  APPHOUSE_USER: "xxxx"
  APPHOUSE_PASSWD: "xxxxxx"
  TAG: "gitlab-pipline"
  BRANCH: "master"
  DB_HOST: "xxx.xxx.xxx.xxx:xxx"
  DOCKER_BRANCH: "master"
  
  GIT_NAME: "xxxx"
  GIT_PASSWD: "xxxxx"
  
  # sonar
  SONAR_TOKEN: "xxxx"
  SONAR_HOST: "http://xxx.xxx.xxx:9000"
  
  # deploy
  DEPLOY_IP: "xxx.xxx.xxx.xxx"
  DEPLOY_USER: "xxx"
  DEPLOY_PASSWD: "xxx"
# sonarqube结合maven,无缝连接,无需配置pom.xml
sonar_analyze:
  stage: analyze
  image: maven:3-jdk-8
  script: 
    - cd $CI_PROJECT_DIR
    - mvn -f pom.xml clean install -DskipTests
    - mvn -f pom.xml -Dsonar.host.url=${SONAR_HOST} -Dsonar.login=${SONAR_TOKEN} -Dsonar.projectKey=gitlab:pipelines:exam -Dsonar.projectName=exam_gitlab_pipelines -Dsonar.sourceEncoding=UTF-8 -Dsonar.revision=xxxrevisionxxx sonar:sonar
  tags:
    - master
# 构建步骤,使用maven构建工具
build_maven:
  stage: build_build
  image: maven:3-jdk-8
  script:
    # 可以直接使用docker hub已有的镜像,那么如果有些工具确实了,可以使用下面的方式安装
    # 缺点:很明显,默认apt源一般都较慢,受外网能力影响
    # 解决方案,可以自己打定制镜像,放到本地架设的docker hub
    - apt-get update
    - apt-get install -y dos2unix 
    # 代码里面已经有一个build脚本,包括maven操作、文件格式转换、文件文件夹移动等
    - chmod +x build 
    - ./build -m ${APP_ID} -b ${BRANCH} -v ${TAG}
    - ls
  tags:
    - master
    - 
# 构建步骤,使用docker构建,并推送到docker hub
build_docker:
  stage: build_docker
  image: docker:stable-git
  # docker in docker,docker里面的docker
  services:
  - name: docker:stable-dind
    command: [ "--insecure-registry=https://xxx.xxx.xxx.xxx:xxx" ]
  script: 
    - docker info
    - cd $CI_PROJECT_DIR/.. 
    - rm -rf my-docker
    # 我们可以在这个环境中下载其他git库 
    - git clone http://${GIT_NAME}:${GIT_PASSWD}@xxx.xxx.xxx.xxx/xxxx/my-docker.git
    # 使用sed简单处理下配置文件,自定义参数
    - sed -i 's/--start-period=60s//g' $CI_PROJECT_DIR/../xxxx/${APP_ID}/Dockerfile
    # docker制作组件镜像,build
    - rm -rf my-docker/${APP_ID}/${APP_ID} && cp -rfv out/${APP_ID} my-docker/${APP_ID}/
    - cd my-docker/${APP_ID} && chmod +x build.sh &&  sh  build.sh -t ${TAG}
    # 登录docker hub
    - docker login -u${APPHOUSE_USER} -p${APPHOUSE_PASSWD} ${APPHOUSE_HOST}
    # 推送制作好的镜像到docker hub
    - docker push ${APPHOUSE_HOST}/ic/${APP_ID}:${TAG}
  tags:
    - master

deploy_ansible:
  extends: .main
  stage: deploy
  image: williamyeh/ansible:ubuntu16.04
  script:
    - apt-get update
    - apt-get install -y sshpass
    - apt-get install -y git
    
    - rm -rf my-docker
    - git clone http://${GIT_NAME}:${GIT_PASSWD}@xxx.xxx.xxx.xxx/software/my-docker
    - cd $CI_PROJECT_DIR/my-docker/common
    # 配置文件设置服务器密码账号,结合sshpass,实现即时连接,无需设置key
    - echo "[cd]" > hosts
    - echo "${DEPLOY_IP} apollo_ip=${APOlLO_HOST} db_ip=${DB_HOST} apollo_ip=${APOlLO_HOST} ansible_ssh_user=${DEPLOY_USER} ansible_ssh_pass=${DEPLOY_PASSWD} ansible_sudo_pass=${DEPLOY_PASSWD}" >> hosts
    - sed -i 's/#host_key_checking/host_key_checking/g' /etc/ansible/ansible.cfg  # disable SSH key host checking
    # 运行定制好的deploy.yml剧本
    - ansible-playbook  deploy.yml -i hosts -l cd -f 10 -e service_name=${APP_ID}  -e tag=$TAG -b
  tags:
    - master
    

第三章 gitlab持续集成流水线 - 重构,更简练更强复用性


简介

基本上,需要的操作已经配置完成,显然,配置文件略显冗长,毫无复用性。
接下来,我们会用到,函数、模板job与一些其他的设计思路,进行重构。待续。。。

强化例子

你可能感兴趣的:(DevOps,gitlab,gitlab-ci,gitlab流水线,gitlab-ci,.gitlab-ci.yml,gitlab,pipelines,gitlab持续集成)