jenkins + docker 实现 golang 项目持续集成

jenkins + docker 实现 golang 项目持续集成

本文将介绍如何使用 jenkins + docker 时间 golang 项目的 持续集成

准备

  1. 安装 docker
  • 删除旧版本
    sudo yum remove docker \
                    docker-client \
                    docker-client-latest \
                    docker-common \
                    docker-latest \
                    docker-latest-logrotate \
                    docker-logrotate \
                    docker-engine
  • 国内 daocloud 一键安装
    curl -sSL https://get.daocloud.io/docker | sh
  1. 安装 docker-compose

    curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    # 确定 docker-compose 是否安装成功
    docker-compose version
  2. 安装 jenkins

  • 方法1 - docker 版本 jenkins

    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 \
    jenkinsci/blueocean

    说明

    • -u root : root 用户
    • --rm : 关闭时自动删除Docker容器 (可选)
    • -d : 后台执行
    • -p: 映射端口
    • -v: 配置挂载
    • jenkinsci/blueocean: 选择的 jenkins 容器版本
      更多请参考:jenkins 安装官方文档
  • 方法2 - jenkins 本地安装

      sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 
      sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    
      yum install jenkins

golang 项目 配置 Dockerfiledocker-compose.yml

  • Dockerfile
# 选择定制镜像
FROM golang:1.17-alpine AS builder

# 配置工作目录
WORKDIR /opt/app

# 配置环境
# CGO_ENABLED 是否支持 cgo 命令 默认 10 会把在目标文件中未定义的符号(外部函数)一起链接到可执行文件中。
ENV CGO_ENABLED 0
ENV GOPROXY https://goproxy.cn,direct
ENV GO111MODULE on

# 配置时间
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk add --no-cache upx ca-certificates tzdata

COPY ./go.mod ./
COPY ./go.sum ./
RUN go mod download
COPY . .

# 复制配置文件
COPY ./conf/test.toml ./conf

# 拷贝相应信息到容器中
RUN go build -ldflags "-s -w" -o server


# 多阶段构建 
FROM alpine as runner

COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

# 注意,多阶段构建时,下版本镜像不能从本地复制文件,而是从上一个构建镜像中复制
# 复制服务
COPY --from=builder /opt/app/server /opt/app/server
# 复制配置文件内容
COPY --from=builder /opt/app/conf /opt/app/conf


# 运行命令
CMD ["/opt/app/server"]

补充说明:
Dockerfile 命令说明 - 菜鸟教程
docker基础镜像(base image):scratch 、 busybox 、 alpine
构建 Go 应用 docker 镜像的十八种姿势

  • docker-compose.yml
version: "3"

services:
  web:
    build: .     # docker-compose 路径
    container_name: golang_project         # 项目名称
    volumes:    # 挂载目录(自定义配置)
      - /tmp/log:/opt/app/log
    ports:
      - "9091:9091"     #端口配置

补充说明:
docker-compose 配置说明

自定义脚本配置

vim /deploy/common.sh
  • 脚本内容
#!/bin/bash
export HOST=$1
export APP=$2

echo host:${HOST}
echo app:${APP}

# 这一步可以优化成远程登录
cd /root/.jenkins/workspace
ls -la
scp -r -P 22 ${APP}/ ${HOST}:/tmp/${APP}/

echo '开始远程操作'

ssh -tt ${HOST} " \
cd /tmp/${APP}; \
ls -la ; \
docker-compose stop; \
echo y | docker-compose rm -v; \
echo y | docker container prune; \
docker rmi ${APP}_web; \
docker image prune -f ; \

docker-compose up -d --no-deps; \
cd /tmp ; \
rm -rf ${APP}; \
"

echo '完成'

补充说明:
远程执行 单引号和双引号的区别
shell 教程

jenkins 项目配置

  1. 新建项目 - 选择第一个 Freestyle project
    jenkins  + docker 实现 golang 项目持续集成

  2. 进入该项目的 Configuration

  • 配置项目仓库

jenkins  + docker 实现 golang 项目持续集成

  • 配置

jenkins  + docker 实现 golang 项目持续集成

最后在 jenkins 中执行项目 - 构建成功

jenkins  + docker 实现 golang 项目持续集成

参考文档

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!