Jenkins + Docker + ASP.NET Core自动化部署

本来没想着要写这篇博客,但是在实操过程中,一个是被网络问题搞炸了心态(真心感觉网络能把人搞疯,别人下个包、下个镜像几秒钟搞定,我看着我的几KB小水管真是有苦说不出),另一个就是这里面坑还是有一些的,写出来也是为了让大家避免重复踩坑

几个注意点:

  • 下方shell命令绝大部分都需要管理员权限,所以如果你使用的用户不是root,则都要加上sudo
  • 对于较复杂的命令我都提供了注释版和无注释版,无注释版是为了让你复制起来方便

准备工作

CentOS 7.x
Docker
Jenkins
一份支持 docker 的 ASP.NET Core 应用程序代码,可以直接用我的:https://github.com/xiaoxiaotank/MyAspNetCoreApp

1、安装docker

官方文档:https://docs.docker.com/engine/install/centos/

1、如果你选择的是一个新系统,则建议首先更新 yum 和系统内

yum update

2、确保卸载旧版docker
/var/lib/docker/ 下的镜像、容器、卷和网络都会保留
旧版本中Docker被命名为docker或docker-engine,现在被命名为docker-ce

 
  1. yum remove docker \

  2. docker-client \

  3. docker-client-latest \

  4. docker-common \

  5. docker-latest \

  6. docker-latest-logrotate \

  7. docker-logrotate \

  8. docker-engine

 3、安装 yum-utils(其提供了yum-config-manager,下方要用到)
yum install -y yum-utils
4、配置 yum 阿里云 docker 仓库
docker官方仓库: https://download.docker.com/linux/centos/docker-ce.repo

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5、安装 docker

yum install -y docker-ce docker-ce-cli containerd.io

6、配置 docker 镜像加速器
获取加速器地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

 
  1. sudo mkdir -p /etc/docker

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

  3. {

  4. "registry-mirrors": ["这里填入你的加速器url"]

  5. }

  6. EOF

  7. sudo systemctl daemon-reload

  8. sudo systemctl restart docker

7、查看 docker 信息

docker info

8、hello-world 测试

docker run hello-world

2、安装并初始化jenkins

官方文档:https://www.jenkins.io/doc/book/installing/docker/

先说一下:官方文档中使用了镜像docker:dind来执行docker命令和运行程序容器,我感觉完全没啥必要,而且引入这玩意会带来很多额外的问题,所以我没用它。

如果你想了解dind,请访问这里和这篇博客

2.1 安装jenkins

1、创建Dockerfile文件

vim Dockerfile

2、在Dockerfile文件中填入以下内容

  • Tag参考:https://hub.docker.com/r/jenkins/jenkins
  • 注意:不要使用过时的镜像 jenkins,而应该使用镜像 jenkins/jenkins
 
  1. FROM jenkins/jenkins:lts-jdk11

  2. USER root

  3. RUN apt-get update && apt-get install -y apt-transport-https \

  4. ca-certificates curl gnupg2 \

  5. software-properties-common

  6. RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

  7. RUN apt-key fingerprint 0EBFCD88

  8. RUN add-apt-repository \

  9. "deb [arch=amd64] https://download.docker.com/linux/debian \

  10. $(lsb_release -cs) stable"

  11. # 安装 docker-ce-cli 才能在 jenkins 中发送 docker 命令到 docker daemon

  12. RUN apt-get update && apt-get install -y docker-ce-cli

3、构建镜像

docker build . -t myjenkins

如果出现警告:[Warning] IPv4 forwarding is disabled. Networking will not work.

其实就是说你的linux没有开启 Ipv4 数据包转发功能

可以先尝试重启docker解决

systemctl restart docker

 如果无效,则

 
  1. # 1. 打开 sysctl.conf

  2. vim /etc/sysctl.conf

  3. # 2.添加下面一行

  4. net.ipv4.ip_forward=1

  5. # 3.重启 network 和 docker

  6. systemctl restart network && systemctl restart docker

