Linux文档整理之【Jenkins+Docker自动化部署.Net Core】

这次整理的文档是Jenkins+Docker实现自动化部署,很早之前就写的,今天有时间就搬到博客园做个记录。

Jenkins是基于Java开发的一种持续集成工具,主要用于持续、自动的构建/测试软件等相关项目。在Java开发中我们经常能看到使用jenkins来部署,.Net core目前还是比较少见的,但是好的东西我们就应该要拿来使用、借鉴。

1. 安装JenKins

这里使用Docker来安装JenKins,当然也可以直接安装到Linux中。

创建jenkins工作目录

mkdir /usr/local/jenkins

拉取jenkins镜像

docker pull jenkins

这里有个小插曲,我用的是jenkins镜像,默认也是latest一般意味着最后最新版本。很多官方最新镜像也都是如此命名;直到后来安装配置完成后,登录进去提示我不是最新版本,让我更新,并且很多插件已经不支持此版本了。发现当前版本和最新版本还相差好几个。心想这不是官方镜像吗 怎么还是这么旧的版本,最后通过搜索发现,Jenkins官方最新镜像现在已改为jenkins/jenkins的了。

所以最新版是:jenkins/jenkins

我们拉取最新lts版本。

docker pull jenkins/jenkins:lts

看如下图jenkinsjenkins/jenkins两个镜像的差别,发现常规下的latest版本并不最新的了,它们的创建时间已经是1年以前了。而jenkins/jenkins 则创建时间在2天不到。

所以常规的latest并不意味着最新版本。

修改jenkins目录和docker目录权限,这里1000是容器中Jenkins 的用户 uid

chown -R 1000:1000 /usr/local/Jenkins

sudo chown -R 1000:1000 /var/run/docker.sock

尤其docker.sock 这个权限很重要,到时候容器里的Jenkins需要执行docker命令需要的

运行Jenkins 注意后面的镜像名称和版本lts

docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true  -v /usr/local/jenkins:/var/jenkins_home -v /usr/bin/docker:/bin/docker  -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts 

参数解释:

-p 8080:8080 -p 50000:50000 --映射jenkins端口

--name jenkins --容器名称自己命名

privileged=true --授予容器管理员权限

-v /usr/local/jenkins:/var/jenkins_home --映射jenkins目录

-v /usr/bin/docker:/bin/docker --映射docke目录 到时候需要在容器里执行docker命令

-v /var/run/docker.sock:/var/run/docker.sock --映射docker执行命令 到时候需要容器里执行docker命令。

容器是否启动成功最好还是通过docker ps 或者netstat –ntlp |grep 8080 (查看我们容器映射的端口是否监听成功) 查看当前容器是否运行成功。

某些情况下,如权限没有配对,启动会不成功的。

查看正在运行的容器。

docker ps

2. 配置JenKins

查看容器启动成功后,我们可以通过地址+端口访问刚刚运行的Jenkins

例如http://192.168.1.101:8080

安装成功访问后会如下图所示。

提示首次访问需要密码,我们通过刚刚映射的Jenkins目录里查看这个默认密码。

默认密码路径:/usr/local/jenkins/secrets/  (注意前面usr/local/jenkins路径就是刚刚自己映射的目录)

查看密码文件

cat initialAdminPassword

输入密码然后继续下一步。

下一步如果有出现404的,如下图

网上搜索了解听说是Jenkins的一个bug;部分版本存在。

解决办法(以下步骤是解决登录404的;如果没有404则可以跳过)

首先回到Jenkins主目录找到config.xml文件并打开。

将<useSecurity> 修改为false

停止并重新运行jenkins

重启后一定要重新查看默认密码,否则旧密码是登录不成功的。

登录进去以后这里默认选择推荐的插件。

接下来就是等待安装,这里需要注意,如果jenkins版本比较老,则可能很多插件安装失败,直接红色的。此时可以跳过该界面进入首页。会有提示让你升级最新Jenkins版本。

安装完成后创建一个用户名和密码,即可完成安装进入首页。

3. 创建项目

1、源代码编译发布工程

源代码发布工程即将源代码提交到git服务器,jenkins通过git拉取最新的源代码,并通过Dockerfile里的配置进行编译发布过程。然后通过Docker构建此镜像并运行到容器。

创建一个.Net Core Web项目。

