环境说明


  • 腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,Docker 和 Jenkins 都在这台服务器上面,
  • 群晖218+一台,Gogs 在这台服务器上。

Docker安装


  • 卸载旧的 Docker

    sudo apt-get remove docker docker-engine docker.io containerd runc

  • 更新 apt 包索引并安装包以允许 apt 通过 HTTPS 使用存储库

    sudo apt-get update
    
    sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  • 添加 Docker 官方的 GPG 密钥

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  • 安装 Docker

    sudo apt-get install docker-ce docker-ce-cli containerd.io

  • 通过运行 hello-world 验证 Docker 是否已正确安装。输出 Hello from Docker! 表示安装成功

    sudo docker run hello-world

  • 不同的系统安装方式可以查阅 docker 官方安装说明

Gogs安装


Gogs 是一款用 Go 语言开发的轻量级极易搭建的自助 Git 服务。 选择 Gogs 主要因为它相对于 Gitlab 动则几个G的内用暂用率来说轻太多了。Gogs 会大大减低系统消耗,跑起来也就占用100mb内存。我的 Gogs 是跑在群晖上面的,效果都是一样,都是在 Docker 中托管

  • 拉取 Gogs 镜像

    sudo docker pull gogs/gogs

  • 创建 Gogs 文件挂载路径

    mkdir -p /var/gogs

  • 启动容器 6022 是 https,6080 是 http,可以通过 docker ps 命令来查看是否启动成功。

    docker run -d --name=my_gogs -p 6022:22 -p 6080:3000 -v /var/gogs:/data gogs/gogs

  • 容器启动后通过 http://xxxxxxxx:6080 进行 Gogs 的初始配置

  • 数据库类型建议选择 linux 自带的 SQLite3 ,支撑十几个人左右的团队使用足够了。域名填写 Gogs 所在服务器的域名或者 ip 地址。http 端口号和容器内部端口一致,应用 URL 填写访问 Gogs 的域名端口或 ip 端口,点击安装后注册一个新用户登陆即可

  • Gogs安装完成后新建一个 Demo 仓库稍后使用

  • Gogs 官方文档

Docker中托管.NetCore服务


  • 新建一个 WebApi 项目

  • 项目中增加一个 DockerFile 文件并且简单配置

# 指定依赖版本
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim
WORKDIR /app COPY . /publish
WORKDIR /publish
# 设置Docker容器对外暴露端口
EXPOSE 80
# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
# 程序入口
ENTRYPOINT ["dotnet", "DemoWebApi.dll"]
  • 发布Api服务,如果发布文件中没有 DockerFile 文件需要手动修改项目文件,发布成功后将发布文件 copy 到服务器指定的文件夹中
    <ItemGroup>
<None Update="Dockerfile">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
  • 进入服务器刚 copy 的发布文件根路径下,执行 docker build -t {REPOSITORY}:{TAG} . 命令 通过 DockerFile 来生成 Docker 镜像文件,REPOSITORY 是镜像的名字,TAG 是标签。譬如 docker build -t demo:v1 .



  • 通过 docker images 命令来查看生成的所有镜像

  • 镜像生成成功后就可以通过镜像创建并运行容器了。执行 docker run --name demoapi -dp 5009:80/tcp demo:v1 命令创建并运行容器

    -d:后台运行容器,并返回容器ID;

    -p:指定端口映射,格式为:主机(宿主)端口:容器端口,容器的端口就是你程序启动的端口,建议直接在项目中写死。

    -- name:容器名字

  • 执行后可以通过 docker ps 查看所有运行起来的容器状态,需要查看所有容器可以使用 docker ps -a 命令

  • 用 postman 测试一下是否部署成功了

  • 列举一些docker常用命令

    • docker restart {容器id} #重启容器
    • docker start {容器id} #启动容器
    • docker attach {容器id} # 这样进入容器退出会导致容器也退出,attach 可以用户看容器的标准输出
    • docker attach {容器id} --sig-proxy=false # 加上参数不会导致同期退出
    • docker exec -it {容器id} /bin/bash # 进入容器需要在容器中执行命令需要使用 exec 命令
    • docker logs {容器id} -f # 跟踪日志输出 -f 跟踪日志输出
    • docker rm -f {容器id} # 删除已经停止的容器
    • docker rmi {REPOSITORY:TAG} # 删除指定镜像
    • docker image prune # 删除悬空镜像,也就是没有被容器引用的镜像

