首页 > 编程语言 >[转]AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

[转]AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

时间:2024-04-19 10:24:50浏览次数:15  
标签:compose 部署 0.0 AspNetCore ------------------------------ REGISTRY jenkins Jenkin

一.前言

 

                                                 (Jenkins、Docker、Git/Svn组建一套简单的自动化发布流程)

 文章中用到的相关服务器角色

角色 环境 功能
开发机 Win10、Docker(Linux OS) 编码、调试
发布机(与开发机共享) Win10、Docker(Linux OS)、Jenkins 自动化部署
测试服务器 Ubuntu、Docker 测试环境

 

 

 

 

 

 

二.安装jenkins

1.Windows下安装jenkins

各环境下安装教程 https://jenkins.io/zh/doc/book/installing/

Windows下载地址:https://jenkins.io/zh/download/thank-you-downloading-windows-installer-stable

建议jinkens还是安装在docker的宿主机上,不论是windows还是linux,容器形式安装虽然很方便!但是后续很多坑,比如jenkins容器内共享宿主机docker和容器内运行docker-compose

下面是docker下安装的一些笔记(没走通),最终选择了宿主机下安装jinkens

PS C:\Users\Administrator> docker run -u root -d -p 8080:8080 -p 50000:50000 -v /e/DockerData:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueoceanc8222a3716a327ce82770aa729fe80169cbcc28c4d2ada8891cf49ed0b38f3e3PS C:\Users\Administrator> docker ps -aCONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS                      PORTS                                              NAMESc8222a3716a3        jenkinsci/blueocean   "/sbin/tini -- /usr/…"   About a minute ago   Up About a minute           0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   serene_feistel66ff08eda2ae        c42e9f575fc4          "dotnet HelloWorld.d…"   2 days ago           Up 2 days                   0.0.0.0:81->80/tcp                                 netcore_helloworld5357b641a7b1        9c18561d7ab3          "nginx -g 'daemon of…"   2 days ago           Up 2 days                   0.0.0.0:80->80/tcp, 0.0.0.0:801->801/tcp           mynginx

-v /e/DockerData:/var/jenkins_home,把jenkins_home目录(包含插件、配置、工作数据)挂载到宿主机。

这里宿主机是windows,/e/DockerData相当于"e:\DockerData",前提是e盘必须被设置为Shared Drives,如果未设置会弹出提示。

/var/run/docker.sock:/var/run/docker.sock,映射宿主机的docker到jenkins容器。

进入jenkins容器内,查看宿主机docker信息

PS C:\Users\Administrator> docker exec -it c8222a3716a3 bashbash-4.4# docker versionClient: Version:           18.09.1-ce API version:       1.39 Go version:        go1.11.4 Git commit:        4c52b901c6cb019f7552cd93055f9688c6538be4 Built:             Fri Jan 11 15:41:33 2019 OS/Arch:           linux/amd64 Experimental:      falseServer: Docker Engine - Community Engine:  Version:          18.09.2  API version:      1.39 (minimum version 1.12)  Go version:       go1.10.6  Git commit:       6247962  Built:            Sun Feb 10 04:13:06 2019  OS/Arch:          linux/amd64  Experimental:     false

还需要安装docker-compose,否则shell脚本通过compose来构建镜像时会报docker-compose not found。

docker-compose安装教程 https://docs.docker.com/compose/install/

这里跟宿主机不同的是,要选择在容器内的安装方式“INSTALL AS A CONTAINER”

PS C:\Users\Administrator> docker-compose -v  #查看宿主机docker-compose版本docker-compose version 1.23.2, build 1110ad01PS C:\Users\Administrator> docker exec -it c8222a3716a3 bash  #进入jenkins容器bash-4.4# curl -L --fail https://github.com/docker/compose/releases/download/1.23.2/run.sh -o /usr/local/bin/docker-compose   #bash脚本安装compose  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100   596    0   596    0     0    587      0 --:--:--  0:00:01 --:--:--   587100  1666  100  1666    0     0    831      0  0:00:02  0:00:02 --:--:--  2127bash-4.4# chmod +x /usr/local/bin/docker-composebash-4.4#Unable to find image 'docker/compose:1.23.2' locally1.23.2: Pulling from docker/compose4fe2ade4980c: Pull complete                                                                                                                                                                                                                                                    658ccff8d4f1: Pull complete                                                                                                                                                                                                                                                    71166c3c8d42: Pull complete                                                                                                                                                                                                                                                    c246ed86dd59: Pull complete                                                                                                                                                                                                                                                    Digest: sha256:f6e4963cd17f709fb57f7cf0842e269ed6ba173c3490055b50c701a257feb860Status: Downloaded newer image for docker/compose:1.23.2bash-4.4# docker-compose -v   #查看jenkins容器内compose版本docker-compose version 1.23.2, build 1110ad01

 

