Gitlab CI/CD基础教程

一、编写CI/CD流程文件

仓库根目录下创建 .gitlab-ci.yml

# 定义 stages(阶段)。任务将按此顺序执行。
stages:
  - pull-source-code
  - restart-service

# 定义 job
pull-source-code:
  stage: pull-source-code
  tags:
    - localhost # runner的tag名称
  only:        
    - master    #只有master分支提交代码才会执行这个任务
  script:
    - echo "I am pull-source-code"
    - echo "I am in pull-source-code stage"
    - cd /Users/tu
    - touch 123.txt

# 定义 job
restart-service:
  stage: restart-service
  tags:
    - localhost
  only:
    - tags    #只有在分支上打标签时才会执行这个任务。也可以是分支名称或触发器名称
  script:
    - echo "I am restart-service"
    - echo "I am in restart-service stage"
  allow_failure: true #允许失败,即不影响下步构建    

# 定义 job
.job3:  #对于临时不想执行的job,可以选择在前面加个".",这样就会跳过此步任务,否则你除了要注释掉这个jobj外,还需要注释上面为deploy的stage
  stage: build
  except:    
    - dev #除了dev分支,其它分支提交代码都会执行这个任务
  script:
    - echo "I am job3"
    - echo "I am in build stage"    
  when: always #不管前面几步成功与否,永远会执行这一步。它有几个值:on_success (默认值)\on_failure\always\manual(手动执行)
 

before_script:
  - echo "每个job之前都会执行"    
  
after_script:
  - echo "每个job之后都会执行"    
  

#下面几个都相当于全局变量,都可以添加到具体job中,这时会被子job的覆盖   
variables:    #变量
  DATABASE_URL: "postgres://postgres@postgres/my_database"  #在job中可以用${DATABASE_URL}来使用这个变量。常用的预定义变量有CI_COMMIT_REF_NAME(项目所在的分支或标签名称),CI_JOB_NAME(任务名称),CI_JOB_STAGE(任务阶段)
  GIT_STRATEGY: "none" #GIT策略,定义拉取代码的方式,有3种:clone/fetch/none,默认为clone,速度最慢,每步job都会重新clone一次代码。我们一般将它设置为none,在具体任务里设置为fetch就可以满足需求,毕竟不是每步都需要新代码,那也不符合我们测试的流程

二、安装gitlab-runner

  • 安装以mac为例:

brew install gitlab-runner

  • 注册runner

gitlab-runner register

        输入gitlab仓库URL:

        输入gitlab仓库token:

        输入runner的tag名:localhost

        输入执行环境:shell

        ....

三、测试效果

Setting--CI/CD--Runners 即可看到刚刚注册成功的Runner

Gitlab CI/CD基础教程_第1张图片

Gitlab CI/CD基础教程_第2张图片

坑:gitlab、gitlab-runner、git三者之间有版本依赖关系,版本差距过大会报错。

我安装的gitlab-runner15.0,注册runner成功了,verify也正常,但就是不认领任务。降到14.7就正常了。

另外linux自带的git是1.8版本,用runner拉代码会报错,升级到2.36好了。

fatal: git fetch-pack: expected shallow list

fatal: The remote end hung up unexpectedly

你可能感兴趣的:(DevOps,ci,数据库,database)