1.准备项

1.1.服务器一台,1H4G(更小内存应该也可以,自行测试),系统:Ubuntu 16.04 64位

1.2.数据库一个,MYSQL,MSSQL都可以(还有其他的,自行配置),教程是MSSQL

1.3.其他软件,Xshell (用于远程Linux服务器),WinSCP(用于管理Linux服务器上的文件)

2.装服务器环境

2.1.Docker环境安装:

因为墙的原因,这里需要使用国内镜像加速服务,这里使用阿里云的镜像加速服务,阿里云的镜像加速服务,登陆阿里云后,选择[容器镜像服务]->[镜像加速器]

2.1.1首先,安装Docker 

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

装完后输入:

docker version

查询docker是否装成功。

然后配置加速源,这里可以使用阿里云提供的命令,也可以用WinSCP找到/etc/docker目录建立daemon.json

{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}

xxxxxxx改为阿里云提供给你的地址

如果是使用命令添加,请依此输入以下命令

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'

{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
} EOF

然后重启docker服务

systemctl daemon-reload

systemctl restart docker

Docker环境搭建完毕

2.1.TeamCity-Server环境安装

拉取官方镜像(有点大,建议使用云服务器测试,入站带宽大,下载速度块)

docker pull jetbrains/teamcity-server

出现

Status: Downloaded newer image for jetbrains/teamcity-server:latest

则拉取成功,接下来启动teamcity-server

docker run -d -it --name teamcity-ecms -v /data/tc/datadir:/data/teamcity_server/datadir -p 8111:8111 jetbrains/teamcity-server

//然后
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a0a5b60a4b1 jetbrains/teamcity-server "/run-services.sh" seconds ago Up seconds 0.0.0.0:->/tcp teamcity-ecms

出现上述结果就成功了。接下来打开防火墙8111端口(外网的话),访问: <your id>:8111

出现上述图片则搭建成功!

点击[Proceed]按钮进入下一步,选择你准备的数据库类型,这里选MSSQL,需要下载JDBC drivers,点击[Downloading JDBC drivers]的按钮就行了,自动下载

按上面的图片填写,点击[Proceed],稍等3-10分钟,如果出现报错,请检查你的参数是否填写正确!

弄完之后会出现一个协议,拉到最下面,勾选Accept license agreement,点击[Continue>]按钮

然后出现创建账号的页面,自行创建一个管理员账号,登陆~

到这里为止,如果没出现问题,那么teamcity-server的环境就搭建完毕了。

2.2.TeamCity-Agent环境安装

有个teamcity-server,还需要agent来做Build,push的工作(类似于编译平台)

第一步拉取Agent的镜像

docker pull jetbrains/teamcity-agent

第二步启动容器

docker run -d -it -e SERVER_URL="192.168.0.19:8111" -v /etc/docker:/data/teamcity_agent/conf  -v /var/run/docker.sock:/var/run/docker.sock -v /opt/buildagent/work:/opt/buildagent/work -v /opt/buildagent/temp:/opt/buildagent/temp -v /opt/buildagent/tools:/opt/buildagent/tools -v /opt/buildagent/plugins:/opt/buildagent/plugins -v /opt/buildagent/system:/opt/buildagent/system jetbrains/teamcity-agent

[192.168.0.19:8111]这里最好填内网地址(安装速度快,省流量),如果没有局域网,就要填外网地址,请大家注意!

并且这个启动方式会和Agent的共享主机的Docker配置和缓存,如果有疑问可以使用另外一个命令,https://hub.docker.com/r/jetbrains/teamcity-agent/,自行翻阅

执行后,可使用docker logs -f <CONTAINER-ID>查看启动日志,CONTAINER-ID使用docker ps查看

然后进入Server的WEBUI页面,选择Agents->Unauthorized

审核它!然后他就会出现在Connected里!

到这里为准,TeamCity的所有环境就搭好了!!!!!

2.3.Rancher环境安装

拉取镜像并部署容器

docker run -d --restart=unless-stopped -p : rancher/server

过3-5分钟后,防火墙打开8080端口,访问<your id>:8080

出现上述页面,成功,rancher环境安装完毕!!!

2.4.docker register环境配置

修改之前的daemon.json

{
"registry-mirrors": ["https://xfgphhex.mirror.aliyuncs.com"],
"insecure-registries":["192.168.0.19:5000"]
}

保存。192.168.0.19可以配置成外网(已测试,木有问题),记得打开5000端口!

重启docker

systemctl restart docker

注意,重启docker会把teamcity和rancher的容器关掉,记得重启一下3个容器(ID通过docker ps -a命令查询)

docker start <Container ID>

启动register

docker run -d -p : --name registry registry:

环境到这一步就搭建完毕了~!接下来就是DevOps实现

3.DevOps实践

3.1使用TeamCity制作镜像并注册到Docker register中

打开TeamCity,点击左上角[projects],点击[create project]

进入后,选择[Manually]

填一个名字保存。

进入下面这个页面,点击[+Create build configuration]

填一个名字保存。

进入下面这个页面,填写源代码的url,这里使用朋友的一个脚手架项目做演示,你们也可以先用这个做实验,gitee地址:https://gitee.com/kitteam/ecms

保存。返回下图的页面,点击Build Steps ,点击[+Add build step]按钮

第一步,使用dockerfile制作镜像,参数如下,dockerfile在图上的地址,自行在gitee查看,可以使用后面的选择选出来也行。路径一定要填'/'要不然copy代码会失败

