最简单的window下使用Jenkins来做自动化部署的教程
这里有个重点:
要修改Jenkins服务的默认登录账号名称
否则ps脚本跑起来有异常
今天我们来说一下,如何使用Jenkins+powershell脚本,将我们的.NET CORE的脚本部署到对应的服务器上.
这里我们使用的源码管理工具是TFS.虽然源码管理器比较老旧,但是原理都差不多.
1.安装Jre,因为我们的Jenkins是基于java开发的,所以需要先在服务器上安装java的运行时环境
这个安装过程比较简单,百度下载JRE,然后安装,暂且不表.
下载地址:https://www.java.com/en/download/manual.jsp
2.下载并安装Jenkins,这里服务器是Windows的,所以最好下载Windows版本的,安装好以后直接就以Windows服务的形式运行了.
这个安装过程也是非常的简单,网上教程很多.
https://jenkins.io/download/
3.安装好Jenkins以后,根据需要我们安装权限插件,给不用的账号配置不通过的权限,(此步骤可选)
具体可参看此文章,说的很详细:
https://blog.csdn.net/qq_16320025/article/details/82897577
4.最关键的一步来了,就是如何使用Jenkins来自动部署我们的代码.
这里主要分以下几个小点,下面我会贴出详细的代码.
1)获取TFS中的最新源码,这里我并没有通过Jenkins去获取代码,而是通过tf命令去拉取代码的.
这样的好处就是,所有的Jenkins任务的源代码,我都可以使用同一份,而不用每个任务单独去拉取一份代码.
2)拉取到代码以后,自然就是通过命令来编译我们的代码,熟悉.net的朋友们应该都知道,无非就那几个命令了
3)代码发布出来以后,自然就是要将代码copy到我们的站点或者Windows服务下面去.
这一步也很简单,无非就是通过命令停止iis站点和应用程序池;copy代码;重启启动对应的站点即可
一套下来,打完收工.
下面贴出几个关键步骤的截图:
1.Jenkins创建自由风格的任务
2.其他什么都可以不选,只要我们使用powershell脚本,需要Jenkins支持powershell也需要安装插件
可参看如下链接:https://blog.csdn.net/ff55fff/article/details/76804966
3.点击保存,一套搞定.点击build now即可
ps:下面给出详细的powershell脚本,非常简单这里就不详述了,大家一看代码就明白了
net stop Test1Job C:\Windows\System32\inetsrv\appcmd.exe stop site Test1.test.com
C:\Windows\System32\inetsrv\appcmd.exe stop site Test1.api.test.com C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"test1.test.com"
C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"Test1.api.test.com" dir "$PSScriptRoot\lib" -Filter "*.ps1" | foreach {
. $_.fullName
Write-Host "Import $($_.fullName)"
} #1.获取源码
D:\test\tools\get_tfs.bat #2.编译源码
dotnet build D:\test\Source\MTools\Source-Promotion\Test.API.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore
echo API OK dotnet build D:\test\Source\MTools\Source-Promotion\Test.Web.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore
echo WEB OK dotnet build D:\test\Source\MTools\Source-Promotion\Test.Job.WindowsService.csproj -nowarn:msb3202,nu1503,cs1591 #--no-restore -v q
echo job OK Sleep 20 #3.发布 CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.API\bin\Debug\netcoreapp2.1 D:\Test\Test1\api
CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Web\bin\Debug\netcoreapp2.1 D:\Test\Test1\web
CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Web\wwwroot D:\Test\Test1\web\wwwroot
CCopy D:\test\Source\MTools\Test.\Source-Promotion\Test.Job.WindowsService\bin\Debug\netcoreapp2.1\win-x64 D:\Test\Test1\job net start Test1Job
C:\Windows\System32\inetsrv\appcmd.exe start site Test1.test.com
C:\Windows\System32\inetsrv\appcmd.exe start site Test1.api.test.com C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"test1.test.com"
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"Test1.api.test.com" Write-Host "success"
Get-Date
function CCopy($folder_a_path,$folder_b_path)
{
if(!(test-path $folder_b_path))
{
md $folder_b_path
} #遍历源文件夹下所有文件
$folders_a = gci $folder_a_path -Recurse
foreach ($folder_a in $folders_a)
{ if($folder_a.fullname -like "*appsettings.json*")
{
continue
} #通过替换的方式,取目标文件的全路径名称
$b = $folder_a.fullname.replace($folder_a_path,$folder_b_path)
#判断目标文件是否存在,如果存在则先判断新旧
If (test-path $b)
{
#判断目标是否为目录,如果是目录则跳过,如果不跳过,则会创建一级空目录
If (!((gi $b).PSIsContainer))
{
#判断目标文件、源文件的新旧情况,如果目标已存在文件的修改时间早于源文件,则重新拷贝覆盖
If ((gci $b).lastwritetime -lt $folder_a.lastwritetime)
{
copy-item $folder_a.fullname $b -force
}
} }
#如果目标文件不存在,则直接拷贝
Else
{
copy-item $folder_a.fullname $b
} }
}
复制文件
一套打完手工,大家有什么意见和建议,请提出~
后续将进一步写通过powershell将程序发布到其他服务器上,以及发布完成以后,邮件告知结果
"D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe" workspaces /collection:http://tfs.xx.net:8080/tfs/xxerp /login:leishen,pwd "D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe" get /recursive $/MTools /login:leishen,pwd
TFS获取代码
待续...
最简单的window下使用Jenkins来做自动化部署的教程的更多相关文章
- Jenkins+Docker+Git 自动化部署
Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...
- Jenkins+Gitlab+Ansible自动化部署(二)
接Jenkins+Gitlab+Ansbile自动化部署(一):https://www.cnblogs.com/zd520pyx1314/p/10210727.html Ansible的配置与部署 工 ...
- Linux-GitLab+Jenkins持续集成+自动化部署
GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...
- Jenkins+Gitlab+Ansible自动化部署(五)
Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...
- Jenkins+Gitlab+Ansible自动化部署(六)
Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...
- Jenkins+Gitlab+Ansible自动化部署(三)
接Jenkins+Gitlab+Ansible自动化部署(一)https://www.cnblogs.com/zd520pyx1314/p/10210727.html 和(二)https://www. ...
- Jenkins+Gitlab+Ansible自动化部署(一)
首先准备实验环境 虚拟机 主机名 IP地址 服务 系统版本 内核版本 Vmware Workstation 14 gitlab.example.com 192.168.244.130 gitlab ...
- Jenkins+Gitlab+Ansible自动化部署(四)
接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...
- Windows+.Net Framework+svn+IIS在Jenkins上的自动化部署入门
关于Jenkins的使用及安装,上一篇文章我已经介绍过了,Windows+.NetCore+git+IIS在Jenkins上的自动化部署入门.这篇主要是在jenkins如何安装SVN和MSBuild. ...
随机推荐
- 【Linux命令】nohup和&差异,查看进程和终止进程!
最近在开发dueros的技能,官方提供的PHPSDK中有多个实力,而运行实例的命令如下是 nohup php -S 0.0.0.0:8029 myindex.php & 从命令来看,肯定是在8 ...
- Windows7_64位 NVIDIA 卡 OpenCl环境配置
序 最近做一个项目需要用到OpenCL,由于之前没有接触过,所以在环境配置第一关就遇到了一些问题,查阅很多资料才配置完成,现在记录如下,希望给一些童鞋一些帮助. 整个步骤也很简单: 了解系统配置,选择 ...
- Linux学习-登录档的轮替(logrotate)
rsyslogd 利用的是 daemon 的方式来启动的, 当有需求的时候立刻就会被执行的,但是 logrotate 却是在规定的时间到了之后才来进行登录档的轮 替, 所以这个 logrotate 程 ...
- 针对NM_CUSTOMDRAW消息的学习
消息的形式:1 窗口消息,2 命令消息,3 WM_NOTIFY消息,4 自定义消息 我们的NM_CUSTOMDRAW消息就是就属于第三种WM_NOTIFY消息,而添加消息映射的方法分为两种: BEGI ...
- 令人惊叹的Npm工具包
1.http-server (简单搭建http服务器) 2.json-server (JSON服务器,快速搭建resful api接口) 3.cssnano (css多功能优化工具) PS:比uncs ...
- JDK并发基础与部分源码解读
之前写的一个ppt 搬到博客来
- 《Nginx高性能Web服务器详解》
第1章 Nginx初探 第2章 Nginx服务器的安装部署 第3章 Nginx服务器架构初探 第4章 Nginx服务器的高级设置 第5章 Nginx服务器的Gzip压缩 第6章 Nginx服务器的Re ...
- MySQL 表数据的导入导出
数据导出 1. 使用 SELECT ...INTO OUTFILE ...命令来导出数据,具体语法如下. mysql> SELECT * FROM tablename INTO OUTFILE ...
- django html render_to_response
#coding=utf-8 from django.shortcuts import render from blog.models import BlogPost from django.short ...
- Oracle实例和数据库区别
什么是数据库,其实很简单,数据库就是存储数据的一种媒介.比如常用的文件就是一种,在Oracle10G中,数据的存储有好几种.第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件 ...