:::info 视频演示 https://www.bilibili.com/video/BV1U341117zE/ ::: devops.webp

准备工作

docker

  • http访问,jenkins中的docker插件调用实现 build 和 push
  1. 修改 docker.service

    vi /usr/lib/systemd/system/docker.service

在 ExecStart=/usr/bin/dockerd -H fd:// —containerd=/run/containerd/containerd.sock 后添加 -H unix:///var/run/docker.sock -H 0.0.0.0:2375

  1. 重启 docker 服务
    1. systemctl daemon-reload && systemctl restart docker

    gitea

  • 注册用户 jenkins4gitea
  • jenkins4gitea 添加 token,用于 jenkins 从 gitea pull 代码
  • gitea创建代码仓库 hello
  • 添加 jenkins 读取权限(私有项目)

image.pngimage.png

image.png image.png

jenkins

  • 注册用户 hf
  • 用户 hf 添加凭证
  • gitea 访问 (上面gitea中创建的token)
  • 镜像仓库访问 hub.haifengat.com (admin/Harbor12345)

image.png image.png

  • gitea server,通过 token 凭证 git pull 代码

image.png image.png

示例代码

git clone

  1. git clone http://172.19.129.62:3000/jrcxb/hello.git

main.go

  1. package main
  2. import "fmt"
  3. func main() {
  4. fmt.Print("hello jenkins.")
  5. }

Dockerfile

  1. # docker build -t ${PWD##*/} --build-arg appName=${PWD##*/} .
  2. # 以目录作为应用名
  3. FROM golang:alpine AS build
  4. # 应用名
  5. ARG appName
  6. # 为我们的镜像设置必要的环境变量
  7. ENV GO111MODULE=on \
  8. CGO_ENABLED=0 \
  9. GOOS=linux \
  10. GOARCH=amd64 \
  11. GOPROXY="https://goproxy.io,direct"
  12. # 工作目录
  13. WORKDIR /app
  14. # 将代码复制到容器中(若包含go.mod go.sum 则注释下面的 go mod 一行)
  15. COPY . .
  16. # 将我们的代码编译成二进制可执行文件
  17. RUN go mod init ${appName} && go mod tidy
  18. RUN go build -o ${appName}
  19. RUN echo "#!/usr/bin/env sh" > ./run.sh
  20. RUN echo "/app/${appName}" >> ./run.sh
  21. FROM alpine:3 as final
  22. # 声明,否则会为空
  23. ARG appName
  24. WORKDIR /app
  25. COPY --from=build /app/${appName} .
  26. COPY --from=build /app/run.sh .
  27. # 启动容器时运行的命令
  28. ENTRYPOINT [ "sh", "./run.sh"]

git push

  1. git add *
  2. git commit -m "first time"
  3. git push --set-upstream origin master # 输入帐号密码

Pipline

Jenkins 创建 gitea 推送触发任务

image.png

测试-立即构建

错误

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?

权限问题

sudo chown -R 1000:1000 /var/run/docker.sock (重启后失效) sudo chmod a+rw /var/run/docker.sock (重启后失效)

使用用 tcp://xxx.xxx.xxx.xxx:2375 调用 docker

查看输出

image.png

应用部署

新增 ssh 服务器

image.png image.png

应用服务器部署

  1. docker rm -f hello # 删原有容器
  2. docker rmi -f hub.haifengat.com/demo/hello:20211005 # 删除原有镜像, 以拉取最新版本
  3. docker run --name hello -it hub.haifengat.com/demo/hello:20211005 > /home/log.txt # 部署执行

image.png

实践-触发构建

  1. # 修改代码
  2. vi main.go
  3. # 提交&推送
  4. git commit -a -m "test auto deploy"
  5. git push
  6. # 检查
  7. cat /home/log.txt