ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jenkins部署go项目

2022-06-29 19:37:14  阅读:134  来源: 互联网

标签:run 部署 var -- params go jenkins docker


docker安装jenkins

docker run -u root  -d  -p 8888:8080 -v /docker/jenkins_home:/var/jenkins_home --privileged=true  --name jenkins    jenkins/jenkins:latest
 
run:
	docker run -u root -d 	-p 8088:8080 	-p 50000:50000 \
	--privileged=true -e TZ="Asia/Shanghai" \
	-v /Users/chen/data/docker/jenkins:/var/jenkins_home \
	-v /var/run/docker.sock:/var/run/docker.sock \
	-v /usr/local/bin/docker:/usr/bin/docker \
	--name jenkins \
	jenkins/jenkins:lts

说明:
-v /Users/chen/data/docker/jenkins:/var/jenkins_home 挂载jenkins的home目录,jenkins安装的插件,拉取的项目代码都在这个目录里
-v /var/run/docker.sock:/var/run/docker.sock-v /usr/local/bin/docker:/usr/bin/docker 挂载这两个文件就能在docker容器内访问宿主机上的docker。官方文档里有说明

容器内安装必备软件

#等待3分钟后,我们进入Jenkins容器内    
 docker exec -it jenkins /bin/bash
#更新                          
apt-get update
#安装GCC跟VIM :                
apt install vim            
apt install gcc

jenkins安装插件

系统管理=》插件管理

查询pipeline,docker pipeline

构建自动化项目

创建凭据

点击添加凭据

获取凭据id记录下来

创建流水线任务

配置流水数据

创建后面脚本中需要用到的参数

我这创建了四个参数:

  • 部署环境:profile
  • 服务部署ip:host
  • 连接服务器端口:port
  • 连接服务器用户名:username
  • 部署服务端口:expose_port
选择git地址及用户

  • 1是项目的git地址
  • 2是刚刚配置的凭据
  • 3是git代码分支
  • 4是脚本路径(一般是Jenkinsfile,这个目录需要在跟目录下)

创建Jenkinsfile

Jenkinsfile就是我们需要运行的阶段视图具体写法,Jenkinsfile创建在根目录

pipeline {
    agent any

    environment {
        PROJECT = 'go-demo'
        REPOSITROY_URL = 'docker域名'+'/godemo'
        VERSION = '1.0.0'
    }

    stages {
        stage('登录docker') {
            steps {
                withCredentials([usernamePassword(credentialsId: 刚刚我们生成的凭据, passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
                    sh "docker login docker服务器 --username=${USERNAME} --password=${PASSWORD}"
                }
            }
        }

        stage('打包镜像') {
            steps {
                   sh 'docker build -t ${REPOSITROY_URL}:${VERSION} .'
            }
        }

        stage('上传镜像') {
            steps {
                sh 'docker push ${REPOSITROY_URL}:${VERSION}'
            }
        }
        stage('部署服务') {
            steps {
                sh runCommand() + "sudo docker stop ${PROJECT}-${params.profile} || true"
                sh runCommand() + "sudo docker rm ${PROJECT}-${params.profile} || true"
                sh runCommand() + "sudo docker rmi ${REPOSITROY_URL}:${VERSION} || true"
                sh runCommand() + dockerRun()
            }
        }
    }
}

String runCommand() {
    def command = "sshpass  ssh -p ${params.port} -o \"StrictHostKeyChecking no\" ${params.username}@${params.host} "
    echo "command: ${command}"
    return "${command}";
}

String dockerRun() {
    String dockerRun = "sudo docker run --name ${PROJECT}-${params.profile} -p ${params.expose_port}:${params.expose_port} -d --network host ${REPOSITROY_URL}:${VERSION} "
    return dockerRun;
}

创建Dockerfile

FROM golang:alpine

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
    GOPROXY=https://goproxy.cn,direct

# 移动到工作目录:/build
WORKDIR /build
# 时区设置成当前时区
RUN apk add --no-cache tzdata
ENV TZ="UTC"
# 将代码复制到容器中
COPY . .
RUN go mod tidy
# 将我们的代码编译成二进制可执行文件  可执行文件名为 app
RUN go build -o app .

# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist

# 将二进制文件从 /build 目录复制到这里
RUN cp /build/app .

# 声明服务端口
EXPOSE 8081

ENTRYPOINT ["/dist/app"]

项目目录:

构建项目

遇到的问题

  1. 一直不拉取git,不走Jenkinsfile

    原因是插件安装有问题,需要去建议插件安装pipeline

  2. 部署服务不成功

    1. 需要注意加空格

  1. root@172.30.14.202: Permission denied (publickey)

    原因:由于远程连接的服务器没有当前服务器的公钥(publickey)

    解决:

    1. 进入服务器,在进jenkins服务器

      docker exec -it jenkins bash
      
    2. 获取公钥

      ls -a
      cd .ssh/
      cat id_rsa.pub
      
    3. 进入目标服务器,添加供钥,把公钥加在文件末尾即可

      ls -a
      cd .ssh/
      vim authorized_keys
      

标签:run,部署,var,--,params,go,jenkins,docker
来源: https://www.cnblogs.com/java5wanping/p/16424640.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有