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
在创建之前,需要在使用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的用户添加进去,就可以了
1 |
sudo usermod -aG docker gitlab-runner |
添加代码仓库
并将一个.netcore项目创建进去
添加dockerfile文件,仅需在项目上右键,docker支持,vs就可以自动添加。然后git push
这样开发pc端的代码就都提交到gitlab服务器上了,
镜像已经成功启动,打开浏览器,输入ip + 暴露出来的端口8090
PS: .NETCORE web中,startup.cs文件中,有
app.UseHsts();
app.UseHttpsRedirection();
这两行要注释掉,不然网站回一直往https跳转,没法进入http的80端口
整个手动流程成功。
gitlab-runner替代这张图上第二个箭头的地方
下载二进制文件
1 |
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 |
赋予权限:
1 |
sudo chmod +x /usr/local/bin/gitlab-runner |
创建gitlabCI用户:
1 |
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash |
安装并作为运行服务:
1 2 |
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
在部署的服务器上
1 |
gitlab-runner register |
然后回到gitlab 服务器,就可以看到我们的runner已经被发现了
PS:!!!!!!!!!!!!!!!这里可以看到第一个runner的连接是没有的,Last contact is Nerver
经过排查,我出现这种情况,是因为204这台机器没有在gitlab中配置ssh,将gitlab-runner用户的ssh配置到gitlab中,再重启一下runner
1 |
sudo gitlab-runner restart |
就好了
点进去稍作修改
把这个勾上,它可以使.gitlab-ci.yml在没有指定tag标签值时也能运行
然后在下面选择,我们想在这个runner上运行的那个项目
在项目中添加名为.gitlab-ci.yml的文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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 --name testcdci --restart always testcdci |
其中的关键字可以参考
注意
1 2 3 4 5 |
script节点 这个节点下的命令我们应该很熟悉,就是上面我们手动操作所写的命令 就是这一段,帮助我们完成了手动变自动的。 tags节点,指定了哪一个runner来运行我们的项目 only节点,指定了值部署master分支 |
注意点2
.gitlab-ci.yml文件,应该放在项目的根目录中,每次Git push ,gitlab都会检测到.gitlab-ci.yml,如果检测到,就按照其脚本进行ci部署
见证奇迹的时刻
git push
在项目的cd/ci中可以看到命令详情
我们打开对象应网站看看
已经出现了
现在改一下代码
重提交一次Git push
Amazing!!!!!!!!!!!!!!!
from:https://www.cnblogs.com/hallejuayahaha/p/13079698.html