Jenkins流水线(pipeline)实战之:golang项目

第一步,jenkins基础环境搭建

1,安装jenkins

docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root  \
   -v /opt/jenkins_home:/var/jenkins_home \
   -v /var/run/docker.sock:/var/run/docker.sock   \
   -v /usr/bin/docker:/usr/bin/docker \
   -v /usr/local/maven:/usr/local/maven \
   -v /usr/local/jdk:/usr/local/jdk \
   -v /etc/localtime:/etc/localtime \
   --name jenkins jenkins/jenkins:lts

2.选择插件安装,不安装任何插件,后面我们会替换源,推荐安装,经常出现安装错误,因为源是国外的

Jenkins流水线(pipeline)实战之:golang项目_第1张图片

3,在插件替换源  http://mirror.esuni.jp/jenkins/updates/update-center.json

4,替换jenkins的配置文件的源

修改国内源:
cd /opt/jenkins_home/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
然后重启jenkins容器生效。

5,安装插件 Git  和 Pipeline,Publish Over SSH

5.1 设置连接26的信息,

Jenkins流水线(pipeline)实战之:golang项目_第2张图片

6.配置git和harbor 的凭证

Jenkins流水线(pipeline)实战之:golang项目_第3张图片

Jenkins流水线(pipeline)实战之:golang项目_第4张图片

Jenkins流水线(pipeline)实战之:golang项目_第5张图片

 

二,创建一个golang的项目

Jenkins流水线(pipeline)实战之:golang项目_第6张图片

2.1 传入pipeline的参数Branch函数,master分支,‘发布代码分支’注释

Jenkins流水线(pipeline)实战之:golang项目_第7张图片

2.2,写pipeline脚本

Jenkins流水线(pipeline)实战之:golang项目_第8张图片

生成批量部署脚本

Jenkins流水线(pipeline)实战之:golang项目_第9张图片

#!/usr/bin/env groovy

def registry = "10.1.1.11"
def project = "datacenter"
def app_name = "zhiyuecms"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://10.1.1.11:9999/golang/zhiyuecms.git"
def docker_registry_auth = "e94b8182-3024-42be-945b-1c6e3616e337"
def git_auth = "be4bef32-d981-489b-bf5c-fc85fe5eff71"

pipeline {
    agent any
    stages {
        stage('拉取代码'){
            steps {
              checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
            }
        }



        stage('构建镜像'){
           steps {
                withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                sh """
                  echo '
                    FROM golang:1.12 as build

					ENV GOPROXY https://goproxy.io
					ENV GO111MODULE on

					WORKDIR /go/cache

					ADD go.mod .
					RUN go mod tidy
					RUN go mod download

					WORKDIR /go/release

					ADD . .

					RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o grpcswagger main.go

					FROM scratch as prod

					COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
					COPY --from=build /go/release/grpcswagger /

					CMD ["/grpcswagger"]

                  ' > Dockerfile
                  docker build -t 10.1.1.11/datacenter/zhiyuecms:latest .
                  docker login -u ${username} -p '${password}' ${registry}
                  docker push 10.1.1.11/datacenter/zhiyuecms:latest
                """
                }
           } 
        }

        stage('部署到Docker'){
           steps {
              sshPublisher(publishers: [sshPublisherDesc(configName: 'test-10.1.1.26', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh /root/zhiyuecms.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}

 

你可能感兴趣的:(jenkins)