2.登入jenkins

浏览器打开localhost:8080

根据提示找到initialAdminPassword文件中的初始密码

接下来根据导航依次执行“安装默认插件” ,“创建jenkins账号”,“登入jenkins”

 

三.创建jenkins发布项目

1.新建Item

 

2.源码设置

如果是私有仓库需要加凭据Credentials

Failed to connect to repository:Error performing command:git.exe,如果有安装git,那就是“Global Tool Configuration”配置的git路径不对。

 

Manage Jenkins - Global Tool Configuration

 

设置正确的git.exe路径

设置好保存后再进入helloworld项目的配置页面。

 

3.构建触发器和构建环境

构建触发器,就是设置如何进行自动构建。如其他项目构建完后触发该项目的构建、定时构建(不论有没有代码变更)、轮询代码构建(jenkins轮询远程仓库有代码变更则进行构建)。

这里都不选,则需要在工作台使用手动(点击按钮)构建。

 

4.添加PowerShell脚本

linux选择shell,windows下建议用powershell,batch command对docker命令的支持不是很友好。

安装powershell插件

切换到“可选插件”选项卡,搜索powershell安装

 

添加构建命令

#定义变量$IMAGE_VERSION='latest'$REGISTRY_USER='镜像仓库账号'$REGISTRY_PWD='镜像仓库密码'$REGISTRY_HOST='ccr.ccs.tencentyun.com'$REGISTRY_NAMESPACE='镜像仓库namespace'$SERVICE_HELLOWORLD='helloworld'$SERVICE_MYNGINX='mynginx'#jenkins拉取的项目默认路径 “安装路径根目录/workspace/jenkins里面建的项目名”$COMPOSE_PATH='D:\Program Files (x86)\Jenkins\workspace\helloworld\docker-compose.yml'echo "------------------------------ 构建镜像 ------------------------------"docker-compose -f "${COMPOSE_PATH}" buildecho "------------------------------ 登录远程仓库 ------------------------------"docker login --username=${REGISTRY_USER} --password=${REGISTRY_PWD} ${REGISTRY_HOST}echo "------------------------------ 标记镜像 ------------------------------"docker tag ${SERVICE_HELLOWORLD}:${IMAGE_VERSION} ${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/${SERVICE_HELLOWORLD}:${IMAGE_VERSION}docker tag ${SERVICE_MYNGINX}:${IMAGE_VERSION} ${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/${SERVICE_MYNGINX}:${IMAGE_VERSION}echo "------------------------------ 推送到远程仓库 ------------------------------"docker push ${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/${SERVICE_HELLOWORLD}:${IMAGE_VERSION}docker push ${REGISTRY_HOST}/${REGISTRY_NAMESPACE}/${SERVICE_MYNGINX}:${IMAGE_VERSION}echo "------------------------------ 清理None ------------------------------"docker rmi $(docker images -f "dangling=true" -q)

 

5.远程SSH

安装”Publish Over SSH“插件,安装完之后,进入到”Manage Jenkins“ - "Configure System"中配置远程服务器

 

Passphrase:SSH密码

Path to key:SSH私钥的文件路径

Key:私钥串,如果“Key”和“Path to key”都设置,则“Key”的优先级较高

Disable exec:禁止在目标机上执行命令

SSH Server 配置(指定远程服务器的ip,可以配置多个ssh server )

Name:SSH节点配置的名称,在Job中使用Publish over SSH插件时,此名称将出现在“SSH Server”中“Name”的下拉列表中,如下图:

Hostname:通过SSH连接到的远程主机名或IP

Username:SSH服务使用的用户名,使用key进行连接时为key指定的用户名

详见插件官方介绍页 https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin

 

添加一个docker-compose.staging.yml提交到git仓库,用于测试环境。

