一步一步完成GitLab Runner持续化自动部署

标签: Gitlab  Runner  GitlabRunner  持续化自动部署

本文将以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-****** -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"

这里写图片描述

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

版权声明:本文为shuyuea3原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shuyuea3/article/details/80699073

智能推荐

看Spring源码,一步一步的分析Spring容器初始化的步骤

Spring容器初始化三部曲: 定位:定位配置文件和扫描相关的注解 加载:将配置信息加载到内存 注册:根据载入的信息将对象初始化到IOC容器中 可以总结为如下步骤: 寻找入口-获取配置文件路径-容器开始启动-开始解析配置文件路径-载入配置路径-分配路径处理策略-解析配置文件路径-加载配置文件信息-开始解析配置文件-分配解析配置文件策略-将配置文件载入到内存-载入<bean>元素-载入&...

一步一步使用ABP框架搭建正式项目系列教程之本地化详解

本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化、全球化的,不管怎么个叫法,反正道理都是一样的,就是一个系统具有选择多种语言的能力。比如,我们用的电脑或手机,可以在设置中选择语言,但是这并不影响系统已经具有的功能,只是显示的文字变成你所选语言的文字了。再比如说微信,功能设置里面也能选择语言,比如你选择的是英语,那么我们在中文看到的朋友圈就变成了“...

人工智能基础-数学方法-形式逻辑

1956 年召开的达特茅斯会议宣告了人工智能的诞生。在人工智能的襁褓期,各位奠基者们,包括约翰·麦卡锡、赫伯特·西蒙、马文·明斯基等未来的图灵奖得主,他们的愿景是让“具备抽象思考能力的程序解释合成的物质如何能够拥有人类的心智”。 通俗地说,理想的人工智能应该具备抽象意义上的学习、推理与归纳能力,其通用性将远远强于解决国际象棋或是围棋...

P3397 地毯——题解2020.10.3

P3397 地毯 思路分析 定义一个二维数组 a[ ][ ]存放每个点覆盖地毯的个数,下标表示每个点的坐标; 设置一个二重循环依次遍历每个地毯覆盖的坐标范围,使地毯覆盖范围内点的值+1; 打印出该二维数组 a[ ][ ]即为本题答案; 注意事项 由题可知:对于20%的数据,有 n≤50,m≤100;对于100%的数据,有 n,m≤1000;所以数组定义为a[1003][1003]...

反射注解案例

1、反射案例: 需求 写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法 实现: 配置文件 反射 步骤: 创建对象 将需要创建的对象的全类名和需要执行的方法定义在配置文件中 在程序中加载读取配置文件 使用反射技术来加载类文件进内存 执行方法 第一步:Person类(创建对象) 第二步:配置文件 pro.properties(将需要创...

猜你喜欢

lambert与half lambert模型逐顶点和逐片元的漫反射光照

兰伯特模型 逐顶点光照 逐片元光照: 效果对比:左边为逐片元光照。右边为逐顶点光照。右边明暗交界处有较明显的锯齿 半兰伯特光照模型 兰伯特模型的一个问题就是背光面只有一种颜色,缺乏立体感。Half Lambert用于解决这个问题 半兰伯特模型公式: 与兰伯特模型的差别主要在于不同于将背光面光都设为0,它将背光的光也即负值也映射到[0,1]区间。避免了背光的颜色只有0这一种值。需要注意的是,half...

[React官网入门教程]三子棋游戏完整代码

入门教程: 认识 React 最终效果 完整代码 index.css部分 index.css部分...

票据打印机-ESC/POS指令使用

给打印机输入串口命令,是打印机处于一种状态,然后就能干你想让他干的活了.百度ESC/POS文档随便拿一个正规的都一样,就不在这里放地址了,拿到这个文档以后代码的编写我只举一个例子,其它的模式也都一样 比如说这个功能为初始化打印机,他有三种输入模式,第一种是ASCII码(ESC @),第二种是Hex也就是16进制数(1B 40),第三种Decimal十进制数(27 64),我以16进制为例,那么他的...

JDBC工具类抽取

以下内容为观看黑马教学视频后仿写 新建一个JAVA Project,目录结构如下:    jdbc配置文件 jdbc.properties jdbc工具类  JDBCUtil.java 测试程序 MainTest.java 数据库中数据如下: 执行测试程序,运行结果如下:...

如何根据CIFAR-10的格式制作自己的数据集(C/C++版)

首先特别感谢博主 @yhl_leo 关于CIFER-10数据集可查看官方介绍,存储信息介绍如下: 不啰嗦,直接上代码实例,图片如何存储为二进制格式的三个代码文件如下: 相应的代码及备注依次如下: 本人转换后的结果如下: 最后,将数据放入CIFAR-10模型中,并修改一下部分参数,效果还不错!...