现在好多使用gitlab-ci的持续集成的教程,大部分都是发布到linux系统上的,但是目前还是有很大一部分企业使用的都是windows系统使用IIS在部署.NET应用程序。这里写一下如何使用gitlab-ci配合gitlab-runner持续集成到IIS吧。

安装gitlab

网上有很多安装gitlab的方法,这里推荐使用docker安装,真的超级超级方便。

这里有一篇文章

docker安装配置gitlab详细过程

https://www.cnblogs.com/zuxing/articles/9329152.html

这里就不细说了。毕竟重点不是说怎么安装gitlab哈哈哈。

配置windows服务器环境

  1. windows配置IIS环境
  2. 需要在服务器安装Node,yarn,git,dotnet2.2-sdk,dotnet-hosting。所需安装包如下图所示(自己去找下载链接哈哈哈):

第一次需要手动使用git配置用户密码,否则无法拉取gitlab上的代码。

单独使用git clone命令,将代码拉取下来。成功验证完用户权限信息后可删除文件。

在windows服务器上安装gitlab-runner

这里说一下为什么选gitlab-runner,不使用jenkins。(两种方式我都尝试过)

jenkins很强大很好,不需要自己安装编译环境,直接可以集成各种编译环境。但是需要额外部署一个jenkins服务,和gitlab服务分开,需要gitlab的webhooks触发事件。(没有运维团队一个人用的话觉得比较麻烦)

而gitlab-runner在windows环境把编译环境安装完,直接启动一个服务,把gitlab-runner注册到gitlab上即可。

在服务器上安装gitlab-runner

下载地址

https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe

在服务器中创建gitlab-runner目录,将下载好的gitlab-runner.exe放入,打开CMD。执行安装命令,gitlab-runner.exe install

其他操作系统安装方式查看 https://docs.gitlab.com/runner/install/

注册gitlab-runner到私有gitlab,执行命令gitlab-runner.exe register

打开http://gitlabserver/admin/runners 查看gitlab-runner注册时所需的url以及注册token。

./gitlab-runner.exe register

  • 第一步填入URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://gitlabserver/
  • 第二步填入token
Please enter the gitlab-ci token for this runner
xxx
  • 第三步填入runner描述
Please enter the gitlab-ci description for this runner
[hostname] my-runner
  • 第四步填入runner标签
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
  • 第五步选择runner执行环境
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
Shell

因为是直接部署到IIS,所以没有选择docker容器的方式。

这里是windows服务器所以使用powershell作为默认shell执行环境

启动gitlab-runner

执行命令gitlab-runner.exe start即可启动。

配置gitlab-ci.yml

使用gitlab-ci需要在项目跟路径添加.gitlab-ci.yml文件,在文件中添加CI所需要的命令。

详细的命令参数在此页面可查看http://gitlabserver/help/ci/yaml/README

每一个最高级的名字分别表示一个任务。

before_script和after_script中的指令是在管道执行前后所运行的指令。

gitlab-ci中默认有三个管道,执行顺序分别是build,test,deploy,同一个stage的任务是并行执行的。

这里我们只需要配置执行的编译发布脚本即可,一步到位哈哈哈,当然也可以分几个步骤,这里我偷懒了哈哈哈

Script下表示需要执行的命令。Only表示限定哪个分支可以触发。

超简单!只要会写powershell脚本即可

这里配合IIS的话我们直接将编译完的发布文件拷贝到IIS的站点目录下即可。

为了方便,将powershell脚本单独编写到build.ps1文件中,下面针对52ABP前后端分离项目编写如下powershell脚本。

# COMMON PATHS
$buildFolder = (Get-Item -Path "./" -Verbose).FullName
$slnFolder = Join-Path $buildFolder "src/aspnet-core"
$webHostFolder = Join-Path $slnFolder "src/Web.Host"
$ngFolder = Join-Path $buildFolder "src/angular"
Set-Location /
$rootFolder = (Get-Item -Path "./" -Verbose).FullName
$outputFolder = Join-Path $rootFolder "publish"
$endOutputFolder = Join-Path $outputFolder "Host"
$fontOutputFolder = (Join-Path $outputFolder "ng") ## RESTORE NUGET PACKAGES #####################################################
echo "开始还原后台"
Set-Location $slnFolder
dotnet restore
echo "还原后台结束"
## PUBLISH WEB HOST PROJECT ###################################################
echo "开始发布后台,发布目录为:"$endOutputFolder
Set-Location $webHostFolder
dotnet publish --output $endOutputFolder
echo "发布后台结束"
## PUBLISH ANGULAR UI PROJECT #################################################
echo "开始发布前端,发布目录为:"$fontOutputFolder
Set-Location $ngFolder
& yarn
& yarn build
Remove-Item $fontOutputFolder -Force -Recurse -ErrorAction Ignore
Copy-Item (Join-Path $ngFolder "dist") $fontOutputFolder -Recurse
echo "发布前端结束"

将.gitlab-ci.yml和build.ps1文件放入项目根目录,提交文件。

Gitlab-CI识别到.gitlab.yml文件后会自动执行CI脚本。



大佬说这里脚本写的有点弱,菜鸡水平没办法,powershell写的牛逼的可以直接操作IIS的API哈哈哈,这里我就不会了哈哈哈

配置IIS环境

Asp.net core发布到IIS需要安装Hosting Bundle,安装后,在IIS上添加网站,配置好基本目录信息后,修改应用程序池,选择无托管代码。



将asp.net core网站目录指向发布目录即可自动运行。