4、运行Jenkins
注释版

 
  1. docker run \

  2. --name jenkins \ # 给容器起个名字,叫做 jenkins

  3. --detach \ # 以后台分离模式运行

  4. --publish 8080:8080 \ # host 8080端口映射容器8080端口

  5. --publish 50000:50000 \ # host 50000端口映射容器50000端口

  6. --volume jenkins-data:/var/jenkins_home \ # 卷 jenkins-data 映射容器路径/var/jenkins_home,这样就可以在host上直接修改jenkins配置了

  7. --volume /var/run/docker.sock:/var/run/docker.sock \ # host 上的docker sock映射容器的docker sock,这样容器内的docker命令都会发送到host上的docker中来执行

  8. myjenkins # 使用刚刚构建的镜像 myjenkins 来运行容器

无注释版

 
  1. docker run \

  2. --name jenkins \

  3. --detach \

  4. --publish 8080:8080 \

  5. --publish 50000:50000 \

  6. --volume jenkins-data:/var/jenkins_home \

  7. --volume /var/run/docker.sock:/var/run/docker.sock \

  8. myjenkins

5、更换Jenkins插件源
前面我们将容器内的路径 /var/jenkins_home 映射到了volume jenkins-data,而所有的docker volume 都存放在目录 /var/lib/docker/volumes/下

打开hudson.model.UpdateCenter.xml
 

vim /var/lib/docker/volumes/jenkins-data/_data/hudson.model.UpdateCenter.xml

将文件中的url改为清华大学官方镜像:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

即:

 
  1. <?xml version='1.1' encoding='UTF-8'?>

  2. <sites>

  3. <site>

  4. <id>default</id>

  5. <!--原 url: https://updates.jenkins.io/update-center.json -->

  6. <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>

  7. </site>

  8. </sites>

重启 Jenkins:

docker restart jenkins

2.2 初始化jenkins

1、访问:http://:8080

2、输入管理员初始密码

查看管理员初始密码:

cat /var/lib/docker/volumes/jenkins-data/_data/secrets/initialAdminPassword

在这里插入图片描述

3、选择“安装推荐的插件”

在这里插入图片描述

4、经过漫长的等待之后,由于网络环境、依赖项的问题,很可能出现某些插件安装失败,不过咱们先点击“继续”,进去再修复
在这里插入图片描述

5、接下来创建一个自己的管理员帐号,确认jenkins url

在这里插入图片描述

6、进来后,jenkins的主页面就长这个样子

在这里插入图片描述

7、我们先来修复一下安装失败的插件

在这里插入图片描述

在这里插入图片描述

8、点击左侧菜单栏“Manage Jenkins”,将jenkins升级为最新版

在这里插入图片描述

9、在 Update Center 页面时记得勾选最下方的“安装完成后重启Jenkins(空闲时)”

3、自动化配置和部署

1、点击jenkins页面左侧菜单第一个“新建任务”,填入任务名,选择自由风格

在这里插入图片描述

2、填入如下配置信息,并保存

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

shell命令如下:

 
  1. image_tag=`date +%Y%m%d%H%M%S`;

  2. echo $image_tag;

  3. # build镜像并且打上tag

  4. docker build -t myapp:$image_tag .;

  5. docker images;

  6. # 停止并删除旧版 myapp container

  7. CID=$(docker ps | grep "myapp" | awk '{print $1}')

  8. echo $CID

  9. if [ "$CID" != "" ];then

  10. docker stop $CID

  11. docker rm $CID

  12. fi

  13. # 把刚刚build出来的镜像跑起来

  14. docker run -p 5000:80 --name myapp -d myapp:$image_tag;

  15. docker ps -a;

  16. docker logs myapp;

3、点击左侧菜单“立即构建”,来部署我们的AspNetCoreApp,并查看“控制台输出”,当最终出现“Finished: SUCCESS”时表示部署成功

