Git&Gitlab

Gitlab Ci中自动生成版本号

2021-07-22  本文已影响0人  阿乐_822e

开发环境:Gitlab社区版11.3 集成k8s集群与gitlab-runner

以下简单介绍在.gitlab-ci.yml文件中自动生成应用版本号及在job中传递版本号过程

Gitlab中有三种变量使用方式:预定义变量、后台(UI)中设置及自定义环境变量
详细参考这里:GitLab CI/CD variables | GitLab
我们规划每次发版时,自动取系统日期的yyyymmddhhmm形式作为版本号,因此,这里必须采用自定义变量形式。
实现原理是在build阶段生成版本号,并使用artifacts将其传递到其他job。
由于gitlab版本比较低,因此在写脚本时和其他版本稍有不同,比如"needs“关键字它就不支持

$ cat .gitlab-ci.yml

stages:
  - build
  - deploy

build:
  image: 192.168.xx.xx:8082/docker:latest
  stage: build
  variables:
    DOCKER_HOST: unix:///var/run/docker.sock
  services:
    - name: docker:dind
      command: ["--insecure-registry=192.168.xx.xx:8082"]    
  script:
    - VERSION=`date +%Y%m%d%H%M`   
    - echo "VERSION=$VERSION" > .version
    - docker build -t 192.168.xx.xx:8082/helloworld:$VERSION .
    - docker login -u admin -p XXXX 192.168.xx.xx:8082
    - docker push 192.168.xx.xx:8082/helloworld:$VERSION
    - echo "OK, 本次镜像已成功上传到本地仓库 !"
  artifacts:
    paths:
      - .version  # 版本号传递到下一个job
    expire_in: 1 days
  only:
    - master
  when: manual  
    
deploy-k8s:
  image: 192.168.xx.xx:8082/docker-kubectl:v1.1
  stage: deploy
  variables:
    DOCKER_HOST: unix:///var/run/docker.sock  
  services:
    - name: docker:dind
      command: ["--insecure-registry=192.168.xx.xx:8082"]        
  script:
    - echo "开始向k8s集群部署..."
    - if [ ! -f ./.version ];
      then
        echo "任务执行失败,请先执行build任务!";
        exit 1;
      fi
    - source ./.version    
    # - cat .version
    - docker login -u admin -p admin123 192.168.xx.xx:8082
    - docker pull 192.168.xx.xx:8082/helloworld:$VERSION
    # - kubectl config set-context default --namespace=my-stg-ns
    # 以下"web"对应于deployment中container name
    - kubectl set image deployment  helloworld web=192.168.xx.xx:8082/helloworld:$VERSION -n my-stg-ns
    - kubectl describe  deployment  helloworld   -n my-stg-ns | grep Image  
    - echo "OK!更新完成!Bye-Bye."
  dependencies:
    - build      
  only:
    - master    
  when: manual

简单说明:

1. 本例中简单地设置了两个job,手工触发;

2. 192.168.xx.xx:8082 是私库地址;

3. 使用VERSION=date +%Y%m%d%H%M 生成版本号,并用.version文件传递到其他job;

4. 因为采用docker in docker形式,所以要设置变量“DOCKER_HOST: unix:///var/run/docker.sock ”,并且通过“command: ["--insecure-registry=192.168.xx.xx:8082"] ”将私库地址传递进去,否则gitlab-runner拉起的pod无法docker push/pull;

5. kubectl set image 一行中,"web"对应于deployment中container name

总结:gitlabCi挺好用,就是共享动态变量有点费劲:)

上一篇 下一篇

猜你喜欢

热点阅读