首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >jenkins使用流水线部署go程序

jenkins使用流水线部署go程序

作者头像
章工运维
发布2023-07-09 14:14:53
发布2023-07-09 14:14:53
5440
举报
文章被收录于专栏:章工运维章工运维

# jenkins界面新建项目

# 编写脚本式流水线脚本

代码语言:javascript
复制
node("jenkins-slave4") {
    properties([
        parameters([
            choice(name: 'serviceName', choices: ['goland-demo'], description: ''),
            choice(name: 'targetHosts', choices: ['test001'], description: ''),
            choice(name: 'targetDir', choices: ['/data/application'], description: ''),
            gitParameter(branch:'', branchFilter: 'origin/(.*)', defaultValue: 'main', description: '选择将要构建的分支', name: 'TAG', quickFilterEnabled: true, selectedValue: 'TOP', sortMode: 'DESCENDING_SMART', tagFilter: '*', type: 'PT_BRANCH_TAG', useRepository: 'ssh://git@xxxxxx/goland-demo.git')
        ])
    ])

    stage('Checkout') {
            checkout(
                [$class: 'GitSCM', doGenerateSubmoduleConfigurations: false, submoduleCfg: [], extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]],
                branches: [[name: "main"]],userRemoteConfigs: [[url: "ssh://git@xxxxxx/goland-demo.git"]]]
            )
    }
    stage('ansible') {
        dir("/var/jenkins_home/ansible"){
            checkout(
                [$class: 'GitSCM', doGenerateSubmoduleConfigurations: false, submoduleCfg: [], extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]],
                branches: [[name: "master"]],userRemoteConfigs: [[url: "ssh://git@xxxxxx/ansible.git"]]]
            )
        }
    }
    stage('编译') {
            sh """ 
               export GOPATH=/usr/local/go
               export PATH=$PATH:\$GOPATH/bin
               go build -o ${serviceName}/main ./main.go
               cp -rf static service.sh ${serviceName}/
               tar -zcf ${serviceName}.tar.gz ${serviceName}
           """
    }  
    stage('部署') {
            ansiblePlaybook become: true, becomeUser: null, credentialsId: 'deploy_local', extras: '--extra-vars "WORKSPACE=${WORKSPACE} serviceName=${serviceName} targetHosts=${targetHosts} targetDir=${targetDir}"', inventory: '/var/jenkins_home/ansible/local_hosts', playbook: '/var/jenkins_home/ansible/xxx/test.yml', sudoUser: null, disableHostKeyChecking: true
    }

}

test.yml剧本文件如下

代码语言:javascript
复制
---
- hosts: "{{ targetHosts }}"
  remote_user: admin
  gather_facts: false
  become: yes
  tasks:    
    - name: "拷贝部署文件"
      copy:
        src: "{{item.src}}"
        dest: "{{item.dest}}"
        owner: admin
        group: admin
        mode: 0755
      with_items:
        - {src: "{{ WORKSPACE }}/{{ serviceName }}.tar.gz",dest: "/tmp/application/"}
    - name: "Execute the script"
      shell: |
        rm -rf {{ targetDir }}/*
        cd {{ targetDir }}
        cp -rf /tmp/application/{{ serviceName }}.tar.gz {{ targetDir }}/ && tar -xf {{ serviceName }}.tar.gz
        cd {{ serviceName }} && chmod +x service.sh && ./service.sh stop && ./service.sh start {{ targetDir }}/{{ serviceName }}

go服务启动停止service.sh脚本

代码语言:javascript
复制
#!/bin/bash

targetDir=$2

start(){
    cd ${targetDir}
    nohup ./main >>/dev/null 2>&1& echo $! > service.pid
    cd -
    
}


stop(){
    pid=`cat service.pid`
    if [ -z $pid ]
    then 
        echo "pid"
    else
        kill -9 ${pid}
        kill -9 ${pid}
        kill -9 ${pid}
    fi
}


case $1 in
start)
    start
    ;;
stop)
    stop
    ;;
    
restart)
    stop
    sleep 5
    start
    ;;
*)
    echo "[start|stop|restart]"
    ;;
    
esac

将以上脚本文件push到运维git仓库管理

# 发布

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # jenkins界面新建项目
  • # 编写脚本式流水线脚本
  • # 发布
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档