到这里服务已经在 Docker 完成了托管,但是每次发布都需要 build 新的镜像,然后停止老的容器,在创建一个新的容器,无形中增加了工作量。Jenkins 可以替我们完成这些工作

Jenkins安装


  • Jenkins 是依赖 java 的,所以需要安装 java 的 sdk,这里选择 java8

    sudo apt-get install openjdk-8-jdk

  • 安装 LTS 版本的 Jenkins

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
  • 查看运行状态 systemctl status jenkins 正常会输出如下内容

  • Jenkins 默认端口是 8080,安装成功后通过 http://xxxx:8080 即可访问,第一步需要先解锁,管理员密码会在安装成功后输出,也可以通过命令 cat /var/lib/jenkins/secrets/initialAdminPassword

  • 输入密码后进入初始化页面,选择安装推荐插件

  • 插件安装进度,需要一些些时间

  • 结束后创建管理账号登录即可,进入系统管理,选择插件管理,搜索gogs插件后安装。

  • 安装后需要重启一下 Jenkins,访问链接 http://xxxx:8080/restart 后点击重启,或者通过执行 service jenkins restart 重启

  • 为了方便执行脚本,需要让 Jenkins 以 root 用户来运行,编辑文件 vim /etc/sysconfig/jenkinsvim /etc/default/jenkins 取消 JENKINS_USER 注释,并把值设置成 JENKINS_USER="root" 后修改文件夹权限

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
  • jenkins 常用操作

    • 启动 service jenkins start
    • 重启 service jenkins restart 或访问 http://xxxx:8080/restart
    • 停止 service jenkins stop 或访问 http://xxxx:8080/exit
    • 重新加载配置文件 http://xxxx:8080/reload

使用Jenkins自动化


  • 因为需要在服务器上 build 项目,所以需要安装 .NetCore 环境,可以查阅 微软官方文档 自行安装

  • 把新建的项目推送到 Gogs 仓库中后点击仓库高级设置

  • 选择 Web 钩子,添加新 Gogs 的 Web 钩子

  • 配置 Web 钩子,推送地址前面是 Jenkins 的访问链接,后面 job 名字可以自己定义,选择只有在 push 的时候触发钩子,也可以自己选定事件

  • 添加后重新点击管理 Web 钩子,选择刚才新建的钩子,点击测试推送来验证是否正常,抛出的异常如果是 job 未定义说明钩子是正常的,如果是其他的异常可以查看推送地址是否正确,以及 Jenkins 上的 Gogs 插件是否正确安装

  • 回到 Jenkins 页面,新建一个任务,任务名就是之前 Gogs 里面的 job 名字,选择构建自由风格的软件项目

  • 添加仓库配置,Repository URL 是你的仓库地址,点击添加你的仓库凭据信息,最后指定操作的分支

  • 构建选择执行shell脚本,脚本也可以放在服务器上这里调用就行,为了方便就直接写在这里




# 判断是否存在demo镜像是否存在
docker images | grep demo &> /dev/null
if [ $? -ne 0 ]
then
# 不存在不做处理
echo "not existed demo"
else
# 如果镜像存在默认认为容器也是在运行状态
echo "existed demo"
# 停止删除容器和镜像
docker stop demoapi
docker rm -f demoapi
docker rmi demo:v1
fi # 重新build后生成镜像并运行容器
cd DemoWebApi/
# 发布到到指定路径
dotnet publish -c Release -o /publish
# 进入路径生成镜像后启动容器
cd /publish
docker build -t demo:v1 .
docker run --name demoapi -dp 5009:80/tcp demo:v1
  • 保存后点击立即构建验证一下,如果构建失败可以在控制台输出中查看详细构建过程和错误信息

  • 回到 Gogs 的管理 Web 钩子页面重新推送,成功后 Jenkins 会自动构建发布,之后只要 Push 到 Master 分支就会自动发布