在这里插入图片描述

4、访问:http://:5000/hello (注意加上hello)

2021-05-12T15:28:43.9032704+00:00: Hello !

 5、此时查看docker中正在运行的容器:

 
  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  2. e167a135f7a0 myapp:20210512152453 "dotnet MyAspNetCore…" 2 minutes ago Up 2 minutes 0.0.0.0:5000->80/tcp, :::5000->80/tcp myapp

  3. e83a2570c334 myjenkins "/sbin/tini -- /usr/…" About an hour ago Up About an hour 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins

4、注意事项

1、关于jenkins bluocean 等插件下载安装

如果jenkins想要安装插件 bluocean 等, 不要学官网将安装命令放放在Dockerfile中,即使加了参数–jenkins-update-center来指定加速源,也不建议这样做。因为我刚开始也想着尽量自动化,可是因为网络问题,导致插件一直下载安装失败,从而导致镜像一直构建失败,白白浪费了我两三个小时(真的很痛苦)

另外,你也可以在安装jenkins时,直接使用镜像 jenkinsci/blueocean ,该镜像包含了 blueocean 的相关插件。

2、关于myapp 容器 端口映射 5000:80

因为我的 Dockerfile 文件中向外暴露的端口是80,所以我用host的端口5000映射了容器端口80,这个地方要按照你的实际情况来做出更改。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

【Java】高级篇1:异常处理

异常&#xff1a;程序在执行过程中出现的非正常情况&#xff0c;如果不处理最终会导致JVM的非正常停止。 Java的异常抛出机制 Java异常体系 1、Throwable 2、Error和Exception 异常处理方式 1、try-catch-finally&#xff08;捕获异常&#xff09; 基本结构&#xff1a; 使用…

Day68:WEB攻防-Java安全原生反序列化SpringBoot攻防heapdump提取CVE

目录 Java安全-反序列化-原生序列化类函数 原生序列化类函数 SnakeYaml XMLDecoder ObjectInputStream.readObject 工具利用 ysoserial Yakit SerializedPayloadGenerator Java安全-SpringBoot框架-泄漏&CVE SpringBoot Actuator-黑白盒发现 人工识别 BurpSui…

数据库事务中“锁”的分类

数据库事务中的锁可以按照不同的维度进行分类。以下是一些常见的分类方式&#xff1a; 1、按锁的粒度分类&#xff1a; 行锁&#xff08;Row-level lock&#xff09;&#xff1a;锁定单个或少量的数据行。这种锁粒度小&#xff0c;允许高度的并发&#xff0c;但管理开销大。页…

LeetCode 2312.卖木头块:动态规划(DP)

【LetMeFly】2312.卖木头块&#xff1a;动态规划(DP) 力扣题目链接&#xff1a;https://leetcode.cn/problems/selling-pieces-of-wood/ 给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, …

LeetCode118 杨辉三角形

题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] 解…

汽车电子拓扑架构的演进过程

汽车电子拓扑架构的演进过程 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠…

Python 常用的开源爬虫库介绍

Python 是一种广泛使用的编程语言&#xff0c;特别是在 Web 爬虫领域。有许多优秀的开源爬虫库可以帮助开发者高效地抓取网页内容。以下是几个常用的 Python 爬虫库及其特点和优势&#xff1a; BeautifulSoup 特点 - **HTML/XML 解析**&#xff1a;BeautifulSoup 是一个…

linux(Ubuntu22) 一篇带你学会Linux,详细篇

Linux 简介 精通Linux&#xff0c;自带python&#xff0c;系统开源 电脑可安装双系统 c盘安装win D盘安装linux 在一套硬件上只能同时运行一个操作系统 虚拟机 模拟真实环境 在虚拟机内运行操作系统 需要硬件支持虚拟化 开启VT-X VM…

opengl程序错误,无法定位程序输入点 glewGetErrorString@4 于动态链接库

