golang jenkins devops (二) - Go语言中文社区

golang jenkins devops (二)


在golang  jenkins devops (一)中我们已经将image push 到了docker hub 这一章我们将彻底实现自动化:

第一步 代码push 自动发布:

下载码云插件:

添加Gitee配置:

密钥设置地址根据不通的git 仓库进行设置:

 在具体的流水线内设置:

 码云具体的代码库设置:

修改流水线脚本测试一下:

pipeline {
    agent any 
    stages {
        stage('Clone'){
            steps{
                echo 'clone code'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bd614304-0e04-4c10-b579-584cd93fcec3', url: 'git@gitee.com:golangxiaoyu/jenkinsgolang.git']]])
            }
        }

        stage('Build') { 
            steps {
                echo 'build'
                sh 'docker build -t golangdocker:"${version}" .'
            }
        }
        stage('Push') { 
            steps {
                echo 'push'
                sh 'docker login --username="${alidockerhubusername}" registry.cn-beijing.aliyuncs.com --password="${alidockerhubpass}"'
                sh 'docker tag golangdocker:"${version}" registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:"${version}"'
                sh 'docker push registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:"${version}"'

                sh 'docker rmi golangdocker:"${version}"'
                sh 'docker rmi registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:"${version}"'
            }
        }
        stage('Deploy') { 
            steps {
                echo 'deploy'
            }
        }
    }
}


这里还要新修改一下参数化构建的版本号:

下面推送一下代码:

查看一下git 

查看一下jenkins 已经开始构建了:

查看一下 docker hub这里无法验证 docker images了因为在push后直接将构建的image删除掉了:

我们run一下看看是否修改成功了:

到这里基本上整个流程已经通了,剩下的就是自动发布以及解决版本号的问题:

这里我添加了一个 Version文件每次发布需要指定版本号:

之后修改流水线脚本:

pipeline {
    agent any 
    stages {
        stage('Clone'){
            steps{
                echo 'clone code'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bd614304-0e04-4c10-b579-584cd93fcec3', url: 'git@gitee.com:golangxiaoyu/jenkinsgolang.git']]])

                script {
                    env.VERSION = readFile 'Version'
                }
            }
        }

        stage('Build') { 
            steps {
                echo 'build'
                sh 'docker build -t golangdocker:'+"${env.VERSION}"+' .'
            }
        }
        stage('Push') { 
            steps {
                echo 'push'
                sh 'docker login --username="${alidockerhubusername}" registry.cn-beijing.aliyuncs.com --password="${alidockerhubpass}"'
                sh 'docker tag golangdocker:'+"${env.VERSION}"+' registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
                sh 'docker push registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"

                sh 'docker rmi golangdocker:'+"${env.VERSION}"
                sh 'docker rmi registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
            }
        }
        stage('Deploy') { 
            steps {
                sh 'docker login --username="${alidockerhubusername}" registry.cn-beijing.aliyuncs.com --password="${alidockerhubpass}"'
                sh 'docker pull registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
                sh 'docker stop dockerdemo'
                sh 'docker rm dockerdemo'
                sh 'docker run --name dockerdemo -p 8888:8080 -d registry.cn-beijing.aliyuncs.com/golangdevops/golangdocker:'+"${env.VERSION}"
            }
        }
    }
}


使用文件中的版本而不是jenkins提供的参数化构建。因为我的公网机器只有一台 没办法演示 在另一台机器上部署的过程了。。。

这块的发布其实可以用docker-compose  up -d或者 kubectl apply -f ***.yaml 。

修改main.go文件

package main

import (
	"dockerdemo/Init"
	"fmt"
	"github.com/jinzhu/configor"
	"io/ioutil"
	"net/http"
)

func main() {
	Init.Init(configor.Config{})

	http.HandleFunc("/", handlerHello)
	http.ListenAndServe(":8080", nil)
}

//Test
func handlerHello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "hello My Version Is: "+GetVersion())
}

func GetVersion() string {
	f, err := ioutil.ReadFile("Version")
	if err != nil {
		fmt.Println("read fail", err)
	}
	return string(f)
}

推送代码:

构建成功:

查看发布状态:

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_40165163/article/details/105335064
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-18 22:51:24
  • 阅读 ( 1193 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