version: '3.4'services:  helloworld:    image: ccr.ccs.tencentyun.com/wuuu/helloworld:latest    environment: #环境变量      - ASPNETCORE_ENVIRONMENT=Development    ports: #端口映射      - "81:80"    container_name: netcore_helloworld    deploy:      restart_policy: #重启策略        condition: on-failure        delay: 5s        max_attempts: 3    networks: #指定network      - newbridge        mynginx:    image: ccr.ccs.tencentyun.com/wuuu/mynginx:latest    ports:      - "80:80"      - "801:801"    container_name: mynginx    deploy:      restart_policy:        condition: on-failure        delay: 5s        max_attempts: 3    networks:      - newbridgenetworks:  newbridge: #新的network    #name: newbridge  #compose版本3.5开始才支持自定义名称

 

继续之前的构建,“增加构建步骤“ - ”Send files or execute commands over SSH“

Name:选择刚刚配置的远程服务器”Staging_Server“

Source files:要上传的文件的相对路径,多个文件以逗号分隔。相对workspace的路径(其实是相对workspace下项目的路径),也支持表达式,如上图中的“**/*.war”。

 如:我的项目通过jenkins git插件拉取下来,所在的目录是D:\Program Files (x86)\Jenkins\workspace\helloworld,docker-compose.staging.yml刚好在hellworld目录下,所以此处直接填文件名

        如果yml文件在hellowrold/mycompose/目录下,则需要填写mycompose/docker-compose.staging.yml

Remove prefix:文件复制时要过滤的文件夹。

Remote directory:远程服务器上的文件夹,此文件夹路径是相对于“SSH Server”中的“Remote directory”。如果该文件夹不存在将会自动创建。

        由于配置Staging_Server时Remote directory没有设置,并且时直接使用root账户登录Staging_Server的,所以Remote directory路径默认为root/

        此处填/mydokcercompose,则文件会被复制到服务器的/root/mydokcercompose/docker-compose.staging.yml

Exec command:shell命令

#!/bin/bash#定义变量REGISTRY_USER='镜像仓库账号'REGISTRY_PWD='镜像仓库密码'REGISTRY_HOST='ccr.ccs.tencentyun.com'COMPOSE_PATH='mydockercompose/docker-compose.staging.yml'echo ------------------------------ 登录远程仓库 ------------------------------docker login --username=$REGISTRY_USER --password=$REGISTRY_PWD $REGISTRY_HOSTecho ------------------------------ 卸载服务 ------------------------------docker-compose -f $COMPOSE_PATH downecho ------------------------------ 拉取镜像 ------------------------------docker-compose -f $COMPOSE_PATH pullecho ------------------------------ 启动服务 ------------------------------docker-compose -f  mydockercompose/docker-compose.staging.yml up -decho ------------------------------ 清除None ------------------------------docker rmi $(docker images -f "dangling=true" -q)

 

6.手动构建

 

7.完成

构建完成之后,查看构建日志是否有异常

 

查看jenkins服务器上构建的image

PS C:\Users\Administrator> docker imagesREPOSITORY                               TAG                 IMAGE ID            CREATED             SIZEccr.ccs.tencentyun.com/wuuu/helloworld   latest              4024cdbb87dc        About an hour ago   265MBhelloworld                               latest              4024cdbb87dc        About an hour ago   265MBccr.ccs.tencentyun.com/wuuu/mynginx      latest              daca457eb2a9        7 hours ago         109MBmynginx                                  latest              daca457eb2a9        7 hours ago         109MBmcr.microsoft.com/dotnet/core/sdk        2.2-stretch         e4747ec2aaff        4 weeks ago         1.74GBmcr.microsoft.com/dotnet/core/aspnet     2.2-stretch-slim    f6d51449c477        4 weeks ago         260MB

查看演示服务器的image和container

root@VM-16-9-ubuntu:~# docker imagesREPOSITORY                               TAG                 IMAGE ID            CREATED             SIZEccr.ccs.tencentyun.com/wuuu/helloworld   latest              4024cdbb87dc        About an hour ago   265MBccr.ccs.tencentyun.com/wuuu/mynginx      latest              daca457eb2a9        7 hours ago         109MBroot@VM-16-9-ubuntu:~# docker ps -aCONTAINER ID        IMAGE                                           COMMAND                  CREATED             STATUS              PORTS                                      NAMESe1dc94a1886b        ccr.ccs.tencentyun.com/wuuu/mynginx:latest      "nginx -g 'daemon of…"   8 minutes ago       Up 7 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:801->801/tcp   mynginx3ad3db4fbd94        ccr.ccs.tencentyun.com/wuuu/helloworld:latest   "dotnet HelloWorld.d…"   8 minutes ago       Up 8 minutes        0.0.0.0:81->80/tcp                         netcore_helloworld

浏览器打开演示服务器IP:801

 

示例代码Github地址https://github.com/wwwu/AspNetCore_Docker

 

 


---------------------
作者:找不到一个满意的昵称
来源:CNBLOGS
原文:https://www.cnblogs.com/wu_u/p/11039371.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

标签:compose,部署,0.0,AspNetCore,------------------------------,REGISTRY,jenkins,Jenkin
From: https://www.cnblogs.com/admans/p/18145224

相关文章

  • [转]AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
    一.前言上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来。如果该应用继续引入mysql、redis、job等若干服务,到时候发布一次得工作量之大就可想而知了,这时候就需要用到DockerCompose。DockerCompose是一个用于定义和运行多容器Docker应用程......
  • 万象奥科邀您参加RK3568+AMP混合部署线下实操活动-北京站
    4月25日,万象奥科将携手RT-Thread在北京举办线下workshop,带您体验RK3568+OpenAMP实现RT-Thread与Linux同时运行的开发方式,实现在电力、机器人、工业控制、工业互联网、新能源等领域的高效应用。 Workshop内容:混合部署方式大公开:揭秘混合部署的原理与显著优势,助力系统运行更稳健......
  • 如何在 Netlify 上手动部署 React 和 TypeScript 项目
    在本教程中,我将教你如何使用Vite在Netlify上手动部署React和TypeScript项目。我将向你展示一些快速简单的步骤,让你的项目能够立即运行。要跟着本教程操作,有几个先决条件:一个现有的React和TypeScript项目,使用Vite构建,并且你想要部署它。VisualStudioCode(VSCode......
  • 云原生之在kubernetes集群下部署mysql应用
    一、Mysql介绍数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。MySQL是一种开源的关系型数据库管理系统,可将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内,从而加快了访问速度并提高了灵活性。MySQL使用了标准的SQL语言形式。支持大型的数据库,可以处理......
  • 【Docker】Docker部署Redis
    ✨Docker本文介绍DockerDesktop以及docker命令行的简单使用DockerDesktop安装使用请查阅官方文档GetDocker|DockerDocumentation在Windows上安装DockersDesktop可参考【Docker】DockerDesktopforWindows(WSL2)安装-双份浓缩馥芮白-博客园(cnblogs.com)似乎......
  • browserless 部署无头浏览器到docker中的工具
    browserless部署无头浏览器到docker中的工具包含的特性支持可配置的并行以及请求队列开箱即用的字体支持debug视图支持交互式的puppeteer调试器支持puppeteer以及playwright支持基于websocket以及restapi的请求控制(可以进行pdf生成,图片处理等)简单使用docker......
  • Ubuntu部署有道QAnything(中间涉及到更换mysql容器端口)
    1、系统配置版本:Ubuntu20.04有两块3090的显卡2、下载相关文件首先下载源码,下载完成后解压得到QAnything-master文件夹github下载地址:https://github.com/netease-youdao/qanythinggitee下载地址:https://gitee.com/netease-youdao/QAnything?_from=gitee_search下载embed......
  • redis 哨兵部署
    redis生产哨兵的测试1、helmrelease的版本helmrepoaddbitnamihttps://charts.bitnami.com/bitnamihelmpullbitnami/redis--version18.2.2sentinel-redis]#lsredisredis-18.2.2.tgzvalues.yaml配置文件注意配置文件的cm部分,先使用默认的configmap配置然后再......
  • GPT-SoVITS 部署
    GPT-SoVITShttps://github.com/RVC-Boss/GPT-SoVITShttps://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1egitclonehttps://github.com/RVC-Boss/GPT-SoVITS.gitcondacreate-nGPTSoVitspython=3.9condaactivateGPTSoVitsbashinstall.shsudovimstartup.s......
  • EQ-BDS面板部署机器人
    一、机器人配置教程0.预处理首先处理杀毒软件误报问题。在服务器上安装火绒安全当然,您也可以不选择火绒,使用其他杀毒软件,到时候给插件加上信任即可安装完成后禁用WindowsDefender,详见EQ-BDS面板用户手册1.下载然后解压压缩包点我跳转到下载页面这个网盘不需要开会员,您只......