创建项目的时候可以选择启用Docker支持。

对于之前的项目可以右键添加Docker支持。

项目目录

默认的Dockerfile是有帮我们进行代码编译并发布动作的。所以默认的Dockerfile文件是适合和代码一起提交到服务器然后使用Docker进行构建镜像。

项目创建完成后随代码一起提交到git服务器。(svn等也都可以)

git项目目录,注意将Dockerfile复制到根目录。由于到时候构建镜像的时候就是从根目录执行的。git目录如下所示。

2、已编译的Release工程

已编译的Release工程,此种方式适合git或svn在局域网的;又不希望源代码不暴露到外网的需要。此种方式是将项目工程进行进行发布打包操作。例如java常见的打包成一个war包文件。.Net 就是生成对应的DLL 文件。

项目在发布之前我们对项目的Dockerfile文件属性做个更改,以便在发布时将此文件复制到发布时的目录。

选择上面建立的WebTest项目右键发布,选择发布到指定文件夹。

将发布文件发布到自己的git(或svn)目录,如下图所示的,一定要包含Dockerfile文件。发布后的文件,可以根据自己需要将没有更新DLL或者appsetting.json等文件剔除掉。只保留本次要更新的文件即可。

修改Dockerfile文件,因为默认的Dockerfile文件是包含编译发布的命令,所以这里要将这些相关命令操作删除掉;保留如下命令配置即可。

保存然后提交到所有文件到git服务器。

提交后的git目录。

建议:无论是代码编译发布工程还是已编译的Release工程,第一次使用Docker部署时最好先自己手动将这些文件拷贝到服务器,并手动构建对象并运行容器看是否成功;能否访问网站。也就是先不用Jenkins将这些流程自己手动走一遍,确保一些目录包括Dockerfile等都是配置正确的。

4.  创建JenKins任务

项目工程创建完成并提交到git服务器后,开始在Jenkins里面创建任务。

输入项目描述,源代码管理选择自己对应的即可。

我这里选择的git。第一次添加项目时需要添加一种授权方式点击右边添加按钮即可。

选择添加授权方式 常用的就是用户名加密码或者SSH方式。

下一步设置构建环境

设置触发器,这里主要是设置自动触发条件,有定时构建、远程触发构建、轮询SCM。

这里只设置轮询SCM形式的,很简单的方式。意思是在指定间隔时间内会去轮询git或svn中版本是否有变化。如果有就立即构建该项目。其实就是做到只要代码提交了 则立刻就能自动构建项目进行发布;不在需要其他任何操作了。

选择构建—>执行shell;当然我们这里是linux服务器所有多数选择执行shell。

添加shell 命令。

注意下面的webtest 改为自己的容器名称和对应镜像名称即可。

#!/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
docker stop webtest
docker rm webtest
echo ---------------Building Docker Image...------------------
docker build -t webtest:$GITHASH .
docker tag webtest:$GITHASH webtest:latest
echo ---------------Launching Container...------------------
docker run --name webtest -d -p 8005:80 webtest:latest 

使用git提交代码进行测试。

自动开始构建了 注意jenkins这里时间是默认是utc时间。utc时间转换我们北京时间是要+8小时的。

蓝色图标代表构建成功,如果失败会是红色

查看控制台输出信息,尤其构建失败时能够从里面获取到失败原因等。

控制输出如下图所示

构建成功后我们到服务器检查下是否有刚刚构建的镜像和运行的容器。(当然一般情况下只要构建成功这两步可以不用检查)

查看镜像

查看运行的容器

访问站点看能否访问成功。

原文地址:https://www.cnblogs.com/rui1236/p/12092775.html

时间: 2024-11-02 21:56:40

Linux文档整理之【Jenkins+Docker自动化部署.Net Core】的相关文章

Linux命令大全之三——Linux文档编辑命令,超级全!

本篇文章主要介绍了Linux文档编辑命令.详细整理了各个命令的功能.语法以及参数,很干货~赶紧学起来吧! col 功能说明:过滤控制字符.语 法:col?[-bfx][-l<缓冲区列数>]补充说明:在许多UNIX说明文件里,都有RLF控制字符.当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符.参 数:??-b???过滤掉所有的控制字符,包括RLF和H

Ionic2文档整理

