一、前言
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的过程,其实它只是省略了一些我们的手动发布部署过程,将其自动化,但原来的流程还是一个不能少。所以,我们要进行的第一步,就是手动实现一遍流程。
三、手动实现一遍
(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
添加代码仓库
并将一个.netcore项目创建进去
添加dockerfile文件,仅需在项目上右键,docker支持,vs就可以自动添加。然后git push
这样开发pc端的代码就都提交到gitlab服务器上了,
2、部署端git pull ,docker build , docker run
镜像已经成功启动,打开浏览器,输入ip + 暴露出来的端口8090
PS: .NETCORE web中,startup.cs文件中,有
app.UseHsts();
app.UseHttpsRedirection();
这两行要注释掉,不然网站回一直往https跳转,没法进入http的80端口
整个手动流程成功。
四、使用gitlab-runner来替代手动部署工作
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
记住这个url和token
在部署的服务器上
gitlab-runner register
然后回到gitlab 服务器,就可以看到我们的runner已经被发现了
点进去稍作修改
把这个勾上,它可以使.gitlab-ci.yml在没有指定tag标签值时也能运行
然后在下面选择,我们想在这个runner上运行的那个项目
3、编写.gitlab-ci.yml
在项目中添加名为.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
其中的关键字可以参考
注意
script节点
这个节点下的命令我们应该很熟悉,就是上面我们手动操作所写的命令
就是这一段,帮助我们完成了手动变自动的。
tags节点,指定了哪一个runner来运行我们的项目
only节点,指定了值部署master分支
注意点2
.gitlab-ci.yml文件,应该放在项目的根目录中,每次Git push ,gitlab都会检测到.gitlab-ci.yml,如果检测到,就按照其脚本进行ci部署
4、开发PC gitpush实现自动化部署
见证奇迹的时刻
git push
在项目的cd/ci中可以看到命令详情
我们打开对象应网站看看
已经出现了
现在改一下代码
重提交一次Git push
Amazing!!!!!!!!!!!!!!!