NET Core+win10+Jenkins+Gogs+open ssh持续集成
背景
阿里云测试环境一台,带宽1M跟不上,Jenkins安装一个插件耗时很长,于是想在本地搭建Jenkins服务,将生成的安装文件同步到目标服务器上。
技术点有:
win10
:本地环境是win10,测试环境是windown server 2012 R2
NET Core
:部署版本是2.1.1
,部署在IIS
上Jenkins
: 安装jenkins就不介绍了bat
:需要懂一点批处理命令·
Jenkins插件:Gogs plugin
Publish Over SSH
所需插件自行安装
Jeknin配置流程
创建Item
选择Gogs源码地址
这里三个是必填项:仓库地址,登陆凭据,代码分支;
Gogs
是基于Git
的这里和Github
的仓库地址是一样的。
这里需要一个登陆凭证用于拉取代码,提供的凭证类型有很多,有用户名账户、SSH、以及秘钥等,这里选的是用户名和密码凭证:
分支格式就是*/xxxx
,这里用的是develop
构建触发器
这里选择的时候当Gogs
仓库收到push推送的时候触发构建。
如果没有这个选项,需要安装
Gogs plugin
插件
由于Jenkins
是本地搭建的,Gogs
无法将消息推送到,所以使用了内网穿透。
uTools 提供免费的内网穿透,很好用!
效果类似这样:
构建
jenkin
提供的脚本很多,其它的没用过,这里用到是Excute Windows batch command
这个选项
脚本命令如下:
// 清空xxxx文件夹所有文件
rd "%WORKSPACE%\publish\xxxx"
//如果不存在创建文件夹
if not exist "%WORKSPACE%\publish\xxxx" md "%WORKSPACE%\publish\xxxx"
//生成项目打包文件到指定文件夹下
dotnet publish "%WORKSPACE%\xxxx\xxxx\xxxx.csproj" -o "%WORKSPACE%\publish\xxxx"
//当前目录是在%WORKSPACE%下的,需要cd指定具体操作目录
cd publish/xxxx
//这里是将生成的项目文件使用7-zip打包了,所以需要删除上次遗留的压缩文件,不然会将上次打包文件也打包进去
del /a/f/q xxxx.api.zip
//删除webconfig,不想copy到目标服务器上
del /a/f/q web.config
//压缩项目文件
"C:\Program Files\7-Zip\7z.exe" a "xxxx.api.zip" "**"
之所以删除
web.config
,dotnet publish
命令不知道怎么在web.config
下生成相应的环境变量,比如目标环境是Staging
.
构建后操作
构建好发布包后,一般是部署了,拷贝到web服务下。
这里目标服务器是远程不在局域网内,之前使用过很多种方式都没成功,比如:psexec
,net use
命令。最终只有SSH完成部署。
这里的目标服务器是预先配置好的,在jenkins
的系统配置里的SSH 项下:
选择好目标服务后,设置必要的参数:
Transfer Set
需要填写选项:
Source files
:需要拷贝的目标文件Remove prefix
:移除前缀,如果不移除,会在目标服务器将前缀作为目录生成Remote directory
:目标及其需要安装SSH,这里是选择SSH可以操作的远程目录。Exec command
:将文件拷贝到目标机器后,可以执行命令,这里的命令测试时候好像只能执行一条,如果需要批量执行还是填写bat
地址吧。
本文拷贝完成后需要执行停止应用程序池和重启功能,如下:
C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"xxx"
"C:\Program Files\7-Zip\7z.exe" x "C:\Users\Administrator\jenkins\xxx.zip" -aoa -o"C:\iis-publish\jenkins\xxx"
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"xxx"
ECHO 服务器脚本执行完毕
第二行是7-zip的压缩命令:
x
:后面的参数源压缩文件;-o
:是解压到目标文件夹;-aoa
:是强制覆盖重复的文件;
Tip
"C:\Program Files\7-Zip\7z.exe"
这个命令要加引号,不然出错!为什么这样没搞清楚!stop apppool /apppool.name:"xxx"
命令name后面不能有空格,不然也会出错的!踩过的坑!
参考
NET Core+win10+Jenkins+Gogs+open ssh持续集成的更多相关文章
- NET Core+win10+Jenkins+Github持续集成
本篇和上一篇NET Core+win10+Jenkins+Gogs+open ssh持续集成没什么区别,只不过源码库换成github. 这里有两点不一样的是: 获取的代码的凭证不用用户名和密码用sec ...
- 使用 Jenkins 搭建 iOS/Android 持续集成打包平台【转】
背景描述 根据项目需求,现要在团队内部搭建一个统一的打包平台,实现对iOS和Android项目的打包.而且为了方便团队内部的测试包分发,希望在打包完成后能生成一个二维码,体验用户(产品.运营.测试等人 ...
- Jenkins Jenkins结合GIT Maven持续集成环境配置
Jenkins结合GIT Maven持续集成环境配置 by:授客 QQ:1033553122 安装Git插件 1 安装Git客户端 1 安装JAVA JDK及MAVEN 2 Jenkins JDK ...
- Docker+Jenkins+Maven+SVN搭建持续集成环境
Docker+Jenkins+Maven+SVN搭建持续集成环境 环境拓扑图(实验项目使用PHP环境) 发布流程图 环境说明 系统:Centos 7.4 x64 Docker版本:18.09.0 Ma ...
- Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...
- Jenkins构建Android项目持续集成之findbugs的使用
Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题 ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)(转载)
本文结构 ASP.NET Core应用程序的构建 ASP.NET Core应用程序容器化所需注意的问题 应用程序的配置信息 端口侦听 ASP.NET Core的容器版本 docker镜像构建上下文(B ...
- 漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃monkey日志
漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃日志 1.APP崩溃率标准 开发或测试app的同学,对于app崩溃肯定非常熟悉,频繁的线上崩溃属 ...
- ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成
为什么不用gitlab? 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置.采用go语言开发的gogs来代替,搭建方便(不到10分钟就能安装完成),资源消耗低,功能也比较强大,也 ...
随机推荐
- String Problem
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 29 August
P1352 Bosses' Masquerade 树形DP模板. #include <cstdio> #include <algorithm> using namespace ...
- scrapy之Request对象
我们在使用scrapy框架的时候,会经常疑惑,数据流是怎么样在各个组件中间传递的.最近经常用scrapy+selenium爬取淘宝,又因为今天周五心情好,本宝宝决定梳理一下这方面知识. scrapy中 ...
- python 数字系列-无穷大与NaN
无穷大与NaN 问题 你想创建或测试正无穷.负无穷或NaN(非数字)的浮点数. 解决方案 Python并没有特殊的语法来表示这些特殊的浮点值,但是可以使用 float() 来创建它们.比如: > ...
- thread_process_action
import math import random import re import sys import threading from time import ctime, sleep from l ...
- js-判断当前页面是否在移动端打开显示的
if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)==false) { //该页面不是在移动端打开的, }
- 机器学习实战笔记-7-AdaBoost元算法
AdaBoost(Adaptive boosting)元算法 元算法:将不同分类器组合起来的结果,也叫集成方法. AdaBoost优点:泛化错误率,易编码,可应用在大部分分类器,无参数调整:缺点:对离 ...
- Learning OSG programing---osgAnimation(2)
osg::Node* createBase(const osg::Vec3& center,float radius) { ; ; *radius; *radius; osg::Vec3 v0 ...
- [Linux] 011 其它权限管理命令
1. 权限管理命令:chown 命令名称:chown 命令英文原意:change file ownership 命令所在路径:/bin/chown 执行权限:所有用户 语法:chown [用户] [文 ...
- Expected one result (or null) to be returned by selectOne() 数据库结果集和java实例
mybatis会根据查询的结果集初始化java实例. 如果是复杂类型,我们一般都会在mapper中做好映射. 1.所以如果查询到的是多个结果,那么对应的java类型也必须的集合类型.(result 为 ...