TeamCity+Rancher+Docker实现.Net Core项目DevOps

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 

装完后输入:

查询docker是否装成功。

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

1

2

3

{

  "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

出现

1

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

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

1

2

3

4

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

//然后

docker ps

1

2

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

7a0a5b60a4b1 jetbrains/teamcity-server "/run-services.sh" 6 seconds ago Up 5 seconds 0.0.0.0:8111->8111/tcp teamcity-ecms

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

640?wx_fmt=png

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

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

640?wx_fmt=png

按上面的图片填写,点击[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

640?wx_fmt=png

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

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

2.3.Rancher环境安装

拉取镜像并部署容器

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

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

640?wx_fmt=png

出现上述页面,成功,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

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

docker start <Container ID>

启动register

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

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

3.DevOps实践

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

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

640?wx_fmt=png

进入后,选择[Manually]

填一个名字保存。

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

640?wx_fmt=png

填一个名字保存。

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

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

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

640?wx_fmt=png

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

3.2.1 添加主机

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

640?wx_fmt=png

点击保存

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

3.2.2 添加应用

点击左上角,选择环境

640?wx_fmt=png

点击【添加应用】

640?wx_fmt=png

640?wx_fmt=png

随便填一下保存!

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

640?wx_fmt=png

填写参数如下图

640?wx_fmt=png

点击创建

然后稍等片刻,打开主机

640?wx_fmt=png

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

640?wx_fmt=png

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

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

原文地址:https://www.cnblogs.com/duwamish/p/10971480.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARC078F - Mole and Abandoned Mine(状压DP)

ARC078F - Mole and Abandoned Mine Solution 状压dpdpdp。 首先去掉边最小选取边最大&#xff0c;答案为所有边权和减掉选取边权和&#xff0c;于是我们想要最大化选取的边权和。 假设我们知道最后剩下的唯一一条1...n1...n1...n的路径v1,v2,v3...vk(v11,vkn){v_1,v_2,v_3…

Codeforces Round #703 (Div. 2) D . Max Median 二分 +思维

传送门 题意&#xff1a; 给定一个数组和k&#xff0c;求一段连续区间中位数最大值&#xff0c;连续区间长度>k。 如果k的话可以直接秒了&#xff0c;这里是>k&#xff0c;我们可以通过二分让后利用>k这个条件来检查答案。 二分中位数&#xff0c;假设当前二分的为m…

.NET工程师的书单

短暂的假期里抽空整理了一份书单&#xff0c;以个人的见解这些应该是值得.NET工程师至少去看一遍的书籍。但所罗列的仅包括国内目前已出版的国外书籍的英文版&#xff0c;并不包含中文翻译及相关领域的中文书籍。这里没有任何歧视之意&#xff0c;只是更推荐工程师具备熟练阅读…

ARC079F - Namori Grundy(构造,基环树)

ARC079F - Namori Grundy Solution 首先这是一个NNN个点NNN条边的有向图&#xff0c;所以它的基图是一棵基环树&#xff0c;其次这个图的所有点入度为111&#xff0c;因此这是一棵基环外向树。 然后对于aia_iai​&#xff0c;假设我们求出S{aj∣(i,j)∈E}S\{a_j|(i,j)\in E\…

Codeforces Round #703 (Div. 2) B.Eastern Exhibition 中位数结论

link 题意&#xff1a; 给n个点&#xff0c;求有多少个点到所有点距离之和最小。 中位数结论题了&#xff0c;可以考虑一维的情况&#xff0c;让后二维的话乘起来就好啦。 //#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string&g…

微服务架构下静态数据通用缓存机制

在分布式系统中&#xff0c;特别是最近很火的微服务架构下&#xff0c;有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案&#xff0c;这篇文章将结合一些实际的研发经验&#xff0c;尝试理清其中存在的关键问题以及探寻通用的解决之道。什么是静态数据这里静态…

ARC080F - Prime Flip(贪心,差分,二分图匹配)

ARC080F - Prime Flip Solution 差分&#xff0c;转化为每次可以翻转i,j(j−i∈oddprime)i,j(j-i\in odd\;prime)i,j(j−i∈oddprime)。 显然若j−ij-ij−i是奇质数&#xff0c;则需要111次。 否则若j−ij-ij−i是偶数&#xff0c;则需要222次。 否则若j−ij-ij−i是奇数&am…

Codeforces Round #703 (Div. 2) E. Paired Payment 最短路 + 思维

link 题意&#xff1a; 给一张图&#xff0c;每次只能一下走两个点&#xff0c;比如当前在aaa&#xff0c;往下走到bbb再到ccc&#xff0c;权值为(wa,bwb,c)2(w_{a,b}w_{b,c})^2(wa,b​wb,c​)2。求1到其他点的最短路&#xff0c;不存在输出−1-1−1。 思路&#xff1a; 如果…

ARC077E - guruguru(差分)

ARC077E - guruguru Solution 考虑每一次改动对于每一个xxx的影响。 设我们要从aaa变到bbb。 当a−>x−>ba->x->ba−>x−>b时&#xff0c;该次对xxx的贡献为Da,b−Da,x1D_{a,b}-D_{a,x}1Da,b​−Da,x​1&#xff0c;即一个公差为−1-1−1的递减序列&#…

Codeforces Round #700 (Div. 2) C. Searching Local Minimum 交互二分

传送门 题意: 给一个数组&#xff0c;让你找到a[i]<min(a[i1],a[i−1])a[i]<min(a[i1],a[i-1])a[i]<min(a[i1],a[i−1])位置iii&#xff0c;每次询问iii可以得到a[i]a[i]a[i]&#xff0c;最多询问100次&#xff0c;且a[0]a[n1]∞a[0]a[n1]∞a[0]a[n1]∞。 我们考虑假…

WCF服务端的.NET Core支持项目Core WCF 正式启动

长期以来在wcf客户端库https://github.com/dotnet/wcf里反应最强烈的就是.NET Core的服务端支持https://github.com/dotnet/wcf/issues/2695&#xff0c;在build 2019大会上微软明确说明在将WinForms&#xff0c;WPF和Entity Framework 6添加到.NET Core 3.0后&#xff0c;不打…

LG P3233 [HNOI2014]世界树(虚树,树形dp)

LG P3233 [HNOI2014]世界树 Solution 看完题意&#xff0c;显然是虚树。 建出虚树后&#xff0c;可以容易地求出虚树上的点会被哪一个点管辖&#xff0c;关键在于不在虚树上的点归属于哪个点&#xff0c;我们分类讨论不在虚树上的点的贡献&#xff1a; 我们先假设虚树上的点…

Codeforces Round #700 (Div. 2) D1 D2. Painting the Array 思维

link 题意&#xff1a; 给一个数组&#xff0c;让你从头开始选出一些数放在AAA数组中&#xff0c;剩下的放在BBB数组中&#xff0c;且是有序选择&#xff0c;让后把两个数组中相邻且相等的元素合并。 D1&#xff1a; 使合并后Len(A)Len(B)Len(A)Len(B)Len(A)Len(B)最大。 D2&a…

阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性

设备自身 CPU 温度、电源输入电压、内存使用率等&#xff0c;以及接入到设备的传感器如温度传感器、光敏传感器等&#xff0c;这些硬件的数据输出即是 属性 。设备将这些硬件的数据上传到阿里云物联网平台&#xff0c;实时显示这些设备的状态和实测数据&#xff0c;这个过程是 …

Codeforces Round #694 (Div. 2) D. Strange Definition 质因子分解 + 平方数

传送门 题意&#xff1a; 定义相邻数为lcm(x,y)gcd(x,y)\frac{lcm(x,y)}{gcd(x,y)}gcd(x,y)lcm(x,y)​是一个平方数&#xff0c;则xxx和yyy是相邻的。现在给出q个询问&#xff0c;每次询问一个iii&#xff0c;表示询问第iii秒后max1<i<ndimax_{1<i<n}d_imax1<i…

ARC086E - Smuggling Marbles(虚树,树形dp)

ARC086E - Smuggling Marbles Solution 感觉这题和LG P3233 [HNOI2014]世界树几乎一模一样啊&#xff1f;&#xff01; 大概就是对于每一个深度分别计算贡献&#xff0c;对该深度的点建出虚树&#xff0c;然后树形dpdpdp。 令fxf_xfx​表示xxx子树中2szx2^{sz_x}2szx​种方…

Docker最全教程之MySQL容器化 (二十五)

前言 MySQL是目前最流行的开源的关系型数据库&#xff0c;MySQL的容器化之前有朋友投稿并且写过此块&#xff0c;本篇仅从笔者角度进行总结和编写。目录 镜像说明 运行MySQL容器镜像 1.运行MySQL容器 2.修改“root”账户的认证模式和密码 管理MySQL 1. MySQL命…

CF639F Bear and Chemistry(虚树,边双)

CF639F Bear and Chemistry Solution 显然题目的条件就是所有点在一个边双连通分量内。 所以我们先缩边双求出边双树。 然后对于每一个询问&#xff0c;对询问的点和边的端点建虚树&#xff0c;然后把询问的边连上跑tarjantarjantarjan求边双判断是否所有询问点在同一个边双…

Codeforces Round #694 (Div. 2) E. Strange Shuffle 交互 + 思维分块

link 题意&#xff1a; nnn个人围成一圈&#xff0c;一开始每个人都有kkk张卡片&#xff0c;每回合n−1n-1n−1个人会给左边⌊x2⌋\left \lfloor \frac{x}{2} \right \rfloor⌊2x​⌋&#xff0c;给右边⌈x2⌉\left \lceil \frac{x}{2} \right \rceil⌈2x​⌉&#xff0c;剩下…

Ocelot(五)- 流量限制、服务质量

作者&#xff1a;markjiang7m2原文地址&#xff1a;https://www.cnblogs.com/markjiang7m2/p/10965300.html源码地址&#xff1a;https://gitee.com/Sevenm2/OcelotDemo本文是我关于Ocelot系列文章的第五篇&#xff0c;流量限制、服务质量。Ocelot允许针对具体的服务接口进行流…