Gitlab-runner的CI与CD

2021-11-15 17:12:33 浏览数 (1)

这一篇,我们介绍一下使用Gitlab-runner进行持续集成与部署,经过以往的经验,我们使用Jenkins的时候,会在jenkins中安装一系列的开发环境包,比如:

  • node.js
  • go
  • maven
  • gradlew/gradle
  • ...

当然也有最佳实践,就是可以不在jenkins中集成这些开发工具,我们可以将这些开发环境包在Jenkinsfile的agent中通过docker镜像也能解决,如Jenkinsfile:

代码语言:javascript复制
pipeline {
    agent {
        docker {
            image 'maven:3-alpine' 
            args '-v /root/.m2:/root/.m2' 
        }
    }
    stages {
        stage('Build') { 
            steps {
                sh 'mvn -B -DskipTests clean package' 
            }
        }
    }
}

同样的在Gitlab-runner中我们也能这样做,可能还更简单,在第二篇小实践的时候就知道,我们可以通过指定不同的tags来将stage调度到不同的runner上去在特定的开发环境中编译构建我们的镜像。这一部分实践,我们使用Python语言的一个Flask web的demo来研究一下,如何进行持续构建与持续部署。

我们可以在https://github.com/opsenv/flask-web-demo.git中fork一下代码,然后克隆到本地进行实践。我们先来看一下源代码中的 .gitlan-ci.yml

代码语言:javascript复制
stages:
  - style
  - test
  - deploy
pep8:
  stage: style
  script:
    - pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tox
    - tox -e pep8
  tags:
    - python2.7
unittest-py2.7:
  stage: test
  script:
    - pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tox
    - tox -e py27
  tags:
    - python2.7
unittest-py3.4:
  stage: test
  script:
    - pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tox
    - tox -e py34
  tags:
    - python3.4

这里来简单的解析一下这个文件:

  • stages是描述执行哪些stage的,按照数组的先后顺序进行执行;
  • 下面的 pep8unittest-py2.7unittest-py3.4这些是job名称,在gitlab-ci.yml中,这些job名称是唯一的,不能重复的
  • job是否被执行,要看job下面的stage是否在stages中被引用,多个job可能包含同名的stage名称,表示同级的含义
  • script是在每个stage运行的过程中执行的命令;这些命令与tags指令的环境有关
  • tags是匹配gitlab-runner标签,将当前的script运行在tags所匹配到的gitlab-runner的环境中

这些简单的解释一下,文件是不是很简单了,文件中有一个tox命令,这个是用来检测python的兼容性的测试工具,感兴趣的可以自己研究一下;

通过上面的解析,我们发现tags有三类,分别是 default, python2.7, python3.4,默认的default,在前面的时候我们已经部署过了,现在我们来准备一下剩余的两个python环境:

在安装完成后,我们可以在gitlab上进行查看其状态;同样如第二篇实践一样,我们把flask-web项目enable到gitlab-runner中;

这样我们就可以在CI/CD下面的Pipeline中运行流水线了

现在我们已经完成了兼容性测试了

下面应该进行构建和部署了,我们在 .gitlab-ci.yml尾部增加上一个job,用于构建和部署:

代码语言:javascript复制
docker-deploy:
  stage: deploy
  script: 
    - docker build -t flask-demo:latest .
    - if [ $(docker ps -qa --filter name=flask-web-demos-xue) ];then docker rm -f flask-web-demos-xue;fi
    - docker run -d --name flask-web-demos-xue -p 15000:5000 flask-demo:latest
  tags:
    - default

看起来很简单,通过docker构建一个flask-demo的镜像,为了能够持续部署,我们需要简单的判断一下服务器上是否存在已经部署的测试容器,如果有的话,为了避免端口冲突,我们需要将其删除掉(下线),然后在部署新的容器,看一下效果图:

然后我们看一下flask-demo的效果图:

是不是很简单,现在我们就完成了使用gitlab-runner进行对python服务的持续构建与部署了。

0 人点赞