gitlab 的 CI/CD 初次尝试

一、前言

ci/cd 持续集成持续交付,开发人员尝尝会遇到一些重复工作,比如一个asp.net的网站代码,写完之后要发布,然后再将发布内容移动到部署的服务器上再进行部署,就算你只改了一个页面上的一个字,也要将之前的发布部署过程重新做一遍。

CI 解决了这个重复性问题,开发人员只需git push 提交代码,剩下的工作交给CI , 做CI工作的有gitlab-ci/cd  Jenkins k8s等,中小项目gitlab-ci比较合适,因为它更轻量级一些,本篇仅讨论gitlab的cicd功能。

二、环境

 

IP 角色
192.168.10.202(ubuntu) gitlab
192.168.10.208(centos) git,docker,gitlab-runner

 

 

 

 

 

gitlab git docker 三者的安装 略。且本篇是以docker镜像方式部署

 gitlab 的 CI/CD 初次尝试

 上图为gitlab-ci的过程,其实它只是省略了一些我们的手动发布部署过程,将其自动化,但原来的流程还是一个不能少。所以,我们要进行的第一步,就是手动实现一遍流程。

 

三、手动实现一遍

(gitlab服务器) 创建代码仓库---> (开发PC) git clone ---> (开发pc) 修改代码,添加dockerfile ---> (开发pc) git push ---> (部署服务器) git pull ---> (部署服务器) docker build ,docker run 

1、创建代码仓库

 在创建之前,需要在使用git的机器上设置好ssh,可以参考之前的https://www.cnblogs.com/hallejuayahaha/p/11996332.html

要注意的是,在部署机器上,gitlab-runner安装好后,需要添加一个gitlab-runner的用户,需要添加这个用的ssh,因为在ci自动化后,在部署服务器上的操作都是由这个用户来做的,所以不仅要添加它的ssh,也要docker 免去sudo的指令。

总之就是让gitlab-runner用户,在做部署过程中,不要受到权限的阻碍。

******docker免去敲sudo*******

在安装完docker之后,也会出现一个docker用户组,将你要免去敲sudo的用户添加进去,就可以了

sudo usermod -aG docker gitlab-runner

 

添加代码仓库 

 gitlab 的 CI/CD 初次尝试

 并将一个.netcore项目创建进去

 gitlab 的 CI/CD 初次尝试 

 添加dockerfile文件,仅需在项目上右键,docker支持,vs就可以自动添加。然后git push

gitlab 的 CI/CD 初次尝试

这样开发pc端的代码就都提交到gitlab服务器上了,

 2、部署端git pull ,docker build , docker run

 gitlab 的 CI/CD 初次尝试

 

 gitlab 的 CI/CD 初次尝试

 

 gitlab 的 CI/CD 初次尝试

 

镜像已经成功启动,打开浏览器,输入ip + 暴露出来的端口8090

gitlab 的 CI/CD 初次尝试

PS:  .NETCORE web中,startup.cs文件中,有

app.UseHsts();

app.UseHttpsRedirection();

这两行要注释掉,不然网站回一直往https跳转,没法进入http的80端口

 

 整个手动流程成功。

四、使用gitlab-runner来替代手动部署工作

 gitlab 的 CI/CD 初次尝试

gitlab-runner替代这张图上第二个箭头的地方

1、安装gitlab-runner

 下载二进制文件

sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

 赋予权限:

sudo chmod +x /usr/local/bin/gitlab-runner

创建gitlabCI用户:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

安装并作为运行服务:

sudo /usr/local/bin/gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo /usr/local/bin/gitlab-runner start

 

注册gitlab-runner:

先打开gitlab

gitlab 的 CI/CD 初次尝试

 

 记住这个url和token

在部署的服务器上

gitlab-runner register

 gitlab 的 CI/CD 初次尝试

 

 然后回到gitlab 服务器,就可以看到我们的runner已经被发现了

gitlab 的 CI/CD 初次尝试

 

 点进去稍作修改

gitlab 的 CI/CD 初次尝试

 

 把这个勾上,它可以使.gitlab-ci.yml在没有指定tag标签值时也能运行

 

gitlab 的 CI/CD 初次尝试

 

  然后在下面选择,我们想在这个runner上运行的那个项目

3、编写.gitlab-ci.yml

 gitlab 的 CI/CD 初次尝试

 

 

 在项目中添加名为.gitlab-ci.yml的文件

variables:
  GIT_STRATEGY: none
stages:
  - test
test_job:
  stage: test
  tags:
    - vv1
  only: 
    - master
  script:
    - cd /home/centos
    - rm -rf /home/centos/testcdci
    - git clone git@192.168.10.202:root/testcdci.git
    - cd ./testcdci/TestCDCI
   
    - docker stop testcdci
    - docker rm testcdci
    - docker rmi testcdci

   
    - docker build -t testcdci .
    - docker run -itd -p 8090:80 testcdci --restart always 

 

其中的关键字可以参考

https://www.szyhf.org/2017/01/16/gitlab-ci-yml%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E%EF%BC%88%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3%E7%BF%BB%E8%AF%91%EF%BC%89/

注意

script节点
这个节点下的命令我们应该很熟悉,就是上面我们手动操作所写的命令
就是这一段,帮助我们完成了手动变自动的。
tags节点,指定了哪一个runner来运行我们的项目
only节点,指定了值部署master分支

注意点2

.gitlab-ci.yml文件,应该放在项目的根目录中,每次Git push ,gitlab都会检测到.gitlab-ci.yml,如果检测到,就按照其脚本进行ci部署

gitlab 的 CI/CD 初次尝试

 

 

 

4、开发PC gitpush实现自动化部署

见证奇迹的时刻

git push

 gitlab 的 CI/CD 初次尝试

 

 在项目的cd/ci中可以看到命令详情

gitlab 的 CI/CD 初次尝试

 

 我们打开对象应网站看看

gitlab 的 CI/CD 初次尝试

 

 已经出现了

现在改一下代码

gitlab 的 CI/CD 初次尝试

 

 重提交一次Git push

 gitlab 的 CI/CD 初次尝试

 

 

 

Amazing!!!!!!!!!!!!!!!

上一篇:unnitest简单场景应用


下一篇:gitlab-runner docker 权限相关的