热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用GitlabCI实现NetCore项目Docker化并部署到阿里云K8S

使用Gitlab-CI实现NetCore项目Docker化并部署到阿里云K8S先行条件:1.了解NetCore项目基础命令,如dotnet publish等几个常用命令。2.了解D

使用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 命令的时候我的阿里云镜像仓库就可以看到了






 


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 打开文件管理器_【教程】模组管理器3.1食用指南
    文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • Dockerfile构建镜像的指令和说明
    本文介绍了Dockerfile是用来构建镜像的文本文件,其中包含了构建镜像所需的指令和说明。通过创建一个Dockerfile文件并编写内容,可以快速创建自定义的镜像。文章还提供了一个示例,展示了如何使用Dockerfile创建一个本地构建的nginx镜像,并通过docker images命令查看镜像的版本。希望本文对大家的学习有所帮助,并希望大家多多支持编程笔记。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
author-avatar
荣星树
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有