Вступление
В этой статье демонстрируются шаги, необходимые для размещения приложения Node с Oracle Kubernetes Engine (OKE) с использованием Travis Continuous Integration Server. Travis CI очень тесно связан с GitHub, поэтому любой созданный вами публичный репозиторий будет автоматически виден в Travis.
Это только демонстрационный пример кода разработки. Вам необходимо оптимизировать код (приведенный в этой статье) или написать дополнительный код, чтобы сделать его производственным качеством. Вы можете получить доступ к примеру кода, который используется в этой статье, здесь: https://github.com/kumarsirish/sample-travis-oke .
Предпосылки
- Вы должны иметь учетную запись в Oracle Cloud Infrastructure (OCI) и иметь доступ к службам разработчика, таким как Oracle Container Registry (OCIR) и OKE. Получите учетную запись на https://www.oracle.com/index.html, если у вас ее нет.
- У вас должен быть настроен и запущен кластер OKE ( https://www.oracle.com/webfolder/technetwork/tutorials/obe/oci/oke-full/index.html ).
- У вас должен быть установлен интерфейс командной строки OCI ( https://oracle.github.io/learning-library/oci-library/DevOps/OCI_CLI/OCI_CLI_HOL.html ).
- Вы должны иметь учетную запись в GitHub.
- Вы должны были зарегистрироваться на Travis.
- Среда выполнения JavaScript Node.js установлена в вашей среде разработки ( https://nodejs.org/en/ ).
Обзор трубопровода
Любая регистрация в коде проекта GitHub вызовет автоматическую сборку в Travis , которая создаст образ проекта и отправит его в OCIR . На этапе развертывания сборки образ будет извлечен из OCIR и развернут в OKE .
GitHub и Travis могут быть сконфигурированы для сборок на основе функциональных ветвей или сборок на основе мастер- ветвей. Любая ветвь при объединении с мастером автоматически запускает сборку в Трэвисе.
Загрузите проект ReactJS
Bootstrap ReactJS — пример сэмплового проекта.
Оболочка
x
1
$ npx create-react-app sample-travis-oke
2
$ cd sample-travis-oke
3
# Change src/App.js for any custom message
4
# Run optimized build
5
$ npm run build
6
$ npm install -g serve
7
# ReactJS Apps can be hosted by Nginx or lightweight "serve" Application. For this tutorial we will be using nginx server but to check the created application you can run "serve" command below to verify the application.
8
$ serve -s build
Контейнер проекта
Проект будет упакован вместе со следующими инструментами:
- OCI CLI.
- команда kubectl.
Убедитесь, что у вас есть COMPARTMENT_ID
стоимость аренды OCI , и я предполагаю, что ваша среда разработки находится за корпоративным брандмауэром, поэтому установите переменные HTTP_PROXY
и NPM_REGISTRY
соответственно.
Ниже приведен пример Dockerfile, который создает приложение и также развертывает его в ОКЕ.
Создайте Dockerfile в корневом каталоге проекта.
Dockerfile
xxxxxxxxxx
1
FROM oraclelinux:7-slim as builder
2
ARG NPM_REGISTRY
3
ARG HTTP_PROXY
4
ARG COMPARTMENT_ID
5
WORKDIR '/app'
6
COPY package.json .
8
# optional line below
9
COPY ol7_developer_nodejs8.repo /etc/yum.repos.d/
10
RUN echo proxy=${HTTP_PROXY} >>/etc/yum.conf
11
RUN yum -y update && \
13
rm -rf /var/cache/yum && \
14
yum -y install nodejs
15
RUN yum -y install python3
17
RUN npm config set registry ${NPM_REGISTRY}
19
RUN npm install
20
COPY . .
21
RUN npm run build
22
RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.0/bin/linux/amd64/kubectl \
24
&& chmod +x ./kubectl \
25
&& rm -rf /tmp/*
26
ENV PATH="/app:/bin:/root/bin:${PATH}"
28
ENV KUBECONFIG="/root/.kube/oci_config"
29
ENV LC_ALL="en_US.utf8"
30
ENV C ${COMPARTMENT_ID}
31
RUN curl -LO https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh \
33
&& chmod +x ./install.sh \
34
&& ./install.sh --accept-all-defaults
35
EXPOSE 5000
37
ENTRYPOINT ["/bin/bash"]
38
CMD []
Убедитесь, что изображение создается с помощью следующей команды:
Оболочка
xxxxxxxxxx
1
#create the docker image
2
$ docker build --build-arg http_proxy=<proxy> --build-arg NPM_REGISTRY="https://registry.npmjs.org/" --build-arg COMPARTMENT_ID="$COMPARTMENT_ID" -t sample-travis-oke:travis
Проверьте контейнер локально, используя следующую команду:
Оболочка
xxxxxxxxxx
1
#Run the container
2
$ docker run -v "<local_oci_config_path>/.oci":"/root/.oci" -v "<local_kube_config_path>/.kube":"/root/.kube" -p 5000:3000 sample-travis-oke:travis /bin/serve -s build
Приложение должно быть запущено. Получите доступ к приложению через порт 3000 localhost (http: // localhost: 3000)
Нажмите на GitHub
Этот шаг необходим для интеграции проекта с Travis CI. Создайте репозиторий проекта « sample-travis-oke » в GitHub и поместите существующий код в этот репозиторий.
Оболочка
xxxxxxxxxx
1
$ cd sample-travis-oke
2
$ git init
3
$ git remote add origin https://github.com/<your_account>/sample-travis-oke.git
4
$ git add .
5
$ git commit -m "First Commit"
6
$ git push origin master
7
Не стесняйтесь проверить информационную страницу GitHub для получения более подробной информации: https://help.github.com/en/github/importing-your-projects-to-github/adding-an-existing-project-to-github-using- заместитель командной строки
Настройка Travis CI
Давайте настроим Непрерывную Интеграцию в Travis CI для этого проекта. Вот что мы требуем от Трэвиса:
- Сборка запускается автоматически всякий раз, когда код сливается в ветку " master ".
- Build должен создать образ Docker и отправить образ Docker в реестр контейнеров OCI (OCIR).
- Извлеките образ из OCIR и нажмите OCI OKE (Oracle Kubernetes Engine).
Чтобы сделать все это, во-первых, вам нужно войти с Travis CI с вашей учетной записью GitHub. Таким образом, все ваши публичные репозитории GitHub будут автоматически отображаться на Travis. Вы можете проверить только что созданный репозиторий sample-travis-oke с https://travis-ci.org/account/repositories . Нажмите « Синхронизировать учетную запись » и обновите страницу, если вы не видите хранилище.
После синхронизации с GitHub Webhook автоматически появится в проекте GitHub, как показано ниже:
Настройте OCIR в своей аренде, если вы еще этого не сделали. Для получения более подробной информации перейдите по этой ссылке: https://www.oracle.com/webfolder/technetwork/tutorials/obe/oci/registry/index.html .
В настройках проекта (например , https://travis-ci.org/<user_name>/sample-travis-oke/settings ), добавить OCIR_USER
, OCIR_PASSWORD
, и в COMPARTMENT_ID
качестве секретных ключей. Ваш экран настроек проекта Travis должен быть похож на ниже:
Для каждого проекта Travis требуется файл .travis.yml в корне проекта. В настоящее время развертывание OKE не поддерживается в готовом виде от Travis, поэтому нам нужно написать свои собственные шаги развертывания. Убедитесь, что настройки OCI и Kube являются частью образа.
Пример файла Трэвиса для построения изображения и передачи в ОКЕ приведен ниже:
xxxxxxxxxx
1
language generic
2
sudo required
3
services
4
docker
5
before_install
6
docker build --build-arg NPM_REGISTRY=$ NPM_REGISTRY --build-arg COMPARTMENT_ID=$C
7
-t $ OCIR_URL /sample-travis-oke:travis .
8
docker login $ OCIR_URL -p $ OCIR_PASSWORD -u $ OCIR_USER
9
docker push $ OCIR_URL /sample-travis-oke:travis
10
script
11
docker run $ OCIR_URL /sample-travis-oke:travis -c /bin/serve -s build
12
deploy
13
kubectl cluster-info
14
kubectl apply -f k8s
15
kubectl get pods
16
kubectl get services
Обратите внимание на команды kubectl, используемые в разделе deploy . Этот раздел отличается для разных облачных провайдеров. Файлы конфигурации OCI и файл конфигурации Kubernetes должны быть защищены. Travis предоставляет механизм для шифрования таких файлов и его внутреннего использования при сборке, не делая его содержимое общедоступным. Для этого вам нужно установить Travis CLI в вашей среде разработки и использовать его для шифрования файлов конфигурации. Обратитесь к https://docs.travis-ci.com/user/encrypting-files#Encrypting-multiple-files для получения дополнительной информации.
Оболочка
xxxxxxxxxx
1
$ sudo gem install travis
2
$ tar cvf secrets.tar .oci/* .kube/*
3
$ travis encrypt-file secrets.tar --add
--add
Опция автоматически обновляет .travis.yml файл. Вы можете убедиться, что ключи, используемые для шифрования, уже являются частью настроек вашего проекта в Travis.
Настроить развертывание OKE
Создайте файлы создания модуля и службы для проекта для OKE. Это так же, как и любые другие файлы Kubernetes, и здесь нет ничего хорошего. Однако убедитесь, что у вас настроена конфигурация OCI, настроен ваш закрытый ключ или токен аутентификации и конфиг Kubernetes для OKE. Шаги для этого уже приведены выше. Образцы файлов Kubernetes для этого проекта будут выглядеть следующим образом:
YAML
xxxxxxxxxx
1
apiVersion v1
2
kind Pod
3
metadata
4
name app-oci-oke-pod
5
labels
6
component web
7
spec
8
containers
9
name app-oci-oke
10
image OCIR_URL /sample-travis-oke travis
11
command"/bin/serve -s build"
12
ports
13
containerPort5000
14
------------------------------------
15
apiVersion v1
16
kind Service
17
metadata
18
name oci-oke-app-service
19
spec
20
type LoadBalancer
21
selector
22
component web
23
ports
24
port3000
25
targetPort5000
Развернуть на ОКЕ
В рамках этапа развертывания сборки Travis в контейнере выполняются следующие шаги:
Оболочка
xxxxxxxxxx
1
kubectl cluster-info
2
kubectl apply -f k8s
3
kubectl get pods
4
kubectl get services
Продолжайте давать kubectl get services
команду, пока внешний IP не выставлен:
Простой текст
xxxxxxxxxx
1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
2
oci-oke-app-service LoadBalancer 1x.x.x4.x 1x.x.x.198 3000:31305/TCP 110m
Используйте внешний IP-адрес для загрузки приложения.
Congrats! Ваше приложение ReactJS теперь работает на OKE, развернутом через Travis.