1、部署GitLab
1)容器启动
docker run -d \--publish 8443:443 --publish 8880:80 --publish 8822:22 \--name gitlab \--restart always \--volume /data/gitlab/config:/etc/gitlab \--volume /data/gitlab/logs:/var/log/gitlab \--volume /data/gitlab/data:/var/opt/gitlab \--privileged=true \gitlab/gitlab-ce:latest
启动后等容器的状态为:healthy 时,访问IP:8880即可。
2)向远程仓库推送代码
先将本地ssh公钥放入GitLab
本地全局设置:
git config --global user.name "Administrator"git config --global user.email "admin@example.com"
推送文件:
cd directorygit initgit remote add origin ssh://git@d8d228290484/gitlab-instance-8c4eaf7e/Monitoring.gitgit add .git commit -m "Initial commit"git push -u origin master
问题一
git remote 命令中 ssh://git@d8d228290484 这个是容器ID,正常应该是gitlab的地址
解决方法:
修改 gitlab.rbvim /data/gitlab/config/gitlab.rb
将这个 external_url 改成主机的 IP,不需要加端口.
随后重启gitlab容器docker restart gitlab
问题二:
明明有在gitlab中放入公钥,但clone等操作远程仓库还是需要密码
解决方法:
GitLab 镜像启动后是占用容器的 22 端口,而我是使用宿主机的 8822 端口跟 GitLab 容器 22 端口进行的映射,主要是防止和我宿主机 22 端口冲突。想到问题的关键,解决就简单了,编辑 GitLab 配置文件,指定 SSH 端口为 8822 即可.
修改 gitlab.rbvim /data/gitlab/config/gitlab.rb
将注释打开,修改为启动容器时映射的ssh端口
随后重启gitlab容器docker restart gitlab
2、部署GitLab-Runner
1)容器启动
docker run -d --name gitlab-runner --restart always \-v /data/gitlab-runner/config:/etc/gitlab-runner \-v /var/run/docker.sock:/var/run/docker.sock \gitlab/gitlab-runner:latest
2)注册Runner
root@debian:~# docker exec -it gitlab-runner /bin/bash #进入容器root@6331c57dab0e:/# gitlab-runner register 开始注册runner
注册参考以下截图:
url地址和token可在以下页面查询,注册成功后即可看到runner
3、流水线执行
1)配置.gitlab-ci.yml
stages:- build- test- deploybuild_job:stage: buildonly:- masterscript:- echo "构建代码or基础环境中..."- echo "构建代码or基础环境已完成!"tags:- testtest_job:stage: testonly:- masterscript:- echo "自动化测试中..."- echo "自动化测试已完成!"tags:- testdeploy_job:stage: deployonly:- masterscript:- echo "自动部署中..."- echo "自动部署已完成!"tags:- test
2)问题解决
如果是docker部署的gitlab,宿主机端口如果映射的不是80,则需更改环境external_url=域名,否则会报以下错误
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
[[runners]]name = "test11"url = "http://xxxx"token = "xxxx"executor = "docker"#加上这个clone_url 参数,指定 urlclone_url = "xxx"
然后重启runner容器,再重新执行流水线即可