使用mingw编译器编译运行opengl程序&#xff0c;编译通过运行时崩溃 怀疑是之前的mingw版本编译的glew库版本不对&#xff0c;又重新编译一遍&#xff0c;还是这个错误 之后检查环境变量配置&#xff0c;发现有两个glew的路径&#xff0c;一个是msvc版的&#xff0c;另一个是m…

Unity WebGL服务器标头的问题

目录 现象&#xff1a; 报错文本: 原因: 解决方案: 现象&#xff1a; 打包前&#xff0c;ProjectSetting 压缩选项设置为Brotli, 将打包的WebGL部署到阿里云OSS环境后&#xff0c;运行弹框提示错误. 报错文本: Unable to parse Build/WebGL.framework.js.br! This canha…

三级等保技术建议书

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

QT----基于QT的人脸考勤系统

目录 1 编译opencv库1.1 下载源代码1.2 qt编译opencv1.3 执行Cmake一直卡着data: Download: face_landmark_model.dat 2 编译SeetaFace2代码2.1 遇到报错By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has2.2遇到报错Model missing 3 测试…

web高可用集群(nginx负载均衡+keepalived实现调度器HA)

web高可用集群(nginx负载均衡keepalived实现调度器HA&#xff09; 主机IP地址代理服务器192.168.88.66代理服务器192.168.88.38Real server192.168.88.10Real server192.168.88.20 配置俩台Real server [rootweb1 ~]# vim /etc/yum.repos.d/nginx.repo [rootweb1 ~]# cat /e…

KT6368A蓝牙主从一体芯片_功能简要说明

一、功能简介 新增KT1328A芯片方案的蓝牙主从一体版本&#xff0c;实现的是主从一体相互切换&#xff0c;也就是说可以设置为主机【类似于手机的角色】&#xff0c;也可以设置为从机角色&#xff0c;通过AT指令 此版本的型号命名为&#xff1a;KT1328A-SOP8 。后续需要下单…

牛客NC125 和为K的连续子数组【中等 哈希+前缀和 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/704c8388a82e42e58b7f5751ec943a11 思考 滑动窗口&#xff0c;map&#xff0c;前缀和参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修…

奇舞周刊第522期:“Vite 又开始搞事情了!!!”

奇舞推荐 ■ ■ ■ Vite 又开始搞事情了&#xff01;&#xff01;&#xff01; Vite 的最新版本将引入一种名为 Rolldown 的新型打包工具。 unocss 究竟比 tailwindcss 快多少&#xff1f; 我们知道 unocss 很快&#xff0c;也许是目前最快的原子化 CSS 引擎 (没有之一)。 巧用…

【小迪安全】学习cho1

介绍了一些名词&#xff1a; POC、EXP、Payload与Shellcode nc -lvvp 端口号 监听服务器端口 个人用机使用最多的是&#xff1a;windows10 服务器用机使用最多的是&#xff1a;Windows8&#xff0c;12&#xff0c;16 流量被防火墙拦截了&#xff0c;到这里进行给与权限 文件…

数据分析-Pandas的Andrews曲线可视化解读

数据分析-Pandas的Andrews曲线可视化解读 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据…

纳米阱可提高未来光学设备的光强度

一种配置光捕获器件的方法有望通过放大光和提高发光纳米材料的发射效率来获得更好的光学纳米器件&#xff0c;而无需复杂的技术升级。 强光束对于从医学到电子产品的无数应用至关重要&#xff0c;但使用日常光源生产它们具有挑战性。然而&#xff0c;它们可以由激光产生。激光…

J.砍树【蓝桥杯】树上差分+LCA

树上差分 多次对树上的一些路径做加法操作&#xff0c;然后询问某个点或某条边经过操作后的值&#xff0c;就要考虑树上差分了。 点差分 模拟这个过程 对x到y路径上的点权值均1&#xff0c;可以等价成对x和y的权值加1&#xff0c;对lca的权值-1&#xff0c;对fa[lca]的权值-…