本文共 3751 字,大约阅读时间需要 12 分钟。
在本节中,我们将通过 GitLab CI 实现持续集成 (CI) 和持续交付 (CD) 的目标。GitLab CI 是一款功能强大的开源 CI/CD 工具,支持与 GitLab 集成,适合小型到大型项目使用。
# 安装依赖sudo yum install -y git vim gcc glibc-static telnetsudo yum install -y curl policycoreutils-python openssh-serversudo systemctl enable sshdsudo systemctl start sshdsudo yum install postfixsudo systemctl enable postfixsudo systemctl start postfix# 设置 GitLab 源sudo mkdir -p /etc/yum.repos.d/sudo tee /etc/yum.repos.d/gitlab-ce.repo <<-'EOF'/gitlab-ce name=GitLab CE Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/gpgcheck=0enabled=1EOF# 安装 GitLabsudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ce# 配置 GitLabsudo gitlab-ctl reconfigure
demo 组HelloworldREADME.md 文件sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]}EOFsudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repossudo yum install -y docker-ce# 安装 GitLab CI Runnercurl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bashsudo yum install gitlab-ci-multi-runner -y# 配置 Docker 权限sudo usermod -aG docker gitlab-runnerssudo service docker restartsudo gitlab-ci-multi-runner restart # 添加 GitLab 服务器 hostsudo vi /etc/hosts# 注册 Runnersudo gitlab-ci-multi-runner register
stages: - build - test - deployjob1: stage: test tags: [demo] script: - echo "I am job1" - echo "I am in test stage"job2: stage: build tags: [demo] script: - echo "I am job2" - echo "I am in build stage"job3: stage: deploy tags: [demo] script: - echo "I am job3" - echo "I am in deploy stage"
git clone http://gitlab.example.com/root/docker_hub_flask_demo.git
docker build -t flask-demo
docker run -d -p 5000:5000 flask-demo
docker pull andyshinn/dnsmasqdocker run -d -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN andyshinn/dnsmasq
docker exec -it dns-server /bin/shvi /etc/resolv.dnsmasqvi /etc/dnsmasqhostsdocker restart dns-server
sudo gitlab-ci-multi-runner register
docker pull python:2.7docker pull python:3.4
sudo gitlab-ci-multi-runner register
docker pull maven:latest
stages: [deploy]script: - docker build -t flask-demo - docker rm -f web || true - docker run -d -p 5000:5000 --name=web flask-demotags: [demo]only: master
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 registry:2
docker exec -it dns-server /bin/shvi /etc/dnsmasqhostsdocker restart dns-server
docker tag busybox registry.example.com:5000/busyboxdocker push registry.example.com:5000/busybox
docker-deploy: stage: deploy script: - docker build -t registry.example.com:5000/flask-demo . - docker push registry.example.com:5000/flask-demo - docker rm -f web || true - docker run -d -p 5000:5000 --name=web flask-demo tags: [demo] only: masterdocker-image-release: stage: release script: - docker build -t registry.example.com:5000/flask-demo:$CI_COMMIT_TAG . - docker push registry.example.com:5000/flask-demo:$CI_COMMIT_TAG tags: [demo] only: tags
通过以上步骤,我们可以实现从需求分析到代码开发、测试、构建、部署的完整 CI/CD 流水线,提升开发效率和代码质量。
转载地址:http://zund.baihongyu.com/