gitlab runner安装
- 选中一个项目或群组,点击设置,CI/CD,Runner
- 点击
显示Runner安装说明,即可看到安装代码
sh
# 下载
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# 权限设置
sudo chmod +x /usr/local/bin/gitlab-runner
# 创建用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# 安装服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
# 注册
sudo gitlab-runner register --url http://test.com/ --registration-token $REGISTRATION_TOKEN
# 最后选择一个输入(输入shell)
shell- gitlab查看当前可用runner,点击修改图标,把运行未标记的作业打勾,然后保存(如果不选中 运行未标记的作业, CI/CD 任务会一直被阻塞挂起)
- 安装nodejs并在文件 .bash_profile 配置
export PATH=$PATH:/home/gitlab-runner/node/bin - npm仓库登录
npm login --registry=http://test.com/repository/npm-host/
卸载
sh
# 停止服务
gitlab-runner stop
# 取消随机启动
chkconfig gitlab-runner off
# 卸载服务
gitlab-runner uninstall
# 清理文件
rm -rf /etc/gitlab-runner
rm -rf /usr/local/bin/gitlab-runner
rm -rf /usr/bin/gitlab-runner
rm -rf /etc/sudoers.d/gitlab-runner
# 删除用户
userdel -r gitlab-runnercicd示例
sh
image: node:latest
cache:
untracked: true
paths:
- node_modules/
stages:
- install
- build
- test
- deploy
install:
stage: install
script:
- npm run init
only:
changes:
- "package.json"
build:
stage: build
script:
- npm run build
artifacts:
paths:
- dist/
only:
changes:
- "package.json"
test:
stage: test
script:
- npm run test
only:
changes:
- "package.json"
deploy:
stage: deploy
script:
- npm run pub
only:
changes:
- "package.json"使用docker安装gitlab runner
docker-compose.yml文件
yml
name: gitlab-runner
services:
gitlab-runner:
image: gitlab/gitlab-runner:latest
container_name: gitlab-runner
restart: always
privileged: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./config:/etc/gitlab-runner
environment:
- TZ=Asia/Shanghai # 可选时区设置docker compose up -ddocker exec -it gitlab-runner gitlab-runner register --url http://test.com/ --registration-token token- 最后的执行器选择docker,然后输入默认镜像:node:lts
- 修改并发数,
concurrent = 2 - 如果需要构建容器镜像,config.toml配置中的runners.docker的
privileged = true是必要的 - 如果需要操作宿主机的docker,则需要添加
yaml
volumes = [
"/var/run/docker.sock:/var/run/docker.sock", # 容器内访问宿主机 Docker
"/www/docker/test:/www/docker/test", # 把宿主机目录挂进去
"/cache",
"/etc/localtime:/etc/localtime:ro", "/etc/timezone:/etc/timezone:ro" # 映射时区
]- 服务重启,
docker restart gitlab-runner
config.toml中的docker配置
yaml
[runners.docker]
tls_verify = false
image = "node:lts"
dns = ["8.8.8.8", "1.1.1.1"]
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
network_mtu = 0使用cicd发布项目
使用内部的docker发布,不影响外部的docker环境
yml
default:
tags:
- mas-server2
interruptible: true # 自动取消之前正在运行的 job
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "pedpl"' # 手动点击触发并且当前是dev分支
when: always
- when: never
layout:
stage: layout
image: docker:latest
services:
- name: docker:dind
command:
["--insecure-registry=test.com:5000", "--registry-mirror=https://docker.1ms.run", "--registry-mirror=https://dockerproxy.cn", "--registry-mirror=https://k-docker.asia", "--registry-mirror=https://docker.ketches.cn"]
variables:
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: tcp://docker:2375
script:
- |
echo "Cloning repository..."
git clone --branch $CI_BRANCH --depth=1 http://test:$CI_ACCESS_TOKEN@test.com/test.git
cd ./test
echo "? 登录 Nexus 私有镜像仓库"
docker login test.com:5000 -u test -p $CI_NEXUS_PASSWD
echo "? 开始构建 test:$CI_VISION"
docker build -t test.com:5000/test/test:$CI_VISION .
echo "? 开始推送 test:$CI_VISION 到私服"
docker push test.com:5000/test/test:$CI_VISION
when: manual使用cicd重启docker-compose服务
需要操作宿主机的docker
yml
restart-local:
stage: restart-local
image: docker:latest
script:
- cd /www/docker/test
- echo "? 登录 Nexus 私有镜像仓库"
- docker login test.com:5000 -u test -p $CI_NEXUS_PASSWD
- docker compose down
- docker compose pull
- docker compose up -d
tags:
- mas-server2-docker
when: manual