使用gitlab自带的ci/cd实现.net core应用程序的部署
这两天在折腾持续集成和交付,公司考虑使用gitlab自带的ci/cd来处理,特此记下来整个流程步骤.
好记性不如一支烂笔头—尼古拉斯-古人言
第一步: 安装gitlab,这个自然不用多说
第二步: 使用docker容器安装gitlab-runner组件
新建一个docker-compose.yml文件,内容如下,在linux系统下使用 docker-compose up -d 命令跑起来就好(如果不会,可度娘搜索安装和使用)
1 version: "3.3" 2 services: 3 gitlab-runner: 4 image: gitlab/gitlab-runner:latest 5 container_name: gitlab-runner 6 #总是重启后启动 7 restart: always 8 privileged: true 9 volumes: 10 - ./config:/etc/gitlab-runner 11 - /var/run/docker.sock:/var/run/docker.sock 12 - /bin/docker:/bin/docker 13 networks: 14 - gitlab_runner_net 15 16 networks: 17 gitlab_runner_net: 18 driver: bridge
第三步: 安装完之后,需要将安装好的gitlab-runner注册到gitlab中去,这里我们就需要用到如下图中红色框框内的token令牌
1.进入容器内部
1 docker exec -it 96d4d3170eaf /bin/bash
2.开启注册
1 gitlab-runner register
3.输入上面的命令后根据提示输入指定信息
1 Enter the GitLab instance URL (for example, https://gitlab.com/): 2 http://192.168.1.250:9080/ #gitlab的地址 3 Enter the registration token: 4 XLccjJJ_mDkNRyzdyXsY #上面图片中的token,这样允许gitlab-runner免密连接gitlab 5 Enter a description for the runner: 6 [96d4d3170eaf]: signbox-service-message shell #这里输入备注信息,可留空 7 Enter tags for the runner (comma-separated): 8 deploy,master,dev #这里输入标签,最好是和git分支中tag的对应起来 9 Registering runner... succeeded runner=XLccjJJ_ 10 Enter an executor: docker-ssh, shell, virtualbox, docker-ssh+machine, kubernetes, custom, docker, parallels, ssh, docker+machine: 11 shell #这里直接输入shell就好 12 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
完成注册后,在gitlab中就能看到注册的gitlab-runner信息了,如下图
第四步: 添加gitlab-runner账号授权
1.添加一个 gitlab-runner 用户(一般这个用户是不存在的)
1 sudo adduser gitlab-runner
2.将gitlab-runner用户添加到docker组内
1 sudo gpasswd -a gitlab-runner docker
3.查看docker组中是否已经成功(如果出现:docker:x:973:root,gitlab-runner则成功)
1 cat /etc/group |grep docker
4.重启docker容器服务
1 sudo systemctl restart docker
5.给docker.sock设置权限
1 sudo chmod a+rw /var/run/docker.sock
第五步: 在项目根目录下创建文件名为 .gitlab-ci.yml 的文件,此文件是用来构建打包部署的
1 stages: 2 - build 3 - deploy 4 5 build: 6 stage: build 7 script: 8 - cd ./ 9 - docker build -f "./src/Test.Web/Dockerfile" --force-rm -t image-test --label "com.microsoft.created-by=visual-studio" --label "com.microsoft.visual-studio.project-name=Test.Web" "./" 10 only: 11 - master 12 13 deploy: 14 stage: deploy 15 script: 16 - cd ./ 17 - docker stop image-test18 - docker rm image-test19 - docker run -d --name image-test -p 8080:80 image-test-app20 only: 21 - master
我这里把构建分为了两个阶段,一个是编译,另外一个是部署
1.build阶段负责把源代码编译成一个容器镜像.这里需要注意的地方就是 cd 只cd到根目录下,不要直接cd到Dockerfile文件所在目录,而是在编译命令中指定Dockerfile文件目录
2.根据编译好的容器镜像启动容器.这里需要注意的是需要大家多一步判断如果容器为新建则要排除停止和删除容器,否则会出现部署不通过的错误
第六步: 使用git提交代码就会自动触发构建(当每一步都是绿色时,则表示构建成功),如下图
温馨提示:从图1中进入图2中红色框框项勾选上,则可以即使提交代码时没有tag标签也可以支持构建
图1
图2