总结


简单记录了自己折腾的全过程,Jenkins 和 Docker 还有很多功能,要在使用过程中慢慢了解。

Gogs+Jenkins+Docker 自动化部署.NetCore的更多相关文章

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

    这次整理的文档是Jenkins+Docker实现自动化部署,很早之前就写的,今天有时间就搬到博客园做个记录. Jenkins是基于Java开发的一种持续集成工具,主要用于持续.自动的构建/测试软件等相 ...

  2. .net core +gogs + jenkins +docker自动化发布、部署

    1.首先,安装docker,不多bb 2.我们采用docker的方式安装jenkins,同时将宿主机的docker挂载到docker安装的jenkins里面,可能有点拗口.说白了就是 就是要让jenk ...

  3. CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  4. 从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  5. Docker学习总结(13)——从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...

  6. 基于 Jenkins Pipeline 自动化部署

    最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置 ...

  7. gitlab与jenkins的自动化部署(通过webhook与ansilble)

    gitlab与jenkins的自动化部署(通过webhook与ansilble) 1.部署介绍 gitlab服务器:192.168.1.49:80jenkins服务器:192.168.1.49:818 ...

  8. 搭建jenkins实现自动化部署

    搭建jenkins实现自动化部署 一.安装jenkins 1.添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo https://p ...

  9. 微服务项目的docker自动化部署流程

    目录 微服务的Docker自动化部署 制作JDK1.8的Docker镜像 Docker常用命令介绍 制作image的一般流程 将本地的image上传至私人仓库 使用Maven插件实现自动化docker ...

随机推荐

  1. JS数组的操作方法汇总

    数组的增删 push():添加到最后 pop():取出最后一个 shift():取出第一个 unshift():添加到第一个 splice() : 返回删除的数组,如果没有则为空数组,会改变原数组.可 ...

  2. 【转载】使用rdp协议访问远程Linux桌面

    使用rdp协议访问远程Linux桌面 2017年03月31日 16:23:49 太阳之影 阅读数:2169   一般情况下,如果需要登陆远程Linux系统,我们会使用ssh/telnet来完成,如果需 ...

  3. Windows 电脑的四种运行状态工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), S4 关机状态 (Shutdown), S5

    == Windows 电脑的四种运行状态 == 这四种运行状态(或称电源状态)是: 工作状态 (Working), S0 睡眠状态 (Sleep), S1 或 S3 休眠状态 (Hibernate), ...

  4. Linux工程师必备的88个监控工具

    Linux工程师必备的88个监控工具 https://learn-linux.readthedocs.io/zh_CN/latest/maintenance/monitor/tools/80-linu ...

  5. 2.1PyCharm 的初始设置

    PyCharm 的初始设置(知道) 目标 恢复 PyCharm 的初始设置 第一次启动 PyCharm 新建一个 Python 项目 设置 PyCharm 的字体显示 PyCharm 的升级以及其他 ...

  6. wait 和waitpid函数对比-(转自 wintree)

    Wait和waipid函数 当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程是个一步事件,所以这种信号也是内核系那个父进程发的异步通知.父进程可以选择忽略该信号,或者 ...

  7. 8.1 fdisk:磁盘分区工具

    fdisk 是Linux下常用的磁盘分区工具.受mbr分区表的限制,fdisk工具只能给小于2TB的磁盘划分分区.如果使用fdisk对大于2TB的磁盘进行分区,虽然可以分区,但其仅识别2TB的空间,所 ...

  8. 项目实践之工作流引擎基本文档!Activiti工作流框架中流程引擎API和服务详解

    流程引擎的API和服务 流程引擎API(ProcessEngine API)是与Activiti打交道的最常用方式 Activiti从ProcessEngine开始.在ProcessEngine中,可 ...

  9. 西门子 S7200 以太网模块连接组态王方法

    北京华科远创科技有限研发的远创智控ETH-YC模块,以太网通讯模块型号有MPI-ETH-YC01和PPI-ETH-YC01,适用于西门子S7-200/S7-300/S7-400.SMART S7-20 ...

  10. githubssh配置