使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S
使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S
先行条件:
1.了解NetCore项目基础命令,如dotnet publish 等几个常用命令。
2.了解Docker基础命令
3.了解centos基础命令
部署步骤:
大致会分为如下几个步骤,后面会详细解析
1.安装 Runner
2.注册 Runner
3.安装Docker环境
4.编写Dockerfile 脚本
5.编写 .gitlab-ci.yml 脚本
6.Push 代码
步骤分解:
1.安装 Runner (文章末尾有专门的命令解析参考地址)
Runner简介:Runner是配合 gitlab-ci 一起使用的,它可以拉取gitlab的代码并且执行一些命令,例如编译代码 发布代码等。并且最后将结果通知给Gitlab-CI。
我们Runner可以安装在任何系统的任何位置,我这里把他安装在centos系统中。
安装步骤如下:
1.1.为您的系统下载其中一个二进制文件:
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
1.2.赋予它执行权限:
sudo chmod +x /usr/local/bin/gitlab-runner
1.3.创建GitLab CI用户:
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
1.4.安装并作为服务运行:
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
2.注册 Runner
注册ranner是指让你刚刚安装的 runner与你的gitlab关联起来,使他有权限来访问你的代码并且发送通知给gitlab-ci。
2.1.执行注册命令
先开打如下图的页面找到 URL 和 Token
然后执行如下命令:(文章末尾有专门的命令解析参考地址)
sudo gitlab-runner register
会提示您输入 URL和Token 先把上图的URL 复制 粘贴 回车。然后在复制Token 粘贴 回车。
下面就会提示输入 Please enter the gitlab-ci description for this runner (输入描述)可直接跳过或者随便输入或稍后再GitLabUI中输入都可以。
接着提示输入 Please enter the gitlab-ci tags for this runner (comma separated) (输入标签信息 )可直接跳过或稍后再GitLabUI中输入都可以。
接着提示输入 Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh (输入Runner执行程序)我们这里输入 : shell 然后回车。
最后到这里就说明runner已经安装成功并且跟项目关联成功了,我们可以在 GitLab中查看 如下图:
3.安装Docker环境
安装Docker环境是为了我们把应用打包成 DockerImage 后上传到 阿里云的镜像仓库中 用于k8s的应用部署。
安装Docker大家自行 google 这里不再介绍如何安装。
4.编写Dockerfile 脚本
如果是NetCore 项目Dockerfile 脚本应该在项目的根目录下面(官方推荐)如下图是我的项目。
Dockerfile 内容:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
COPY . /root/publish/api.config.internal
WORKDIR /root/publish/api.config.internal
ENV ASPNETCORE_URLS http://*:7012
ENV ConnectionStrings_ConfigDbContext server=10.10.10.228;port=5566;user id=uat_ApiConfigCenterManage_Web;password=4g4TesrWg4;database=ApiConfigCenterDB;persistsecurityinfo=True;SslMode=None
ENV LoggerSettings_ClientName configcenter.internalapi_aliyun_log
ENV LoggerSettings_ServerUrl http://ulog.colipu.com:8080/v1/logs
ENV LoggerSettings_Level error
ENTRYPOINT ["dotnet", "Api.ConfigCenter.InternalApi.dll"]
以上为的Docfile脚本,大家可以参考一下,脚本中必须的命令是 FROM COPY WORKDIR ENTRYPOINT 这几个。至于为什么这样写大家可参考Docker官方文档。
5.编写 .gitlab-ci.yml 脚本
如果你的是netCore项目并且有解决方案,那么这个脚本应该创建在解决方案的根目录下。
如下图:
.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 24 25 26 27 28 29 30 31 32 33 34 | stages: - build - image - internalapi - build - image - manageapi job1: stage: build - image - internalapi only: refs: - tags variables: - $CI_COMMIT_TAG = ~ / ^internalapi - . * / script: # The output path is relative to the position of the csproj-file - dotnet publish - c Release - o .. / publishinternalapi . / Api.ConfigCenter.InternalApi / Api.ConfigCenter.InternalApi.csproj - - configfile Nuget.config - docker login - u sunqiang@aliyun - p passwordXXXXXXXXX registry - vpc.cn - shanghai.aliyuncs.com - cd publishinternalapi / - docker build - t registry - vpc.cn - shanghai.aliyuncs.com / clp - cip - apisystem / cip - configcenter - internalapi:$CI_COMMIT_TAG . - docker push registry - vpc.cn - shanghai.aliyuncs.com / clp - cip - apisystem / cip - configcenter - internalapi:$CI_COMMIT_TAG job2: stage: build - image - manageapi only: refs: - tags variables: - $CI_COMMIT_TAG = ~ / ^manageapi - . * / script: # The output path is relative to the position of the csproj-file - dotnet publish - c Release - o .. / publishmanageapi . / Api.ConfigCenter.ManageApi / Api.ConfigCenter.ManageApi.csproj - - configfile Nuget.config - docker login - u sunqiang@aliyun - p 123456XXXXXX registry - vpc.cn - shanghai.aliyuncs.com - cd publishmanageapi / - pwd - docker build - t registry - vpc.cn - shanghai.aliyuncs.com / clp - cip - apisystem / cip - configcenter - manageapi:$CI_COMMIT_TAG . - docker push registry - vpc.cn - shanghai.aliyuncs.com / clp - cip - apisystem / cip - configcenter - manageapi:$CI_COMMIT_TAG |
注意:yml脚本对格式要求非常严格,所以不能有一点儿错。
有了这个脚本之后,在你每次Push代码的时候GitLab会检测到项目的根目录是否有.gitlab-ci.yml 文件 如果有就会执行里面的内容。
脚本解释:(文章末尾有专门的命令解析参考地址)
1 2 | test variables |
1 | <br><br>script:必须存在的。在这里面的可以写任何脚本命令。其实就是命令行。<br>当最后执行完 docker push 命令的时候我的阿里云镜像仓库就可以看到了 |
1 | <br><br><br> |
1 | 最后就是通过当前镜像部署K8S应用了。<br>参考文档:<br>Gitlab CI yaml官方配置文件翻译:<a href = "https://segmentfault.com/a/1190000010442764" rel = "noopener nofollow" >https: / / segmentfault.com / a / 1190000010442764 < / a><br>Gitlab Runner:<a href = "https://docs.gitlab.com/runner/install/linux-manually.html" rel = "noopener nofollow" >https: / / docs.gitlab.com / runner / install / linux - manually.html< / a> |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想