使用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 脚本内容:
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 Aa123456 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 Aa123456 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 文件 如果有就会执行里面的内容。
脚本解释:(文章末尾有专门的命令解析参考地址)
stages:表示 定义构建的阶段,我这里定义了2个阶段,因为我这个解决方案下面有两个项目。也可以定义一个那就是把脚本全部写在一块了。
job1:表示第一个阶段的名字,这个是自定义的。
stage:定义job stage (默认:test
) 表示要执行哪个阶段
only:定义一列git的分支。 refs tags 表示只通过标签的形式触发job任务来构建应用(如果不这样写,那你每次推送代码的时候都会执行job)
variables:表示在job中是可以使用关键字variables
来定义job变量。
$CI_COMMIT_TAG =~ /^manageapi-.*/ 表示我以标签 manageapi-v1 为例 要推送的项目 如下截图
script:必须存在的。在这里面的可以写任何脚本命令。其实就是命令行。
当最后执行完 docker push 命令的时候我的阿里云镜像仓库就可以看到了
最后就是通过当前镜像部署K8S应用了。
参考文档:
Gitlab CI yaml官方配置文件翻译:https://segmentfault.com/a/1190000010442764
Gitlab Runner:https://docs.gitlab.com/runner/install/linux-manually.html
使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S的更多相关文章
- Azure 实践(4)- CI/CD .netcore项目Docker构建及部署
上篇已介绍了.netcore项目构建的相关步骤,本篇继续完善 1.什么是CI/CD CI/CD 中的"CI"始终指持续集成,它属于开发人员的自动化流程.成功的 CI 意味着应用代码 ...
- SpringBoot项目docker化
前言 有很多种方案构建Docker镜像,包括Dockerfile构建.maven插件构建,这里我使用了最简单的Dockerfile构建的. 一.安装Docker 我的虚拟机系统是CentOS7,需要是 ...
- 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库
两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...
- javaWeb项目部署到阿里云服务器步骤
记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以 ...
- flask项目部署到阿里云 ubuntu16.04
title: flask项目部署到阿里云 ubuntu16.04 date: 2018.3.6 项目地址: 我的博客 部署思路参考: Flask Web开发>的个人部署版本,包含学习笔记. 开始 ...
- 小程序后端项目【Springboot框架】部署到阿里云服务器【支持https访问】
前言: 我的后端项目是Java写的,用的Springboot框架.在部署服务器并配置https访问过程中,因为做了一些令人窒息的操作(事后发现),所以老是不能成功. 不成功具体点说就是:域名地址可以正 ...
- javaWeb项目部署到阿里云服务器步骤 完整版
记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以 ...
- 如何把php项目部署到阿里云服务器window server2012__含公网ip访问时jquery/ajax失效解决办法
记一次蛋疼的折腾. 弄了一晚上最后发觉是360浏览器的问题,换个浏览器就好了.垃圾360用什么IE7文档模式.导致界面和功能失效. 建议大家测试的时候用firefox或者chrome. 项目部署到服务 ...
- 2018.11.7 关于将Web项目部署到阿里云服务器-5个步骤搞定
将Eclipse导出的War包部署到阿里云服务器上,提供给移动端实时的访问 1. 先登录阿里云网站注册账号,选择服务器类型(我用的是 云服务器ECS), 如果你还是在读大学生可享受优惠价,最低好像是9 ...
随机推荐
- WPF 用代码调用dynamic resource动态更改背景 - CSDN博客
原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: <Button Click=&qu ...
- liunx 桥接 上网 ip配置 外部网络访问
一.设置VMware 在vmware的[编辑]-->[虚拟网络编辑器]设置:将VMnet0设置为“桥接”,并桥接到宿主机器的网卡(可以是有线或者无线网络). 二.设置虚拟机系统(以cento ...
- 【全面解禁!真正的Expression Blend实战开发技巧】十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel)
原文:[全面解禁!真正的Expression Blend实战开发技巧]十一章 全面解析布局(Grid & Canvas &StackPanel &Wrappanel) 写这篇文 ...
- Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化
原文:Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化 [函数名称] 简单统计法图像二值化 WriteableBitmap StatisticalThSegment(Wr ...
- C#获取带汉字的字符串长度
正常情况下,我们是直接去string的length的,但是汉字是有两个字节的,所以直接用length是错的.如下图: 所以应该用以下代码来获取长度: private void button1_Clic ...
- spring-mvc+freemarker整合(sonne_game网站开发03)
今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...
- 修改用户名后TSF出现"需要本地工作区。工作区 xxx 并未驻留在本计算机上"
解决方法就是:1,打开vs下的"开发人员命令提示"2,按下面格式输入命令:tf workspaces /collection:http://192.168.0.110:8080/t ...
- 冒泡排序C#实现,使用委托,包括三种方式:Fun<>,匿名方法,Lambda表达式
冒泡排序是一种简单的排序方法,适合于小量数字排序,对于大量数字(超过10个),还有更高效的排序方法. 这里的实现的冒泡排序,需实现功能: 不仅数字排序,还要对任意对象排序 示例: 对People对象的 ...
- 今天想安装 windowsl ive 提示安装失败 错误码
Windows Live installation error: OnCatalogResult: 0x80072ee6 看了了这个老兄的回答,试了试,果然OK,谢谢@普洛提亚从这里下载安装包,然后安 ...
- Layui 是一款采用自身模块规范编写的国产前端UI框架(5600个Star)
采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写形式,极低门槛,拿来即用. http://www.layui.com Layui 是一款采用自身模块规范编写的国产前端UI框架, ...