来自:Rainey's Blog 原文地址:http://rainey.space/2016/04/06/Ionic2_Chinese_Document/ Github:https://github.com/XueRainey/ionic2 ionic2文档整理 发表于 2016-04-06   | 本文档不是英文文档的完全翻译,是个人的阅读笔记.如果阅读后有不明白或者不懂,请移步英文版阅读.如果本文有错误,请在本页末尾留言或者提交Issues. 您可以点击小标题跳转到相应的ionic2英文文档

NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)

Nodejs学习文档整理 http://www.cnblogs.com/xucheng/p/3988835.html 1.nodejs是什么: nodejs是一个是javascript能在后台运行的平台,具体来时只是使code javascript能在后台运行,因为不在浏览器中运行所以不涉及到document等对象.(Mozilla 则指出 JavaScript 由Core JavaScript 和 Client JavaScript 组成.) 2.nodejs如何运行javascript: n

linux文档的打包和压缩 3月27日学习笔记

linux文档的打包和压缩 一.gzip:压缩工具 gzip只能压缩文件,不可以压缩目录后面直接跟要压缩的文件就可以进行压缩. 文件压缩后默认会带一个后缀名,作用是为了区分是什么工具压缩的. 压缩和解压之后源文件都会消失. 1.压缩passwd文件 [[email protected] cheng]# gzip passwd  [[email protected] cheng]# ls passwd.gz 2.gzipz -d:解压文件 [[email protected] cheng]# gz

15、Linux文档的压缩与打包

Linux文档的压缩与打包 概述 compress和uncompress gzip压缩工具 bzip2压缩工具 zip压缩工具 tar压缩工具 cpio压缩工具(主要用来备份还原) Linux文档的压缩与打包 概述 本章将介绍Linux系统中的压缩和解压缩的工具,以及归档工具(tar,cpio) compress/uncompress:    //对应 .Z 结尾的压缩格式文件:gzip/gunzip:            //其对应的是 .gz 结尾的压缩格式文件:bzip2/bunzip2

linux文档常见后缀名

linux文档常见后缀名 (2010-05-25 09:54:17) 转载▼ 标签: linux 后缀名 it 分类: 入门篇 压缩和打包文件 * .bz2 — 使用bzip2命令压缩的文件,可以使用bzip2 -d filename 解包 * .gz — 使用gzip命令压缩的文件,可以使用gunzip -d filename 解包 * .tar — 使用tar打包的文件,即tarball文件,可以使用tar xf filename 解包 * .tbz — 使用tar打完包后再以bzip2命令

将Html文档整理为规范XML文档

有多种方式可以在.NET 平台进行HTML文件解析.数据提取,其中最简单.稳妥的办法是先使用工具将Html文档整理成XML文档,再通过XML Dom模型或XPath灵活地进行数据处理.SGML便是一个Html文档整理工具类库: Microsoft的XML大师Chris Lovett专门开发了一个SGML解析器,叫做SgmlReader,它可以解析HTML文件,甚至将它们转换成一个格式规范的结构. SgmlReader派生于XmlReader,这就是说,你可以像运用诸如XmlTextReader这

解决Linux文档显示中文乱码问题以及编码转换

解决Linux文档显示中文乱码问题以及编码转换 使vi支持GBK编码 由于Windows下默认编码是GBK,而linux下的默认编码是UTF-8,所以打开会变成乱码.因此,我们只需要改变一下配置文件,使得vi支持GBK 打开~/.vimrc文件 加上 1.let &termencoding=&encoding2.set fileencodings=utf-8,gbk 然后:wq保存并退出 再次打开vi就显示正常了. 将其它的编码的文件转换成utf-8 另外,还可以将其它的编码的文件转换成u

理解Linux文档的默认安全机制、隐藏属性、特殊权限,妈妈在也不用担心你从删库到跑路!!!

写在前面 前面的章节 详解Linux文档属性.拥有者.群组.权限.差异,介绍了文档的基本权限,包括读写执行(r,w,x),还有若干的属性,包括是否为目录(d).文件(-).链接文件(l).拥有者.所属群组.容量大小(字节数).最后修改时间等等,可以通过chown.chgrp.chmod来变更这些属性和权限. 默认安全机制 首先,我们使用管理员root账户分别创建文件file001和目录dir001: 从上图可以看到, 文件file001的默认权限为rw-r--r--,即拥有者可读写,同群组下账户