IIS配置angular前端环境。

由于angular是单页面前端项目,所以需要配置URL重写,否则页面刷新会出现404。

在IIS中安装URL重写功能,若没有,可以通过Web平台安装程序安装功能。

在angular项目的src目录下添加web.config文件,添加如下内容。



然后在前端项目根路径的angular.json文件中添加如下配置,将web.config配置成在发布时复制过去。



在IIS添加网站配置好后,将发布后的静态文件复制到网站目录即可。

这些复制的步骤直接可以通过powershell脚本自动化执行。

结果截图

下图就是我折腾过程中执行的截图

That's all

看完是不是觉得好简单的样子哈哈哈,只需要安装好相应的编译环境,然后写一下powershell脚本就行了,所以只要会写powershell脚本,那其他都不是问题了是吧~~

觉得写的不好的话,大佬们有意见欢迎评论吐槽~~~

超简单!asp.net core前后端分离项目使用gitlab-ci持续集成到IIS的更多相关文章

  1. asp.net core前后端分离

    陆陆续续的看了两个礼拜的前端知识,把vue+vue-router+axios的知识撸了一遍,本来想加个element-ui来实现一下前后端分离,实施的时候却遇到了很多的坑.我本身不在一个软件开发公司上 ...

  2. 分享我在前后端分离项目中Gitlab-CI的经验

    长话短说,今天分享我为前后端分离项目搭建Gitlab CI/CD流程的一些额外经验. Before Gitlab-ci是Gitlab提供的CI/CD特性,结合Gitlab简单友好的配置界面,能愉悦的在 ...

  3. Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_182 之前的一篇文章:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能,主要介绍了微信小程序内 ...

  4. List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac

    List多个字段标识过滤 class Program{  public static void Main(string[] args) { List<T> list = new List& ...

  5. .NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

    .NET Core前后端分离快速开发框架(Core.3.0+AntdVue) 目录 引言 简介 环境搭建 开发环境要求 基础数据库构建 数据库设计规范 运行 使用教程 全局配置 快速开发 管理员登录 ...

  6. [转].NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

    [转].NET Core前后端分离快速开发框架(Core.3.0+AntdVue) 目录 引言 简介 环境搭建 开发环境要求 基础数据库构建 数据库设计规范 运行 使用教程 全局配置 快速开发 管理员 ...

  7. Aspnet Mvc 前后端分离项目手记(二)关于token认证

    在前后端分离的项目中,首先我们要解决的问题就是身份认证 以往的时候,我们使用cookie+session,或者只用cookie来保持会话. 一,先来复习一下cookie和session 首先我们来复习 ...

  8. 如何使用Spring Securiry实现前后端分离项目的登录功能

    如果不是前后端分离项目,使用SpringSecurity做登录功能会很省心,只要简单的几项配置,便可以轻松完成登录成功失败的处理,当访问需要认证的页面时,可以自动重定向到登录页面.但是前后端分离的项目 ...

  9. Yii框架和Vue的完美结合完成前后端分离项目

    背景说明 本文假设你对Yii和Vue都比较熟悉,至少都在项目里用过,另外笔者新人,以后不定时放一些干货,欢迎程序媛关注 Yii是一个PHP全端框架,典型的mvc的项目结构,后端接口都是一个控制器里放了 ...

随机推荐

  1. linux禁用icmp(ping )

    永久禁用: echo net.ipv4.icmp_echo_ignore_all=1 >>/etc/sysctl.conf 永久启用: echo net.ipv4.icmp_echo_ig ...

  2. centos7 编译安装 php7.3.11

    1.安装依赖 yum install -y libxml2 *openssl* libcurl* libjpeg* libpng* freetype* libmcrypt* gcc gcc-c++ 2 ...

  3. lqb 基础练习 查找整数 (遍历)

    基础练习 查找整数 时间限制:1.0s   内存限制:256.0MB     问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含 ...

  4. 100天搞定机器学习|Day56 随机森林工作原理及调参实战(信用卡欺诈预测)

    本文是对100天搞定机器学习|Day33-34 随机森林的补充 前文对随机森林的概念.工作原理.使用方法做了简单介绍,并提供了分类和回归的实例. 本期我们重点讲一下: 1.集成学习.Bagging和随 ...

  5. gitbook 入门教程之一招彻底解决 favicon 图标失效问题

    favicon-absolute 项目 favicon-absolute 插件采用绝对路径设置网站 favicon 图标,相对于相对路径来说更加简单方便.

  6. 安装eclipse血泪史

    从大一到大三,屡次卸掉eclipse又屡次安装上,每次都要卡壳,所以这里开帖贴出自己的血泪史,以帮助大家 首先找一篇安装教程,网上有很多,这里不再赘述.举例 https://blog.csdn.net ...

  7. 新闻网页通用抽取器GNEv0.04版更新,支持提取正文图片与源代码

    GeneralNewsExtractor以下简称GNE是一个新闻网页通用抽取器,能够在不指定任何抽取规则的情况下,把新闻网站的正文提取出来. 我们来看一下它的基本使用方法. 安装 GNE 使用 pip ...

  8. 面试官:关于Java性能优化,你有什么技巧

    通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化. 一般有两种方案:即优化代码或更改设计方法.我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性 ...

  9. Android中的设计模式

    一.设计模式的分类 总体来说23种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式 ...

  10. 扛把子组Scrum立会报告+燃尽图 07

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/8684 一.小组情况组长:迟俊文组员:宋晓丽 梁梦瑶 韩昊 刘信鹏队名:扛把 ...