脚本如下
1 | SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, |
1 | SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, |
因为
jenkins
的docker
版本本身没有dotnetcore
的环境,所以我们需要先自己动手制作下包含dotnet
环境的jenkins
Docker Container
Dockerfile
1 | FROM jenkins/jenkins |
为了方便我已经把配置信息放到了github上大家可以访问直接使用
https://github.com/YahuiWong/jenkins-dotnet-core
使用步骤
1 | git clone https://github.com/YahuiWong/jenkins-dotnet-core.git |
Open ip:8080 on the browser
vi jenkins_home/secrets/initialAdminPassword & Set the initialAdminPassword string to your jenkins page
至此安装完毕。
jenkins
构建dotent core
的任务注意:初次配置的话 需要在 添加一个可以访问代码地址的
Credentials
如下图步骤添加打包脚本
打包脚本示例
1 | echo '============查看打包环境================' |
Publish Over FTP
使用说明我这里使用的是
jenkins
的Publish Over FTP
插件,安装好此插件之后在 系统管理->系统设置->Publish over FTP 里可以新增一个你要发布的ftp服务器信息。为了保证ftp可以正常连接建议尝试下右下角的Test Configuration
确认success
上面我们已经配置好Publish Over FTP
要用的ftp账号,新增我们新增构建后操作如下图选择此插件
然后选择配置好的ftp选项,配置如下所示
注意:这里的配置信息中
jenkins_publish
是和打包脚本对应的
点击立即构建之后,把构建任务开始进行中
如果想看的实时的构建信息可以点击如下图看到控制台输出
打开部署站点地址,发现站点已经运行起来了
如果您的.NET CORE项目使用的了第三方或者自建nuget服务,您需要在 配置下 jenkins_home/.nuget/NuGet/NuGet.Config
的信息
如我的使用了国内博客园的nuget加速地址和自建的nuget服务配置如下
1 | <?xml version="1.0" encoding="utf-8"?> |
app_offline.htm
配置文件解决可以先用ftp插件上传一个app_offline.htm
文件,部署完站点之后删除此文件
具体参考:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.1#app_offlinehtm
上一种解决方案文件被占用的方案有个弊端,app_offline.htm生效时间无法保证,所以最直接方案是直接使用命令行 关闭和启动站点 来解除占用
SSH plugin
搜索到插件安装好插件之后 在 系统设置 -> 全局设置 里面设置 目标服务ssh的ip端口&账号信息
为了保证是可以使用的 请 Test Configuration
通过
需要注意的是:Remote Directory
选项是 该ssh账号的默认目录 在之后的发布任务 设置的目录又是以 Remote Directory
为 根目录为基础的!
核心模块 调成为:编译打包->ssh远程关闭iis站点->发布到远程根目录->ssh远程开启iis站点
转载请注明出处 http://blog.yahui.wang/2018/05/31/jenkins-docker-dotnet-core-publish/
SqlServer的存储过程使用到了分布式事务的时候,需要开启MSDTC服务并且设置相应的安全设置设置
RPC
和 RPC Out
右键属性 设置为如下
另外 存储过程中 可以根据自己的需求来决定是否添加如下代码
SET XACT_ABORT ON
SET XACT_ABORT ON的作用分为两种:
SET XACT_ABORT ON
BEGIN TRAN
--要执行的语句
COMMIT TRAN
GO
SET XACT_ABORT ON
BEGIN
--要执行的语句
END
GO
最近项目里面用到了React但是发布到iis站点之后,路由地址 刷新访问直接404错误。查阅资料之后发现是iis缺少配置URL重写 的问题导致的。下面我们来图形化配置,简单的配置下IIS
Web平台安装程序
搜索url
关键字,您会看到
直接安装
新增配置如下
配置如下 关键节点是:rewrite
1 | <?xml version="1.0" encoding="UTF-8"?> |
1 | server { |
找到conf目录下的web.xml文件,然后加上一句话让他定位回来
1 | <error-page> |
.htaccess
文件配置如下
1 | <IfModule mod_rewrite.c> |
转载请注明出处 http://blog.yahui.wang/2018/05/18/React-Router-browserHistory-IIS/
GitLab是一个Git的代码托管工具,有免费的社区版允许我们在本地搭建代码托管网站,也有付费的企业版网站,能够在线托管代码。传统方式是手动下载Gitlab的软件包,然后搭建相关运行环境。不过这种方式非常麻烦,而且如果要更换机器所有配置工作又得重来一边,如果有同学学过Java的话应该记得初学Java时配置环境变量的恐惧吧?因此更好的办法就是使用现在非常流行的Docker。
那么Docker又是个什么东西呢?这是一个虚拟化的运行工具,主要目的是将软件和整个运行环境打包起来,让我们不需要配置即可快速运行软件。由于Docker依赖于Linux内核的某些特性,所以Docker只能在Linux上运行。Windows上的Docker实际上是开了一个虚拟机。Docker目前好像没有比较好的中文社区,我谷歌了一下只找到了这个Docker中文社区,看起来还行。
配置好加速器之后,下载就很快了。直接执行下面的命令,稍等片刻之后,Docker就会将Gitlab下载好了。
1 | sudo docker pull gitlab/gitlab-ce:latest |
用下面的命令启动一个默认配置的Gitlab。如果我们只在本机测试使用的话,将hostname替换为localhost。如果需要让外部系统也能访问的话使用外网IP地址。
1 | sudo docker run --detach \ |
首次启动可能比较慢,需要等待一分钟左右的时间。我们可以使用sudo docker ps命令查看当前所有Docker容器的状态。当它的状态由starting变为运行时间时,说明成功启动了。我们直接使用上面配置的IP地址(如localhost)在浏览器中访问即可。
初次使用需要我们创建默认管理员密码,随便指定一个就行了。然后我们需要注册一个普通用户。以后的使用方法和Github这样的工具很相似了。
刚刚启动Gitlab的时候需要我们输入一个密码,这个密码是管理员用户的密码。我们在登录那里使用root作为用户名,然后用刚刚设置的密码,就可以以管理员身份登录Gitlab。
登录进去之后,点击右上角的齿轮图标,即可进入到管理员页面。在这里我们可以设置很多东西。比如说,默认情况下每个用户只能创建10个仓库,我们可以改变这个设置。在管理员页面点击右面的齿轮,再点击设置,就会进入到系统设置中。然后找到Default projects limit一项,我们给它设个小目标,设它一个亿,这样就相当于无限仓库了。当然如果你实际硬盘满了也就不能在创建更多项目了。
如果这些配置还是不能满足你的需求的时候,还可以直接配置Gitlab。首先进入到Docker环境中。我们使用下面的命令进入Docker环境的bash中。gitlab是刚刚指定的Gitlab名称。
1 | sudo docker exec -it gitlab /bin/bash |
然后就进入了Docker的环境中,我们可以把它当作一个独立的系统来使用。然后编辑/etc/gitlab/gitlab.rb文件,这是Gitlab的全局配置文件。所有选项都可以在这里配置。
1 | nano /etc/gitlab/gitlab.rb |
详细的配置方法我也不会,直接看官方文档吧。
以后如果需要更新Gitlab版本,首先需要停止并删除当前的Gitlab实例。
1 | sudo docker stop gitlab |
然后在拉取最新版的Gitlab。
1 | sudo docker pull gitlab/gitlab-ce:latest |
然后在使用上次的配置运行Gitlab即可。不用担心数据会丢失。只要你的volume参数指定还和上次一样,Gitlab就会自动读取这些配置。
1 | sudo docker run --detach \ |
最后来看看使用Docker的优势。还是在Gitlab的Bash中。我们依次输入下面的命令,看看有什么反应。
1 | ruby --version |
不出意外的话应该会显示对应软件的版本。我们看到Gitlab使用了4个开源软件或运行环境:ruby、git、redis和postgresql。如果我们手动安装Gitlab的话,这几个软件也必须分别安装和配置好。这个任务的难度可是非常大的。而且如果需要在多台机器上配置,那么任务量就更大了。但是如果使用Docker的话,我们甚至完全没必要知道这几个软件的存在,简单两条命令即可创建和运行Gitlab。这正是Docker的魅力,难怪现在越来越多的公司在使用Docker。
docker-compose
部署的话1 | web: |
参考资料https://yq.aliyun.com/articles/29941
https://docs.gitlab.com/omnibus/docker/README.html#gitlab-docker-images
http://blog.csdn.net/u011054333/article/details/61532271
Homebrew
brew
全称Homebrew
是Mac OSX
上的软件包管理工具,官网https://brew.sh/。Homebrew
安装和卸载工具 只用一行命令就能完成
打开Mac OSX的命令终端
执行命令
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
命令执行完毕,既可以完成brew的安装
命令终端输入:
1 | brew install git |
安装好之后建议安装下 smartgit便于管理本地git仓库
chocolatey
Windows系统也有个很好用的包管理工具 chocolatey,这里我们使用chocolatey
来很方面的安装我们需要的基本环境
说先安装 chocolatey
使用组合键(Win+X+A
)打开Windows的命令终端 PowerShell
or CMD
。
注意命令终端要在管理员模式下运行
CMD
1 | @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" |
PowerShell
1 | Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) |
可能需要等待一会,具体等待时间由个人网络情况而定
安装好chocolatey
之后我们可以安装各种开发环境和开发工具了
安装GIT
1 | choco install git -y |
安装完毕之后建议安装个tortoisegit
便于在资源管理器中管理本地git仓库
1 | choco install tortoisegit -y |
镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在):
1 | npm config set registry https://registry.npm.taobao.org |
1 | npm --registry https://registry.npm.taobao.org info underscore |
~/.npmrc
例如:C:\Program Files (x86)\nodejs\node_modules\npm\npmrc
文件 加入下面内容
1 | registry = https://registry.npm.taobao.org |
搜索镜像: https://npm.taobao.org
建立或使用镜像,参考: https://github.com/cnpm/cnpmjs.org
如果想换回来请吧上面的registry参数
https://registry.npm.taobao.org
改为https://registry.npmjs.org/
即可
1 | yum install epel-release |
1 | python34 |
1 | yum install python34-setuptools |
之后就可以使用
pip3
了
1 | pip3 |
Python2
共存1 | yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel |
浏览器打开 https://www.python.org/ftp/python/
查看最新的Python
版本,标记为3.A.B
1 | wget https://www.python.org/ftp/python/3.A.B/Python-3.A.B.tgz |
Python3
的目录1 | mkdir /usr/local/python3 |
1 | tar -zxvf Python-3.A.B.tgz |
1 | ./configure --prefix=/usr/local/python3 |
Python3
的软链接1 | ln -s /usr/local/python3/bin/python3 /usr/bin/python3 |
Pip3
的软链接1 | ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 |
1 | python3 |
总体安装 3.6.6的脚本:
1 | yum -y install gcc automake autoconf libtool make |
稍作修改就变成了 2.7 的安装
1 | wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz |
我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:
1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那样,我们这网络一断开,或一关机,程序就断掉或找不到数据,跑了几天的程序只能重头再来,很是烦恼)
2:不影响计算效率
2:让程序在后台跑后,不会占据终端,我们可以用终端做别的事情。
&
在您执行的程序后面加上
&
,可以把当前命令放到后台执行,但是退出终端的时候,当前程序会退出
1 | watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本 |
ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
jobs
查看当前有多少在后台运行的命令
jobs
-l选项可显示所有任务的PID
,jobs
的状态可以是running
, stopped
, Terminated
。但是如果任务被终止了(kill
),shell`` 从当前的
shell`环境已知的列表中删除任务的进程标识。
nohup
nohup
最简单暴力,让程序使用在后台执行,就算关闭了当前的终端也执行(&是做不到的)。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps
(进程查看命令)。
1 | ps -aux | grep "test.sh" #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分 |
setsid
nohup 通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点
1 | setsid ping blog.yahui.wang |
输出
1 | xxx 77335 1 0 13:13 ? 00:00:00 ping www.ibm.com |
值得注意的是,它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。可以自己动手将此例与nohup
例中的父 ID 做比较。体会更多。
disown
如果事先在命令前加上
nohup
或者setsid
就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。
在我们的日常工作中,我们可以用 CTRL-z 来将当前进程挂起到后台暂停运行,执行一些别的操作,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)继续运行。这样我们就可以在一个终端内灵活切换运行多个任务,这一点在调试代码时尤为有用。因为将代码编辑器挂起到后台再重新放回时,光标定位仍然停留在上次挂起时的位置,避免了重新定位的麻烦。
1.用disown -h jobspec 来使某个作业忽略HUP信号。
2.用disown -ah 来使所有的作业都忽略HUP信号。
3.用disown -rh 来使正在运行的作业忽略HUP信号。
需要注意的是,当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。
但是还有一个问题,这种方法的操作对象是作业,如果我们在运行命令时在结尾加了”&”来使它成为一个作业并在后台运行,那么就万事大吉了,我们可以通过jobs命令来得到所有作业的列表。但是如果并没有把当前命令作为作业来运行,如何才能得到它的作业号呢?答案就是用 CTRL-z(按住Ctrl键的同时按住z键)了!
CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg jobspec 来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。
screen
我们已经知道了如何让进程免受 HUP 信号的影响,但是如果有大量这种命令需要在稳定的后台里运行,如何避免对每条命令都做这样的操作呢?
此时最方便的方法就是 screen 了。简单的说,screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。screen 的参数很多,具有很强大的功能,我们在此仅介绍其常用功能以及简要分析一下为什么使用 screen 能够避免 HUP 信号的影响。
使用 screen 很方便,有以下几个常用选项:
htop是一个Linux进程监视工具,它是top命令的替代工具,它是Linux和Unix操作系统中的标准和默认进程监视工具。但是CentOS 7上的htop更易于用户使用,并且与Linux的top命令相比,输出更容易阅读。
在本教程中,我们将学习如何使用yum install命令和epel存储库在CentOS 7上安装htop。
在CentOS 7上安装htop我们想添加CentOS epel版本库,因为htop软件包没有默认的CentOS yum版本库。
首先,启用CentOS 7上的epel版本。
1 | sudo yum -y install epel-release |
现在我们可以使用yum install命令安装CentOS htop。
1 | sudo yum -y install htop |
现在开始htop程序,打开Linux终端并键入htop
您可以看到htop过程监控工具的输出更具可读性,易于理解。
在本教程中,我们使用epel存储库在Linux CentOS 7上安装了htop。
首先,我们启用epel-release,然后使用yum命令安装htop(没有epel-release,您将收到以下错误“No package htop available”)。
我们也可以用同样的方法在CentOS 6.5及以前的版本上安装htop。
1 | # 安装GCC 和编译Linux内核的库 |