首先说一下我的环境,首先准备一台ubuntu18.4虚拟机,安装docker, 然后用docker 安装gitlab[大家可以参考 Ubuntu Docker搭建GitLab以及常规配置使用] 和harbor【大家可以参考 Ubuntu18 安装搭建Harbor】,我尝试过通过docker来安装jenkins,jenkins容器里面在安装docker和harbor通信,但是后面还是遇到很多问题 不好解决, docker默认是无状态的 需要保存的数据都要挂在的虚拟机上, 比如jenkins里面下载的golang镜像,jenkins重启就丢失了, 所以后面彩用jenkins直接安装到虚拟机上。
为了省事我们把必要脚本都放到项目里面,项目结构如下:
我们的Dockerfile文件如下:
FROM golang:1.15.6 RUN mkdir -p /app WORKDIR /app ADD main /app/main EXPOSE 8080 CMD ["./main"]
build.sh文件是把docker镜像推到harbor上的【已经测试通过】
#!/bin/bash #cd $WORKSPACE export GOPROXY=https://goproxy.io #根据 go.mod 文件来处理依赖关系。 go mod tidy # linux环境编译 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main # 构建docker镜像,项目中需要在当前目录下有dockerfile,否则构建失败 docker build -t gavintest . docker tag gavintest 192.168.100.30:8080/go/gavintest:${BUILD_NUMBER} docker push 192.168.100.30:8080/go/gavintest docker rmi gavintest docker rmi 192.168.100.30:8080/go/gavintest:${BUILD_NUMBER} cd .. #删除项目文件夹 rm -rf gavintest
buildtest.sh是在jenkins上直接运行docker实例
#!/bin/bash #cd $WORKSPACE export GOPROXY=https://goproxy.io #根据 go.mod 文件来处理依赖关系。 go mod tidy # linux环境编译 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main #删除docker docker stop gavintest docker rm gavintest docker rmi gavintest # 构建docker镜像,项目中需要在当前目录下有dockerfile,否则构建失败 docker build -t gavintest . #挂载资源文件夹 运行docker docker run -d --name gavintest -p 9999:8080 -v $(pwd)/conf:/app/conf gavintest
在jenkins上创建一个 自由风的项目 gavintest, 调用shell脚本:
cd /var/lib/jenkins/workspace/gavintest chmod 777 buildtest.sh ./buildtest.sh
1.jenkins账号运行docker 没有权限提示 :dial unix /var/run/docker.sock: connect: permission denied 解决办法
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 docker ps #测试当前用户是否可以正常使用docker命令 #把jenkins添加到docker的group里就可以了。 sudo usermod -a -G docker jenkins #重启jenkins。 systemctl restart jenkins
2.jenkins在王harbor上推送失败,提示push: unauthorized to access repository,解决办法
#首先登陆harbor docker login 192.168.100.30:8080 查看.docker/config.json 文件 root@server:~# cat .docker/config.json { "auths": { "192.168.100.30:8080": { "auth": "Z2F2aW46R2F2aW4xMjM=" } }, "HttpHeaders": { "User-Agent": "Docker-Client/19.03.6 (linux)" } } #把.docker复制到/var/lib/jenkins目录下 cp -r .docker/ /var/lib/jenkins/ 修改文件夹权限 chown -R jenkins.jenkins .docker cd /var/lib/jenkins/ chown -R jenkins.jenkins .docker systemctl restart jenkins
jenkins自动化部署go【docker+jenkins+go+gitlab+harbor】1
原文:https://www.cnblogs.com/majiang/p/14461687.html