Вступление
Эта статья является примером «Все как код» для создания стека ECS Fargate в AWS с использованием шаблона Cloud Formation через Jenkins.
Только Jenkins Master и кодовая база требуются для проверки этого потока. Проверьте URL Github, упомянутый ниже, чтобы обратиться к коду.
Вы также можете насладиться: лучшим из двух миров с AWS Fargate
Конфигурация Дженкинса
Для запуска конвейера требуется некоторая конфигурация главного узла Jenkins.
Установка Docker
Настройте установку Docker в Jenkins> Управление Jenkins> Глобальная конфигурация инструментов> Docker.
Учетные данные AWS
Необходимо сохранить учетные данные AWS в Jenkins> Учетные данные> Система> Глобальные учетные данные> Добавить учетные данные
Тогда это будет выглядеть под Jenkins> Credentials:
Быть знакомым с файлами и папками
В репозитории кода есть несколько файлов и папок, как показано ниже.
- Папка Templates — содержит файл YAML, в котором есть код Cloud Formation для создания ECS Fargate.
- Папка Parameters — содержит файл JSON и содержит все необходимые параметры Cloud Formation YAML
- Dockerfile — создается настроенный Dockerfile с возможностями AWS CLI и Cloud Formation Linting; нет необходимости устанавливать их специально на Jenkins Master.
- Jenkinsfile — конвейер Jenkins, который запускает все этапы, такие как «Опрос SCM», «Проверка шаблона CF и JSON» и «Создание стека формирования облака».
Подход
Есть так много подходов для достижения одной и той же задачи. Первые несколько CLI (AWSCLI и CFN-LINT) должны быть установлены на Jenkins Master, или доступно множество плагинов Jenkins для запуска параметров ECS Fargate.
Здесь используется подход, при котором весь код будет удален, а Jenkins Pipeline полностью написан на основе кода.
Модульный подход применяется для кода Cloud Formation, где шаблоны и параметры хранятся в отдельном каталоге, поэтому будет проще лучше обрабатывать код CF.
Настроенный Dockerfile позаботится о CLI AWS и CFN-LINT; нет необходимости устанавливать их на Дженкинс Мастер.
Jenkinsfile имеет 3 этапа:
- Извлечение кода из удаленного репозитория Git.
- Проверка шаблона CF и файла JSON перед созданием стека ECS Fargate. Шаблон CF будет проверен с использованием CFN-LINT, запущенного внутри контейнера. Однако модуль Python «json.tool» используется для проверки файла JSON. Если есть проблема с шаблоном CF и проверкой файла JSON, этот этап не пройден.
- Здесь будет инициировано создание стека ECS Fargate, идентификатор будет успешным, затем он вернет идентификатор стека.
Снимок кода Dockerfile :
Dockerfile
xxxxxxxxxx
1
FROM alpine:3.8
2
# Default evironment variables.
3
ENV AWS_DEFAULT_REGION us-east-1
4
ENV AWS_ACCESS_KEY_ID aws_key_id
5
ENV AWS_SECRET_ACCESS_KEY aws_Secret_key
6
COPY templates/New_ECS_Fargate_Para.yml .
7
COPY parameters/parameters.json .
8
RUN apk add -q --update \
9
&& apk add -q \
10
python py-pip py-setuptools \
11
ca-certificates \
12
&& pip install --upgrade pip \
13
&& pip install awscli \
14
&& pip install cfn-lint \
15
&& rm -rf /var/cache/apk/*
Снимок кода Jenkinsfile:
Groovy
xxxxxxxxxx
1
node() {
2
stage("POLL SCM") {
3
git credentialsId: 'gitlab', url: 'https://github.com/goyalvickey78/CF_ECS_FARGATE_Jenkins.git'
4
}
5
stage("CF Lintingi and Json Validation"){
6
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'ACCESS_ID', credentialsId: 'ECS_FARGATE', secretKeyVariable: 'ACCESS_KEY']]) {
7
docker.withTool('myDocker') {
8
//Buidling a docker images based on the dockerfile
9
sh "docker build -t awscli ."
10
//Validating the CF template with cfn-lint and container will be created & validate
11
sh "docker run --rm awscli cfn-lint New_ECS_Fargate_Para.yml"
12
//Validating the Parameter JSON file with Pyton json.tool module
13
sh "python -m json.tool parameters.json"
14
sh "docker rmi awscli"
15
}
16
}
17
}
18
stage("ECS Fargate CF Trigger") {
19
// Using the AWS credentials which are stored in Jenkins
20
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'ACCESS_ID', credentialsId: 'ECS_FARGATE', secretKeyVariable: 'ACCESS_KEY']]) {
21
//Using Docker tool configured in Jenkins
22
docker.withTool('myDocker') {
23
sh "docker build -t awscli ."
24
//Cloud Formation ECS Fargate Stack will be triggered with AWS CLI
25
sh "docker run -e \"AWS_ACCESS_KEY_ID=${ACCESS_ID}\" -e \"AWS_SECRET_ACCESS_KEY=${ACCESS_KEY}\" --rm awscli aws cloudformation create-stack --stack-name jfrogexample1 --template-body file://New_ECS_Fargate_Para.yml --parameters file://parameters.json"
26
//It will show all EC2 instsnces in AWS account
27
sh "docker run -e \"AWS_ACCESS_KEY_ID=${ACCESS_ID}\" -e \"AWS_SECRET_ACCESS_KEY=${ACCESS_KEY}\" --rm awscli aws ec2 describe-instances --output table"
28
sh "docker rmi awscli"
29
}
30
}
31
}
32
}
Создайте конвейерное задание в Jenkins и выполните задание. Это создаст стек ECS Fargate в AWS.
Однако этот настраиваемый Dockerfile предназначен не только для создания стека ECS Fargate, но также могут запускаться и другие команды, которые отлично работают с AWSCLI.
Например:
Оболочка
xxxxxxxxxx
1
docker run -e \”AWS_ACCESS_KEY_ID=${ACCESS_ID}\” -e \”AWS_SECRET_ACCESS_KEY=${ACCESS_KEY}\” — rm awscli aws ec2 describe-instances — output table
Он покажет все экземпляры EC2 в учетной записи AWS, и выходные данные будут отображены в табличном формате.
Имя региона для AWS также можно передать с помощью аргумента, например -e “region-name”
.
Найдите репозиторий кода в Github здесь CF_ECS_FARGATE_Jenkins и посмотрите мой профиль DZone здесь.
Продолжай учиться!!!
«Обучение никогда не исчерпывает ум». — Леонардо да Винчи
Дальнейшее чтение
Использование CloudFormation для настройки масштабируемых приложений
Модельно-ориентированный подход к CD: от «Все как код» до «Все как модель»