转载

golang+jenkins自动化部署方案

先说一下实现思路,在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 中可以查看到,输入之后到下一步。

    golang+jenkins自动化部署方案

    image-20200726103802232.png

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

    golang+jenkins自动化部署方案

    image-20200726104214835.png

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

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

    golang+jenkins自动化部署方案

    image-20200726105322680.png

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

    golang+jenkins自动化部署方案

    image-20200726110006269.png

    golang+jenkins自动化部署方案

    image-20200726112000536.png

    golang+jenkins自动化部署方案

    image-20200726110402783.png

  6. 配置远程服务器

    golang+jenkins自动化部署方案

    image-20200726110959724.png

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

    golang+jenkins自动化部署方案

    image-20200726111108555.png

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

    golang+jenkins自动化部署方案

    image-20200726111420108.png

  9. 配置源码管理

    golang+jenkins自动化部署方案

    image-20200726111535670.png

  10. 配置触发器

    golang+jenkins自动化部署方案

    image-20200726111849275.png

    golang+jenkins自动化部署方案

    image-20200726112239397.png

  11. 配置构建环境

    golang+jenkins自动化部署方案

    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然后部署,然后每次部署之前先查找之前占用的端口并杀死这个进程,最后执行这一次的打包文件。

有疑问加站长微信联系

golang+jenkins自动化部署方案
原文  https://studygolang.com/articles/30043
正文到此结束
Loading...