Docker + gitlab + jenkins создают систему CI/CD
1. Окружающая среда
Среда сборки — Centos 7.2, локальный тест — виртуальная машина, созданная мной, а тестовая среда — Centos 7.2 от Alibaba Cloud ECS.
2. Установите докер
Версия докера, с которой yum поставляется по умолчанию, относительно низкая, я обычно устанавливаю более новую версию докера.
Если вы установили докер с помощью yum
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
Установите библиотеку зависимостей докеров, добавьте официальный источник yum для докеров и установите докеры.
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce
Настройте докер для автоматического запуска и запускайте докер
systemctl enable docker
systemctl daemon-reload
systemctl start docker
После установки вы можете запросить установленную версию докера
docker --version
Docker version 18.09.6, build 481bc77156
После установки докера вам необходимо установить docker-compose
docker-compose — это инструмент оркестровки докеров, написанный на python.Все последующие службы запуска запускаются с помощью docker-compose, так что вам не нужно каждый раз вручную вводить параметры конфигурации команды запуска docker, упрощая операцию, и, наконец, вы можете Связанные сервисы, такие как gitlab и jenkins, написаны в одном и том же скрипте docker-compose для удобного совместного управления
Наша среда развертывания имеет среду python3, поэтому используйте pip3 для прямой установки docker-compose.
sudo pip3 install docker-compose
3. Установите гитлаб
собрать образ gitlab и запустить
Сначала в рабочей директории создайте скрипт docker-compose,
# /data/gitlab 是自定义映射gitlab存放配置参数及数据的目录,可以修改成自己需要的目录
cat > docker-compose.yml << EOF
version: '2'
services:
jenkins:
image: gitlab/gitlab-ce:12.0.3-ce.0
container_name: gitlab
ports:
- "9022:9022"
- "9080:80"
volumes:
- "/data/gitlab/cfg:/etc/gitlab"
- "/data/gitlab/logs:/var/log/gitlab"
- "/data/gitlab/data:/var/opt/gitlab"
restart: always
EOF
# 后台启动服务,第一次或自动pull镜像,添加 -d 表示后台启动
docker-compose up -d
настроить gitlab
Gitlab будет прослушивать порт 22 (соединение по ssh), порт 80 (http) и порт 443 (https), мы добавляем haproxy перед gitlab в качестве обратного прокси, haproxy прослушивает порт 443 для прокси на порт 9443, а docker делает это. не открывать все порты на 80. Возьмем порт 9443 (сопоставленный с портом 433)
Используйте vim для редактирования файла конфигурации gitlab, файл конфигурации gitlab по умолчанию /data/gitlab/cfg/gitlab.rb, предыдущий каталог — это каталог сопоставления, настроенный в докере
docker container exec -it gitlab bash
vim /etc/gitlab/cfg/gitlab.rb
# 以下为gitlab的配置项
# 配置 gitlab 显示 url 的内容,external_url配置为https的链接时,gitlab会自动创建监听443端口的nginx配置,证书需要放置在 /etc/gitlab/ssl 目录下,并且文件名为配置的域名.crt
# 例如配置域名为 https://git.xxx.com,则需要证书文件为 git.xxx.com.crt 及 git.xxx.com.key
external_url 'https://git.xxx.com'
# 配置邮箱信息
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'no-reply@xxx.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "hwsmtp.xxx.com"
gitlab_rails['smtp_port'] = 994
gitlab_rails['smtp_user_name'] = "no-reply@xxx.com"
gitlab_rails['smtp_password'] = "xxx"
gitlab_rails['smtp_domain'] = "qiye.xxx.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
# 配置完成后输入一下命令重新配置gitlab
sudo gitlab-ctl reconfigure
использовать гитлаб
Обычное использование gitlab может относиться к другой информации в Интернете, в основном к созданию пользователей, групп и проектов.
4. Установите Дженкинс
Установить образ Дженкинса
# /data/jenkins 是自定义映射jenkins存放数据的目录,可以修改成自己需要的目录,docker的映射是为了让jenkins能使用宿主环境下的docker
cat > docker-compose.yml << EOF
version: '2'
services:
jenkins:
image: jenkins/jenkins:lts
user: root
container_name: jenkins
ports:
- "8002:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/data/jenkins:/var/jenkins_home"
- "/usr/bin/docker:/usr/bin/docker"
restart: always
EOF
# 后台启动服务,第一次或自动pull镜像,添加 -d 表示后台启动,可以添加这个参数用于后台启动
docker-compose up
используя Дженкинс
Когда jenkins работает нормально, для первого входа в журнал запуска потребуется пароль администратора, как показано ниже:
Скопируйте этот пароль, затем войдите в систему по адресу хоста: 8002, чтобы получить доступ, вы войдете на страницу инициализации jenkins, введите пароль, который вы только что скопировали, а затем войдите на загрузочную страницу и установите рекомендуемые плагины в соответствии с руководством
После завершения плагина вы можете добавить учетную запись администратора, и после завершения добавления вы попадете на домашнюю страницу jenkins.
Установите плагины gitlab и docker
Найдите и установите подключаемые модули, связанные с gitlab и docker, в разделе «Системное администрирование» > «Управление подключаемыми модулями» > «Необязательные подключаемые модули».
gitlab добавить тестируемый проект
Вам нужно добавить тестовый элемент в gitlab, и проект должен иметь скрипт Dockerfile.Мы тестируем основной процесс push-тега gitlab, затем Jenkins запускает сборки для автоматического развертывания, развертывание проекта реализовано в виде генерации образа Docker и развертывание
Настроить пару ключей gitlab ssh
# 生成密钥对, 输入后一路回车,默认保存密钥在 ~/.ssh 目录下, id_rsa(私钥)及id_rsa.pub(公钥)
ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
Скопируйте информацию об открытом ключе в gitlab> Настройки пользователя> Ключи SSH> Добавить ключ SSH
Настройка задач сборки докеров
Добавить задачу в jenkins
Информация об исходном коде должна быть настроена в задаче.Здесь используется управляемый код gitlab, поэтому требуется адрес хранилища gitlab, и пользователь должен иметь соответствующие разрешения на хранилище.Поскольку информация о пользователе gitlab имеет не был настроен, выдается сообщение о том, что исходный код хранилища не может быть прочитан.
Нажмите кнопку «Добавить» за «Учетными данными», чтобы добавить информацию о сертификате, выберите имя пользователя SSH с закрытым ключом для типа, затем добавьте закрытый ключ ранее сгенерированного ключа, а затем нажмите «Добавить», чтобы завершить ввод.
Затем выберите только что добавленную аутентификационную информацию в управлении исходным кодом.Если нет проблем с добавлением, красное сообщение об ошибке исчезнет.
Добавьте шаг сборки в сборке, постройте образа докера
После завершения нажмите «Сохранить», чтобы завершить добавление задачи, а затем нажмите кнопку «Создать» на домашней странице, чтобы просмотреть эффект сборки.В первый раз Docker будет запущен для загрузки соответствующего незагруженного образа, что может быть медленным. После этого вы можете увидеть, что задача была успешно построена и просмотреть вывод консоли.Вы можете увидеть журнал вывода шелла во время сборки.Пока проблем с построением задачи нет.Далее gitlab push будет автоматически запускать сборку.
Настройте gitlab для автоматического запуска сборок
В триггере сборки задачи jenkins включите триггер push-события, затем нажмите «Создать секретный токен», чтобы сгенерировать адрес обратного вызова в «Дополнительно», и сохраните его.
Настройте Jenkins и сгенерированный токен для gitlab в проекте gitlab > Настройки > Интеграция и выберите тег события push
Затем создайте тег, jenkins автоматически создаст, когда получит обратный вызов, и вы можете запросить историю сборки на домашней странице.
После завершения сборки изображения автоматически отталкивается в облачный реестр Alibaba
После того, как вы сможете принять обратный вызов тега push, вам необходимо изменить встроенный сценарий оболочки.
# 定义变量,CONTAINER_NAME 是项目名称,对应阿里云镜像服务中的仓库名称,GIT_TAG 变量是自动获取本地git版本的tag
CONTAINER_NAME="citest"
GIT_TAG=`git describe --always --tag`
CONTAINER_FULL_NAME=${CONTAINER_NAME}-${GIT_TAG}
REPOSITORY=registry.cn-shanghai.aliyuncs.com/xxx/${CONTAINER_NAME}:${GIT_TAG}
# 构建Docker镜像
docker build -t $REPOSITORY -f Dockerfile .
# 推送Docker镜像,username 跟 password 为 阿里云容器镜像服务的账号密码
docker login --username=xxxxx --password=xxxxxx registry.cn-shanghai.aliyuncs.com
docker push $REPOSITORY
# 删除生成的image
docker images | grep citest | awk '{print $1":"$2}' | xargs docker rmi
# 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
Чтобы изменить эту версию, вы можете создать тег в gitlab, затем gitlab перезвонит jenkins, а затем jenkins начнет сборку и отправит сгенерированный образ в реестр Alibaba Cloud и очистит сайт.
В настоящее время завершен выпуск образа gitlab — — jenkins — — DockerRegistry, и функция распространения и развертывания выпущенного образа на каждую машину с помощью jenkins будет реализована в дальнейшем.