golang+jenkins自动化部署方案

lannisiter · · 3164 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

先说一下实现思路,在gitee和Jenkins使用webhook来触发构建,构建策略中做的事情是ssh连接远程服务器,然后执行部署命令。

Jenkins环境搭建

Jenkins安装

Jenkins的安装有两种方式,一种是下载war包放在tomcat中跑,一种是docker中直接拉取镜像运行,这里只讲解第二种方式。

  1. 拉取镜像docker pull jenkins/jenkins:lts

  2. 启动容器

    docker run \
      -u root \
      --rm \  
      -d \ 
      -p 8080:8080 \ 
      -p 50000:50000 \ 
      -v jenkins-data:/var/jenkins_home \ 
      -v /var/run/docker.sock:/var/run/docker.sock \ 
      jenkins/jenkins:lts 
    

配置环境

这里先修改一下jenkins的插件下载源,不设置的话下载插件时会太慢。进入到挂载jenkins目录下的updates中,执行下面的命令

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
  1. 容器运行之后访问ip:8080/进入jenkins界面,第一次进入需要输入初始化密码,密码在你挂载Jenkins目录下的/secrets/initialAdminPassword中可以查看到,输入之后到下一步。

    image-20200726103802232.png

  2. 选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。

    image-20200726104214835.png

  3. 下载完成之后会进入一个创建账号的界面,这里自己创建一个就行,后续登录就用这个账号。

  4. 然后进入管理Jenkins-->系统配置


    image-20200726105322680.png
  5. 这里看你的项目仓库是在哪里(github、gitlab、gitee、gogs),根据自己的仓库来配置git就行,我这里是用的gitee,填写好自己的仓库地址和gitee域名之后,去gitee上生成一个令牌,然后点击添加证书令牌,令牌配置好之后点一下右下角的测试链接,连接上就ok了。


    image-20200726110006269.png

    image-20200726112000536.png

    image-20200726110402783.png
  6. 配置远程服务器


    image-20200726110959724.png
  7. 回到主界面,新建一个item,选择自由风格。


    image-20200726111108555.png
  8. 选择好个人仓库的连接,配置构建策略


    image-20200726111420108.png
  9. 配置源码管理


    image-20200726111535670.png
  10. 配置触发器


    image-20200726111849275.png

    image-20200726112239397.png
  11. 配置构建环境


    image-20200726112850889.png

    这里对构建执行的代码做一下讲解

    source /etc/profile     #这里需要安装golang并配置环境变量
    --------------------------------------------------------
    #这里是我自己的profile文件中golang的环境变量
    export GO111MODULE=on
    export GOROOT=/usr/local/go 
    export GOPATH=/home/gopath
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    export GOPROXY=https://goproxy.cn,direct
    --------------------------------------------------------
    
    cd /edu/volumes/jenkins_home/workspace/edu  #进入挂载的jenkins工作目录中找到部署的代码
    rm -rf main             #移除之前打包的可执行文件
    go build main.go        #打包命令
    cp main /edu/build/     #复制打包文件到需要部署到的位置
    cd /edu/build/          #进入需要部署的位置
    sh build.sh             #执行部署目录下的脚本文件
    --------------------------------------------------------
    #以下是build.sh文件的代码
    #!/usr/bin/env bash
    go_id=`ps -ef|grep "./edu-app" |grep -v "grep" | awk '{print $2}'`
    if [ -z "$go_id" ];
    then
        echo "[go pid not found]"
    else
        kill -9 $go_id
        echo "killed $go_id"
    fi
    
    echo "clean old file"
    rm -rf edu-app
    rm -rf edu-app.log
    if [ -f main ]; then
        echo "strat new process"
        mv main edu-app
        chmod -R 777 edu-app
        nohup ./edu-app >edu-app.log 2>&1 &
    else
        echo "edu-app file not found,qiut"
    fi
    --------------------------------------------------------
    这里要注意的是,脚本中把main文件名改为edu-app然后部署,然后每次部署之前先查找之前占用的端口并杀死这个进程,最后执行这一次的打包文件。
    

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:lannisiter

查看原文:golang+jenkins自动化部署方案

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3164 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传