1、部署GitLab

1)容器启动

  1. docker run -d \
  2. --publish 8443:443 --publish 8880:80 --publish 8822:22 \
  3. --name gitlab \
  4. --restart always \
  5. --volume /data/gitlab/config:/etc/gitlab \
  6. --volume /data/gitlab/logs:/var/log/gitlab \
  7. --volume /data/gitlab/data:/var/opt/gitlab \
  8. --privileged=true \
  9. gitlab/gitlab-ce:latest

启动后等容器的状态为:healthy 时,访问IP:8880即可。

2)向远程仓库推送代码

先将本地ssh公钥放入GitLab
image.png
本地全局设置:

  1. git config --global user.name "Administrator"
  2. git config --global user.email "admin@example.com"

推送文件:

  1. cd directory
  2. git init
  3. git remote add origin ssh://git@d8d228290484/gitlab-instance-8c4eaf7e/Monitoring.git
  4. git add .
  5. git commit -m "Initial commit"
  6. git push -u origin master

会发现两个问题

问题一

git remote 命令中 ssh://git@d8d228290484 这个是容器ID,正常应该是gitlab的地址

解决方法:

修改 gitlab.rb
vim /data/gitlab/config/gitlab.rb
image.png
将这个 external_url 改成主机的 IP,不需要加端口.
随后重启gitlab容器
docker restart gitlab

问题二:

明明有在gitlab中放入公钥,但clone等操作远程仓库还是需要密码
image.png

解决方法:

GitLab 镜像启动后是占用容器的 22 端口,而我是使用宿主机的 8822 端口跟 GitLab 容器 22 端口进行的映射,主要是防止和我宿主机 22 端口冲突。想到问题的关键,解决就简单了,编辑 GitLab 配置文件,指定 SSH 端口为 8822 即可.
修改 gitlab.rb
vim /data/gitlab/config/gitlab.rb
image.png
将注释打开,修改为启动容器时映射的ssh端口
随后重启gitlab容器
docker restart gitlab

再重新打开页面就发现正常了,按照步骤继续操作即可
image.png

2、部署GitLab-Runner

1)容器启动

  1. docker run -d --name gitlab-runner --restart always \
  2. -v /data/gitlab-runner/config:/etc/gitlab-runner \
  3. -v /var/run/docker.sock:/var/run/docker.sock \
  4. gitlab/gitlab-runner:latest

2)注册Runner

  1. root@debian:~# docker exec -it gitlab-runner /bin/bash #进入容器
  2. root@6331c57dab0e:/# gitlab-runner register 开始注册runner

注册参考以下截图:
image.png
url地址和token可在以下页面查询,注册成功后即可看到runner
image.png

3、流水线执行

1)配置.gitlab-ci.yml

  1. stages:
  2. - build
  3. - test
  4. - deploy
  5. build_job:
  6. stage: build
  7. only:
  8. - master
  9. script:
  10. - echo "构建代码or基础环境中..."
  11. - echo "构建代码or基础环境已完成!"
  12. tags:
  13. - test
  14. test_job:
  15. stage: test
  16. only:
  17. - master
  18. script:
  19. - echo "自动化测试中..."
  20. - echo "自动化测试已完成!"
  21. tags:
  22. - test
  23. deploy_job:
  24. stage: deploy
  25. only:
  26. - master
  27. script:
  28. - echo "自动部署中..."
  29. - echo "自动部署已完成!"
  30. tags:
  31. - test

推送至仓库,流水线会自动执行。
会发现执行失败。

2)问题解决

如果是docker部署的gitlab,宿主机端口如果映射的不是80,则需更改环境external_url=域名,否则会报以下错误

  1. fatal: unable to access 'http://gitlab-ci-token:xxxxxx@ip/xxx/citest.git/': Failed to connect to xx.xx.xx.xxx port 80: Connection refused

vim /data/gitlab-runner/config.toml

  1. [[runners]]
  2. name = "test11"
  3. url = "http://xxxx"
  4. token = "xxxx"
  5. executor = "docker"
  6. #加上这个clone_url 参数,指定 url
  7. clone_url = "xxx"

然后重启runner容器,再重新执行流水线即可