栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

自动化部署脚本Demo

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自动化部署脚本Demo

目录
  • 连接鉴权
    • 代码仓库<=>部署机器 之间
    • 部署机器<=>jenkins 之间
  • demo项目
  • ☆部署脚本
    • 物理机部署
    • 通过docker
    • 远程启动一下

嗯,就是一个demo,抛砖引玉

最近在学习jenkins,要用到项目的部署,大概会是这样的场景

连接鉴权

要实现脚本自动部署,需要代码仓库<=>部署机器、部署机器<=>jenkins 之间需要建立信任连接,才能让自动化代码去自行执行

代码仓库<=>部署机器 之间

如果代码仓库是公共仓库,倒也不必要有鉴权的操作

更常见的是自己的或者项目组的私有仓库,我知道的两种常见的鉴权方式如下

  1. (推荐)通过git仓库中配置部署机器的ssh公钥,过程可以参见 https://gitee.com/help/articles/4181,github、gitlab等也有类似的操作

  2. 还有一种曲线救国的方式,就是把你的登录git仓库的用户名和密码保存在机器上,不过如果多人共用机器就是造成安全和其他问题

    git config --global user.name "Your Name"  					#用户名
    git config --global user.email "email@example.com"  #邮箱
    git config --global credential.helper store
    # 执行一次需要用户名密码认证的操作后后面就无需每次都验证了 如 git pull
    
    # 顾名思义上面标示 全局(global)设置
    # 也可以设置只在本代码仓库生效,这样可以控制权限范围
    
    # 进入项目目录下
    git config user.name "Your Name"  					#用户名
    git config user.email "email@example.com"  	#邮箱
    git config credential.helper store
    # 执行一次需要用户名密码认证的操作后后面就无需每次都验证了 如 git pull
    
部署机器<=>jenkins 之间
  1. ssh连接是一种常见的方式

    # 生成ssh秘钥,一路默认
    $ ssh-keygen 
    # 将本机的公钥复制服务器
    $ ssh-copy-id darcyzhang@192.168.5.217
    
  2. 也可以在部署机上起个http服务接收命令【滑稽】

demo项目

就是一个简单的go写的http

package main

import (
	"flag"
	"fmt"
	"net/http"
	"time"
)

var sp = flag.Int("server_port", 8888, "server port")

func indexHandler(w http.ResponseWriter, r *http.Request) {
	timeStr := time.Now().Format("2006-01-02 15:04:05.000000")
	fmt.Fprintf(w, "hello world, %s", timeStr)
}

func main() {
	flag.Parse()
	http.HandleFunc("/", indexHandler)
	fmt.Println(*sp)
	http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", *sp), nil)
}
☆部署脚本 物理机部署
#!/bin/bash

# set -ex

WORKDIR=/data/zy/work_data/others

pushd ${WORKDIR}/httpdemo
  git pull origin master
  go build -o ${WORKDIR}/httper

  pushd ${WORKDIR}
    chmod a+x httper
    ./httper -server_port 8800
  popd

popd
通过docker

docker部署的一大优势就是可以免去每个人都要搭建环境的情况。如果项目的编译环境比较复杂,可以封装一个编译环境,将项目置于docker容器中编译。

#!/bin/bash

# set -ex

WORKDIR=/data/zy/work_data/others

docker rm -f httper_ci | true
# docker rmi httper_runner
pushd ${WORKDIR}/httpdemo
  git pull origin master
  docker build -t httper_runner .

  docker run -tid --name httper_ci -p 8800:8800 httper_runner -server_port 8800

popd

ps

每次都会构建一个镜像,可以设置每次清理之前的镜像的脚本逻辑

拓展:增加判断代码变更的逻辑,不过不变更就无需重新编译;增加通过环境变量控制是否需要重新编译;

远程启动一下
# 远程启动项目
$ ssh darcyzhang@192.168.5.217 "/data/zy/work_data/others/httpdemo/deploy_docker.sh"
# 测试项目是否启动成功
$ curl http://192.168.5.217:8800

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860601.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号