热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一步一步完成GitLabRunner持续化自动部署

本文将以Ubuntu16.04.4+Docker自动化部署Dotnetcore项目1.安装gitlab安装使用本地离线安装,下载相应包后直接安装即可,然后安装配置web地址等

本文将以Ubuntu16.04.4+Docker自动化部署Dotnetcore项目

1.安装gitlab

  • 安装使用本地离线安装,下载相应包后直接安装即可,然后安装配置web地址等等,这个在网上很多示例,这里不再赘述.

2.Ubuntu安装Docker

  • 使用官方脚本安装Docker,安装源为阿里云

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

    • 推荐使用阿里云镜像加速,这样在部署的时候会快一点,按照阿里云官网添加即可,不赘述.

3.在Docker安装并配置GitLab Runner

  • 参考官网地址Girlab Runner https://docs.gitlab.com/runner/install/

  • 在Docker安装GitLab Runner

    • 1.使用命令在Docker中安装Gitlab Runner
    docker run -d --name gitlab-runner --restart always \
    -v /srv/gitlab-runner/config:/etc/gitlab-runner \
    -v /var/run/docker.sock:/var/run/docker.sock \
    gitlab/gitlab-runner:latest
    • 2.注册并设置Gitlan Runner

    • 1.访问Gitlab获取http://你的gitlab地址/admin/runners

    • 2.运行Gitlab Runner注册设置

      docker exec -it gitlab-runner gitlab-runner register

      根据提示输入信息

      Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
      http://git.xd5u.cn/
      Please enter the gitlab-ci token for this runner:
      eF8wyzi****2RhgTHMis
      Please enter the gitlab-ci description for this runner:
      [6d1bc8938869]:
      Please enter the gitlab-ci tags for this runner (comma separated):
      demo
      Whether to run untagged builds [true/false]:
      [false]: true
      Whether to lock the Runner to current project [true/false]:
      [true]: true
      Registering runner... succeeded                     runner=eF8wyziy
      Please enter the executor: parallels, shell, ssh, virtualbox, docker+machine, docker, docker-ssh, docker-ssh+machine, kubernetes:
      docker
      Please enter the default Docker image (e.g. ruby:2.1):
      microsoft/dotnet:latest
      Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

      设置了默认源为microsoft/dotnet:latest,这里时候Runners里面应该已经添加好了

4.添加一个dotnetcore测试项目

  • 1.创建一个mvc示例

  • 2.在gitlab创建一个项目,并且将刚创建项目提交上去

5.自动部署脚本.gitlab-ci.yml添加

  • 1.添加.gitlab-ci.yml文件

    还原包并且生成

    
    # image: microsoft/aspnetcore-build
    
    stages:
    - build build_job:
    stage: build
    only:
      - master script:
    - dotnet restore - dotnet build

    保存后就应该已经在运行中了

    第一次部署,正在获取microsoft/aspnetcore-build镜像,这里如果很慢的话,可以使用阿里云镜像加速

    下面是完成后的截图

    这里测试生成已经正常了,在这步可以还可以做部署测试等等,测试完成了再部署.

6.部署到web服务器

我这里使用阿里云作为部署服务器,再服务器安装好运行环境.我是ASP.NET Core+Nginx,下面开始搭建.

1.安装dotnet-sdk

参考官网,这里不赘述:https://www.microsoft.com/net/learn/get-started/linux/ubuntu16-04

2.安装Nginx并配置

  • 安装nginx
sudo apt-get install nginx
  • 启动nginx
sudo service nginx start

  • 启动后访问ip测试nginx是否已经正常

3.现在环境已经搭建好了,继续配置nginx以及添加一个dotnetcore运行的服务和创建web路径

1.修改nginx的默认配置(实际可以添加配置文件,绑定域名,我这里就不分配域名了)

vim /etc/nginx/sites-available/default
修改为内容,主要是代理5000端口
server {
    listen        80;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $http_host;
        proxy_cache_bypass $http_upgrade;
    }
}

修改保存后重新加载配置文件

sudo nginx -t
sudo nginx -s reload

现在访问地址应该是502错误,不用管他,因为我们dotnetcore网站还没运行

2.创建一个目录用于部署DotnetCoreDemo项目的目录

mkdir /var/www/DotnetCoreDemo

稍后网站以及服务会再这个目录执行

3.创建一个运行DotnetCoreDemo网站的服务并启用

sudo vim /etc/systemd/system/kestrel-DotnetCoreDemo.service
内容为
[Unit]
Description=DotnetCoreDemo

[Service]
WorkingDirectory=/var/www/DotnetCoreDemo
ExecStart=/usr/bin/dotnet /var/www/DotnetCoreDemo/DotnetCoreDemo.dll # 路径根据自己项目来设置
Restart=always
RestartSec=10
SyslogIdentifier=DotnetCoreDemo_log
User=www-data
EnvirOnment=ASPNETCORE_ENVIROnMENT=Production
EnvirOnment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

# 启用服务(这里只是启用了,并没有启动)
systemctl enable kestrel-DotnetCoreDemo.service

4.配置服务器ssh免密码登陆,在脚本中会使用到

在本地服务器创建RSA无密码密钥,并添加远程授权

ssh-keygen -t rsa -P ''
ssh-copy-id root@阿里云部署服务器IP

复制私钥添加到项目变量SSH_PRIVATE_KEY_DEV

cat /root/.ssh/id_rsa

继续在Gitlab添加变量

DEPLOY_SERVER_DEV,服务器部署的地址

KESTREL_SERVICENAME,服务器部署的dotnet网站的服务名称

WEB_DIR,服务器网站部署的路径

修改脚本.gitlab-ci.yml文件

# 指定镜像 microsoft/aspnetcore-build暂时没有sdk2.1的编译环境,暂时不需要
# image: microsoft/aspnetcore-build
stages:
  - build   - deploy_dev 
before_script:
  # Install ssh-agent if not already installed, it is required by Docker.
  # (change apt-get to yum if you use a CentOS-based image)
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' 
  # Run ssh-agent (inside the build environment)
  - eval $(ssh-agent -s) 
  # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
  # error: https://gitlab.com/gitlab-examples/ssh-private-key/issues/1
  # - echo "$SSH_PRIVATE_KEY_DEV"
  - ssh-add <(echo "$SSH_PRIVATE_KEY_DEV") 
  # For Docker builds disable host key checking. Be aware that by adding that
  # you are suspectible to man-in-the-middle attacks.
  # WARNING: Use this only with the Docker executor, if you use it with shell
  # you will overwrite your user's SSH config.
  - mkdir -p ~/.ssh   - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' build_job:
  stage: build
  only:
    - master   script:
  - dotnet restore   - dotnet build deploy_dev_job:
  stage: deploy_dev
  environment:
    name: development
  only:
    - master   script:
    # 发布程序
    - dotnet publish -c Release --output /publish     # 停止服务器网站的服务
    - ssh root@$DEPLOY_SERVER_DEV "systemctl stop $KESTREL_SERVICENAME"     # scp复制发布文件到服务器
    - scp -r /publish/* root@$DEPLOY_SERVER_DEV:$WEB_DIR     # 启动服务器的服务
    - ssh root@$DEPLOY_SERVER_DEV "systemctl start $KESTREL_SERVICENAME" 

这里写图片描述

到这里,自动化部署全部完成.其他方式类似操作.


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
VASTEw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有