这是我参与更文挑战的第3天,活动详情查看: 更文挑战
一、在物理机创建需要映射的文件夹
mkdir gitlab
cd gitlab/
mkdir config logs data
二、拉取镜像
docker pull gitlab/gitlab-ce
三、运行镜像
docker run -d -p 443:443 -p 8090:80 -p 222:22 --name gitlab --restart always -v /usr/local/gitlab/config:/etc/gitlab -v /usr/local/gitlab/logs:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
四、配置
作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb
vim /usr/local/gitlab/config/gitlab.rb
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://IP地址'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = 'IP地址'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口
五、重启
docker restart gitlab
六、解决问题成功
报502错误
1、发现8090端口被占用,重新run一个gitlub 端口为8091,未出现问题
2、gitlab没有真正启动成功,稍等一会
docker run -d -p 443:443 -p 8091:80 -p 222:22 --name gitlab --restart always -v /usr/local/gitlab/config:/etc/gitlab -v /usr/local/gitlab/logs:/var/log/gitlab -v /usr/local/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
gitlub1
七、添加账号
首先输入root用户的密码
其次注册新账号,注册完自动登录
八、创建项目
克隆地址
九、创建本地项目
配置好git,发现访问被拒绝。
原因是端口不一致默认是80端口,而我们改为8091端口,所以我们需要在clone地址加上:8091
要想一劳永逸,就修改配置文件。
1、进入容器
docker exec -it gitlab bash
2、修改配置文件
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
3、重启服务
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
十、关闭注册功能
不关闭注册功能,就会出现很多陌生账号。
1、以root用户登录,登录后
2、取消注册功能
十一 、配置gitlab—Runner
1、拉取镜像
docker pull gitlab/gitlab-runner:latest
2、创建容器
docker run -d --name gitlab-runner --restart always -p 8093:8093 -v /var/run/docker.sock:/var/run/docker.sock -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest
3、注册
输入的数据在gitlab
- 进入容器
docker exec -it gitlab-runner gitlab-runner register
- 输入gitlab域名
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
- 输入gitlab的token
Please enter the gitlab-ci token for this runner
xxx
- Runner的description ,可在gitlab修改
Please enter the gitlab-ci description for this runner
[hostname] my-runner
- Runner的标签,可修改
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tagEnter the [Runner executor](https://docs.gitlab.com/runner/executors/README.html):
- Enter the Runner executor:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
十二、测试
编写.gitlab-ci.yml 文件
stages:
- deploy
docker-deploy:
stage: deploy
# 执行Job内容
script:
# 安装python3
- wget https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tgz
- tar -xzvf Python-3.5.7.tgz
- add-apt-repository ppa:jonathonf/python-3.5.7
- ./configure --enable-optimizations
- make
- make install
#安装项目所需要的依赖
- pip3 install -r requirements.txt
# 开始执行python项目
- echo "build python....."
# 启动ziot项目,8094端口
- echo "done"
- pwd
- ls
- python3 server.py
sidebar: 'auto'
tags:
# 执行Job的服务器
- 94new
only:
# 只有在master分支才会执行
- master
十三、自动化部署python项目
使用CICD原理:当我们push项目到gitlab,就会触发.gitlab-ci.yml 文件,文件里面的 only:- maste表示,当push的分支为master则执行脚本。执行时通过sidebar: 'auto' tags:- shell选择已有的runner去执行。这时候他会把项目拉取到gitlab-runner中,例如文件夹/home/gitlab-runner/builds/76vGuzGu/0/wangscaler/,相同的runner文件夹的76vGuzGu地址相同。这时候我们通过ssh 将项目复制到我们的测试环境,所以需要配置ssh免密登录,当把项目拉取到测试环境后,我们可以启动supervisor来管理我们的项目。我们可以通过分支来选择部署的环境。
1、安装supervior
2、配置runner免密登录到生产机器
在gitlab-runner里切换至gitlab-runner用户配置免密登录,因为runner执行.gitlab-ci.yml时,使用的用户就是gitlab-runner。
docker exec -it gitlab-runner bash
su gitlab-runner
ssh-keygen -t rsa
ssh-copy-id -i /home/gitlab-runner/.ssh/id_rsa.pub root@服务器IP
输入密码后配置成功
ssh 生产机器IP地址
无需密码进入则成功
3、编写.gitlab-ci.yml 文件
stages:
- clean_env # 清理环境及杀死进程.
- deploy_src # 部署源码..
- install_dependency # 更新依赖.
- compile_python # 编译Python.
- restart_server # 重启服务.
- check_server # 检测服务.
variables:
BASE_DIR: "/wangscaler/"
job clean_env_job:
stage: clean_env
script:
- whoami
- ssh -o stricthostkeychecking=no root@服务器IP pkill supervisord || true
- ssh -o stricthostkeychecking=no root@服务器IP killall python3 || true
#- ssh -o stricthostkeychecking=no root@服务器IP killall /data/miniconda3/envs/go2cloud_platform/bin/python || true
- ssh -o stricthostkeychecking=no root@服务器IP rm -rf /project${BASE_DIR}*
sidebar: 'auto'
tags:
- shell
only:
- master
when: always
job deploy_src_job:
stage: deploy_src
script:
- whoami
- scp -r /home/gitlab-runner/builds/B8F5kKw7/0/WangScaler/${BASE_DIR}* root@服务器IP:/project${BASE_DIR}
sidebar: 'auto'
tags:
- shell
only:
- master
when: always
job install_dependency_job:
stage: install_dependency
script:
- whoami
- ssh -o stricthostkeychecking=no root@服务器IP pip3 install -r /project${BASE_DIR}requirements.txt
sidebar: 'auto'
tags:
- shell
only:
- master
when: always
job compile_python_job:
stage: compile_python
script:
- whoami
- ssh -o stricthostkeychecking=no root@服务器IP sleep 7
- ssh -o stricthostkeychecking=no root@服务器IP "cd /project/wangscaler && python3 CreateLicense.py 00:16:3e:10:34:74"
- ssh -o stricthostkeychecking=no root@服务器IP "cd /project/wangscaler && python3 setup.py"
- ssh -o stricthostkeychecking=no root@服务器IP python3 -m compileall -b /project${BASE_DIR}build/
- ssh -o stricthostkeychecking=no root@服务器IP find /product/wangscaler -name "server.py" -type f -print -exec rm -rf {} \;
sidebar: 'auto'
tags:
- shell
only:
- master
when: always
job restart_server_job:
stage: restart_server
script:
- whoami
- ssh -o stricthostkeychecking=no root@服务器IP sleep 7
- ssh -o stricthostkeychecking=no root@服务器IP supervisord -c /etc/supervisord.conf
- ssh -o stricthostkeychecking=no root@服务器IP ps -ef |grep supervisord |grep -v grep
sidebar: 'auto'
tags:
- shell
only:
- master
when: always
job check_server_job:
stage: check_server
script:
- whoami
- ssh -o stricthostkeychecking=no root@服务器IP sleep 7
- ssh -o stricthostkeychecking=no root@服务器IP ps -ef|grep "8193"
sidebar: 'auto'
tags:
- shell
only:
- master
when: always