jenkins + docker 实现 golang 项目持续集成
jenkins + docker 实现 golang 项目持续集成
本文将介绍如何使用 jenkins + docker 时间 golang 项目的 持续集成
准备
- 安装 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
安装 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
安装 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 项目 配置 Dockerfile
和 docker-compose.yml
- Dockerfile
# 选择定制镜像
FROM golang:1.17-alpine AS builder
# 配置工作目录
WORKDIR /opt/app
# 配置环境
# CGO_ENABLED 是否支持 cgo 命令 默认 1 ,0 会把在目标文件中未定义的符号(外部函数)一起链接到可执行文件中。
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 '完成'
jenkins 项目配置
新建项目 - 选择第一个
Freestyle project
进入该项目的
Configuration
- 配置项目仓库
- 配置
最后在 jenkins 中执行项目 - 构建成功
参考文档
本作品采用《CC 协议》,转载必须注明作者和本文链接