- 连接鉴权
- 代码仓库<=>部署机器 之间
- 部署机器<=>jenkins 之间
- demo项目
- ☆部署脚本
- 物理机部署
- 通过docker
- 远程启动一下
嗯,就是一个demo,抛砖引玉
最近在学习jenkins,要用到项目的部署,大概会是这样的场景
连接鉴权要实现脚本自动部署,需要代码仓库<=>部署机器、部署机器<=>jenkins 之间需要建立信任连接,才能让自动化代码去自行执行
代码仓库<=>部署机器 之间如果代码仓库是公共仓库,倒也不必要有鉴权的操作
更常见的是自己的或者项目组的私有仓库,我知道的两种常见的鉴权方式如下
-
(推荐)通过git仓库中配置部署机器的ssh公钥,过程可以参见 https://gitee.com/help/articles/4181,github、gitlab等也有类似的操作
-
还有一种曲线救国的方式,就是把你的登录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
-
ssh连接是一种常见的方式
# 生成ssh秘钥,一路默认 $ ssh-keygen # 将本机的公钥复制服务器 $ ssh-copy-id darcyzhang@192.168.5.217
-
也可以在部署机上起个http服务接收命令【滑稽】
就是一个简单的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



