• Docker+GitLabCI持续集成


    摘要:本文主要记录了Python项目在GitLab中实现自动部署的具体操作;

    1、持续集成基本概念

    在传统开发过程中,代码的集成工作通常是在所有工程师们工作完成后进行的,需要单独构建,这往往会花费大量的时间和精力。持续集成是一种将集成工作放在软件开发阶段的做法,以便更加有规律地构建、测试和集成代码;

    持续集成可以在开发人员提交了新代码后,立即进行构建、单元测试,可以根据测试结果确定新代码或配置环境是否正确;

    2、项目相关操作:

    2.1 gitlab上新建项目

    写了个python相关的demo, 放到了gitee上;

    访问地址为 https://gitee.com/fanmixue/docker-fast-tortoise-demo

    打开自己的gitlab,点击 New project , 导入下项目

    image-20220318174209200.png

    2.2 Dockerfile文件

    FROM python:3.9
    ​
    WORKDIR /code
    ​
    COPY ./requirements.txt /code/requirements.txt
    ​
    RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
    ​
    COPY ./ /code/
    ​
    CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8888"]
    ​
    

    2.3 设置CI/CD

    进入gitlab当前项目中,左下角找到 Settings,选择第一个选项General,找到Pipelines,打开后Settings里会显示CI/CD选项;

    ps:如果你找不到Settings按钮,啊哦,那说明你没有项目管理员权限哦~

    image-20220408104415905.png

    2.4 记录Url和Token

    进入CI/CD界面,展开 Runners 选项,找到url和token;

    image-20220408104339001.png

    3、 服务器相关操作

    服务器环境为: Ubuntu 64位

    3.1 安装docker

    具体可参考官网:https://docs.docker.com/engine/install/ubuntu/

    3.2 安装gitlab-runer

    3.2.1 docker方式安装

    # 拉取镜像
    docker pull gitlab/gitlab-runner:latest
    # 运行镜像
    docker run -d --name gitlab-runner --restart always \
            -v /var/run/docker.sock:/var/run/docker.sock \
            -v /srv/gitlab-runner/config:/etc/gitlab-runner \
            gitlab/gitlab-runner
    ​
    

    3.2.2 非docker方式安装

    其他环境可参考:https://docs.gitlab.com/runner/install/linux-manually.html#install-gitlab-runner-manually-on-gnulinux

    # ubuntu中安装
    sudo apt-get install gitlab-runner
    

    3.3 添加用户组及权限

    # 添加 用户组及用户
    useradd -m -g gitlab-runner gitlab-runner
    ​
    # 查看系统用户
    sudo vim /etc/passwd
    ​
    # 将下图蓝框内的数字改为0:0,和root保持一致
    

    image-20220407181513144.png

    3.4 注册gitlab-runner

    # 使用一次性容器来注册 gitlab-runer, --rm 容器推出时清理用户数据
    docker run --rm  -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
    

    上面命令执行完,接下来会提示你输入以下信息,做个示例,仅供参考哈,可别都粘贴过去了~

    # 输入域名或者服务器ip地址,就是步骤三的url,如果gitlab和要部署的服务器地址不一致,需要做个地址映射哦,自行百度下
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): 
    # 输入token,就是步骤2.3的token
    Please enter the gitlab-ci token for this runner:
    # 输入runner描述,可写可不写
    Please enter the gitlab-ci description for this runner:
    # 给这个Runner指定tags,可以写多个,英文逗号隔开即可
    Please enter the gitlab-ci tags for this runner (comma separated):
    # 选择Runner是否接受未指定tags的任务,稍后可修改,默认值为false,可写可不写
    Whether to run untagged builds [true/false]:
    # 选择是否为当前项目锁定Runner,通常用于被指定为某个项目的Runner,默认值为true,可写可不写
    Whether to lock the Runner to current project [true/false]: 
    # 选择Runner executor(Runner执行器),这里我们选docker哈
    Please enter the executor: docker, shell, virtualbox, kubernetes, docker-ssh, parallels, ssh, docker+machine, docker-ssh+machine: 
    docker
    # docker版本选最新版
    Please enter the default Docker image (e.g. ruby:2.6):
    docker:latest
    ​
    # 好了到这一步,看到输出以下语句,就算注册完了,接下来去CI/CD界面下的Runners选项里,看看有没有成功;
    Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
    

    如下图所示,前面的圆圈为绿色的,代表注册成功了,标签名为 fastApi;

    image-20220406184442725.png

    注意:如果这个时候前面的圈圈为灰色的,请执行以下命令重启下gitlab-runner, 稍作等待,多刷新几次浏览器即可;

    docker restart gitlab-runner
    

    3.5 配置秘钥及静态目录相关

     cd ~/.ssh # 查看是否存在密钥
     ssh-keygen -t rsa # 生成密钥
     cat id_rsa    #查看私钥
     cat id_rsa.pub # 查看公钥
    

    将私钥、公钥及ip等信息粘贴到 CI/CD的变量中,具体操作看下图: image-20220407184904543.png

    image-20220408104218778.png

    4、 gitlab-ci.yml文件

    在项目根目录下新增文件gitlab-ci.yml,将以下代码粘贴过去,然后提交代码到test分支;

    test:build:
        stage: test
        script:
          - docker build -t fast_api .
          - if [ $(docker ps -aq --filter name=trunkverse_service) ]; then docker rm -f trunkverse_service; fi
          - docker run -d -p 8098:8098 --restart=always --name fast_api fast_api 
          - echo 'docker run 完成'
        only:
          - test # 指定test分支一更新则立即构建
        tags:
          - fastApi # 对应每个runner注册时定义的tag
    ​
    test:deploy:
      image: alpine:3.7
      stage: deploy
      script:
        - echo "http://mirrors.aliyun.com/alpine/v3.7/main/" > /etc/apk/repositories # 下载镜像
        - apk add --no-cache rsync openssh # 安装rsync openssh
        - mkdir -p ~/.ssh
        - echo "$SSH_KEY_PRIVATE" >> /root/.ssh/id_rsa
        - echo "$SSH_KEY_PUB" >> /root/.ssh/id_rsa.pub
        - chmod 700 /root/.ssh/
        - chmod 600 /root/.ssh/id_rsa.pub
        - chmod 600 /root/.ssh/id_rsa
        - echo -e "Host *\n\t StrictHostKeyChecking no \n\n" > ~/.ssh/config
        - rsync -av --delete   ./  $SERVER_HOST:$SERVER_PATH
      only:
        - test
      tags:
        - fastApi
    

    5、查看结果

    image-20220408105944678.png

    点进去绿色圈圈,可以看到任务执行流程:

    image-20220408111301218.png

    任务执行成功后,在服务器上指定文件夹下,可以看到所有项目文件已经自动更新了,浏览器输入服务器ip+8098端口可以访问成功~

    ps:因为这个demo项目里,启动时需要连下mysql,真正使用时,要将mysql配置成允许任意ip访问才行,具体操作请看下篇文章~

    6、你可能遇到的问题

    如果你的服务器是在内网中的,项目中给出的URL是内网域名而不是IP,那么我们在注册runner的时候,第一步输入url的时候请输入http:// + ip, 然后sudo打开 /srv/gitlab-runner/config/config.toml ,对runner增加域名:ip映射,否则代码拉不下来,会报错的

    sudo vim /srv/gitlab-runner/config/config.toml
    

    2041652697186_.pic.jpg

  • 相关阅读:
    java中interface的完整表述
    DoTA与人生
    DotNet.Utilities工具类
    visual studio xcopy /exclude测试
    Assembly.Load()方法,Assembly.LoadFrom()方法,Assembly.LoadFile()方法的区别!
    DataGridView列自适应宽度
    [Head First设计模式]
    winform 取消datagridview第一行选中状态
    winform WebBrowser如何修改使用默认的IE浏览器版本
    C# 注释换行
  • 原文地址:https://www.cnblogs.com/fmixue/p/16375946.html
Copyright © 2020-2023  润新知