第二步,将打包好的镜像register到agent的服务器上

继续[+Add build step],这次命令选other,具体参数如下图

第三部,把register里的镜像推送上去

继续[+Add build step],这次命令选push,具体参数如下图

OK,到这一步teamcity的配置就完成了!

接下来run一次把~~~~~

【192.168.1.43的问题是因为内网IP换了~~~,所以跟着换了,大家不用在意这点细节】

点击后,可以去[Projects]里看日志,稍等片刻把~(第一次build有点慢(5分钟左右),后续build因为docker缓存的原因会快很多(1分钟))

出现下图,则teamcity的任务就全部完成了!!

3.2使用Rancher管理主机,镜像,容器

3.2.1 添加主机

顶部:基础架构-主机,点击添加主机

点击保存

填写IP,复制下面的命令到服务器执行

 docker run -e CATTLE_AGENT_IP="192.168.1.43"  --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://xxx.xx.xx.xxx:8080/v1/scripts/4E62331D4DDD7218B2F3:1546214400000:WmLv6AlVT21dW7TheGXE8iRvQ

然后稍等片刻,安装成功后,前往主机页面查看

3.2.2 添加应用

点击左上角,选择环境

点击【添加应用】

随便填一下保存!

跳转后,点击右上角【添加服务】

填写参数如下图

点击创建

然后稍等片刻,打开主机

启动完成,这个时候打开<your ip>:8081访问网站

到这里,这个文章就结束了,成功~

希望文章对有兴趣搭建CI/CD DevOps环境的公司和个人有所帮助,蟹蟹!

TeamCity+Rancher+Docker实现.Net Core项目DevOps(目前成本最小的DevOps实践)的更多相关文章

  1. Linux服务器使用Docker部署.net Core项目

    发布ASP.NET Core项目 和普通的项目发布一样,将项目发布到目标文件夹中 构建Dockerfile文件 在目标文件根目录新建Dockerfile文件(没有后缀) FROM microsoft/ ...

  2. Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD

    随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了.一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛.即便你的项目少,每次花费在发布上面 ...

  3. Linux上用Docker部署Net Core项目

    前提:本地配置好Docker环境1.构建Net Core镜像 docker pull microsoft/dotnet 2.新建一个DockerFile文件并填充内容 #基于 `microsoft/d ...

  4. ASP.NET Core在CentOS上的最小化部署实践

    引言        本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用. 在开始之前,我们还是重温一下部署原理,正 ...

  5. windows下docker与.net core 的简单示例

    一 windows 下安装docker 二 .net core 项目 新建一个空的ASP.NET Core Web 应用程序 在该项目的目录下执行dotnet publish,可以看到在bin\Deb ...

  6. kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载

    1. 前言 2. Net Core项目本身的准备 2.1 dockerfile 2.2 创建kubernetes用于helm的chart包 2.2.1 说明 2.2.2 chart文件目录和文件组成 ...

  7. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...

  8. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  9. Docker + Jenkins 持续部署 ASP.NET Core 项目

    Docker 是个好东西,特别是用它来部署 ASP.NET Core Web 项目的时候,但是仅仅的让程序运行起来远远不能满足我的需求,如果能够像 DaoCloud 提供的持续集成服务那样,检测 gi ...

随机推荐

  1. spark1.0属性配置以及spark-submit简单使用

    在spark1.0中属性支持三种配置方式: 1.代码 在代码中构造SparkConf时指定master.appname或者key-value等 val conf = new SparkConf(); ...

  2. Python3 os模块应用

    调用模块的实质是运行python代码,比如a.py文件里有函数f(),那么你在调用a模块的时候,实质是运行了a模块里的函数f(),这个时候内存里就有这个函数了,可以直接用,那是不是随便一个py类型的文 ...

  3. json 拖拽

    1.梳理知识点 1.事件对象   e || event  2.事件对象的属性      鼠标事件对象 : 坐标属性 :  clientX  clientY  pageX  pageY   offset ...

  4. 0_Simple__simpleCooperativeGroups

    ▶ 协作组,CUDA9.0 的新特性 ▶ 源代码,如何获得协作组的编号? #include <stdio.h> #include "cuda_runtime.h" #i ...

  5. Amazon AWS S3 操作手册

    Install the SDK The recommended way to use the AWS SDK for Java in your project is to consume it fro ...

  6. VB6 内存释放

    VB在内存释放方面是这样的, 首先和其他任何语言一样,如果是在stack分配的空间的话,操作系统自动进行管理 比如下面的语句 dim a as string '当a 超出它的作用范围以后,就会被释放掉 ...

  7. AS3 - 数组元素乱序方法以及效率比较

    http://www.hangge.com/blog/cache/detail_453.html

  8. 前端-jQuery的ajax方法

    https://www.cnblogs.com/majj/p/9134922.html 0.什么是ajax AJAX = 异步的javascript和XML(Asynchronous Javascri ...

  9. python之model模块和包的介绍

    一,模块的概念:常见场景:一个模块就是一个包含了一组功能的Python文件,比如spam.py,模块名为spam,可以通过import spam使用 在Python中,模块的使用方式都是一样的,但其实 ...

  10. UILabel 自适应高度,宽度

    mLabel1 = [[UILabel alloc]initWithFrame:CGRectMake(0, 20, 10, 1)]; mLabel1.text = @"my label 1, ...