No primeiro de três artigos sobre como automatizar a instalação do Kubernetes com Jenkins, “Usando Jenkins com Kubernetes AWS, Parte 1”, criamos os artefatos de pré-requisito e criamos um nó Jenkins. Neste artigo de continuação, vamos configurar um Jenkinsfile para um pipeline Jenkins e criar um pipeline Jenkins. Este artigo tem as seguintes seções:
- Configurando um arquivo Jenkins
- Criando um pipeline do Jenkins
- Conclusão
Criando um arquivo Jenkins
Um Jenkins Pipeline é configurado em um arquivo de texto chamado Jenkinsfile na sintaxe Groovy. O arquivo Jenkins consiste em etapas . Uma “etapa” é uma etapa de construção, uma instrução para o Jenkins implementar. Dois tipos de etapas são suportados:nó e estágio . Um “nó” é uma etapa de nível superior que seleciona um(s) executor(es) no(s) agente(s) para executar o código. Um nó é uma máquina (mestre ou agente ) e um rótulo na etapa do nó deve corresponder a um rótulo na máquina para o nó selecionar a máquina. A etapa "nó" cria um espaço de trabalho , que é um diretório de arquivos, para um trabalho específico do Jenkins para processamento intensivo de recursos. A etapa “node” também agenda as etapas definidas nela em um slot de executor, adicionando-as à fila de compilação do Jenkins. Quando o slot do executor libera, as etapas agendadas são executadas na fila de construção.
Crie um arquivo chamado Jenkinsfile (sem sufixo). Um arquivo sem sufixo é criado no Windows com o seguinte comando no prompt de comando. Note o "." No final do comando, que deve ser incluído.
>notepad Jenkinsfile.
Na caixa de diálogo “Não é possível encontrar o arquivo Jenkins. Arquivo. Deseja criar um novo arquivo?” clique em Sim. Um arquivo Jenkins arquivo é criado. No arquivo Jenkins , crie uma etapa de nível superior chamada "node" na qual o rótulo "jenkins" é o mesmo que o valor Labels configurado no agente Jenkins.
node('jenkins') { }
Dentro da etapa do nó, adicione outras etapas para instalar um cluster Kubernetes. Adicionar etapas de estágio para instalar o Kubernetes. O procedimento de instalação do Kubernetes está bem documentado e não será discutido novamente. Para referência, “Introdução ao Kubernetes na Amazon Web Services (AWS)” discute o procedimento de instalação em detalhes. Os comandos do shell são executados com “sh”. A entrada do usuário para variáveis como número de trabalhadores e tipo de instância pode ser solicitada.
O kube-aws init O comando para inicializar a pilha do CloudFormation tem o nome do cluster codificado como “kubernetes-coreos-cluster” (nome arbitrário). O --external-dns-name está definido para um nome de domínio, NOSQLSEARCH.COM , que seria diferente para usuários diferentes. O par de chaves EC2 é definido com --key-name para kubernetes-coreos , que foi criado anteriormente. A chave KMS é definida como KeyMetadata.Arn string gerada anteriormente com o aws kms comando no --kms-key opção. O arquivo Jenkins gerado está listado abaixo:
node('jenkins') { stage 'set env' sh "sudo yum install gnupg2" sh "gpg2 --keyserver pgp.mit.edu --recv-key FC8A365E" sh "gpg2 --fingerprint FC8A365E" sh "wget https://github.com/coreos/coreos-kubernetes/releases/ download/v0.7.1/kube-aws-linux-amd64.tar.gz" sh "wget https://github.com/coreos/coreos-kubernetes/releases/ download/v0.7.1/kube-aws-linux-amd64.tar.gz.sig" sh "gpg2 --verify kube-aws-linux-amd64.tar.gz.sig kube-aws-linux- amd64.tar.gz" sh "tar zxvf kube-aws-linux-amd64.tar.gz" sh "sudo mv linux-amd64/kube-aws /usr/local/bin" sh "export AWS_ACCESS_KEY_ID=AKIAJGFCP4HUFH4453FA" sh "export AWS_SECRET_ACCESS_KEY=7BaiUETep3zPYrhrzKYpBdwkwVV16 BTT+pt2/EXF" sh "aws ec2 create-volume --availability-zone us-east-1c --size 10 --volume-type gp2" stage 'kube-aws init' deleteDir() sh "mkdir coreos-cluster" sh "cd coreos-cluster" sh "kube-aws init --cluster-name=kubernetes-coreos-cluster --external-dns-name=NOSQLSEARCH.COM --region=us-east-1 --availability-zone=us-east-1c --key-name=kubernetes-coreos --kms-key-arn='arn:aws:kms:us-east-1:672593526685:key/ f380f8b3-e93d-4a37-b87f-9ad1dbe909be '" stage "kube-aws render" WORKER_COUNT = input message: 'Number of Nodes', parameters: [[$class: 'StringParameterDefinition', defaultValue: '3', description: '', name: 'WORKER_COUNT']] INSTANCE_TYPE = input message: 'Instance Type', parameters: [[$class: 'StringParameterDefinition', defaultValue: 't2.micro', description: '', name: 'INSTANCE_TYPE']] sh "kube-aws render" sh "sed -i '''s/#workerCount: 1/workerCount: '''$WORKER_COUNT'''/''' cluster.yaml" sh "sed -i '''s/#workerInstanceType: m3.medium/workerInstanceType: '''$INSTANCE_TYPE'''/''' cluster.yaml" sh "kube-aws validate" stage "Archive CFN" step([$class: 'ArtifactArchiver', artifacts: 'cluster.yaml, stack-template.json,credentials/*,userdata/*', fingerprint: true]) stage "Deploy Cluster" shouldDeploy = input message: 'Should Deploy Cluster?', parameters: [[$class: 'ChoiceParameterDefinition', choices: 'yesno', description: '', name: 'Deploy']] if(shouldDeploy == "yes") { echo "Deploying Kubernetes cluster" sh "kube-aws up" sh "kube-aws status" step([$class: 'ArtifactArchiver', artifacts: 'kubeconfig', fingerprint: true]) } }
Criando um pipeline do Jenkins
No painel do Jenkins, clique em criar novos trabalhos para criar um Jenkins Pipeline, conforme mostrado na Figura 1.
Figura 1: Selecione “criar novos trabalhos” para criar um trabalho do Jenkins
Na interface do usuário, especifique um nome de pipeline (install-kubernetes ), por exemplo, e selecione Pipeline , conforme mostrado na Figura 2. Clique em OK.
Figura 2: Selecionando pipeline
O assistente de configuração de pipeline é iniciado, conforme mostrado na Figura 3.
Figura 3: Assistente de configuração de pipeline do Jenkins
Selecione o Pipeline aba. Na Definição campo, selecione o script de pipeline opção, como mostrado na Figura 4.
Figura 4: Guia de pipeline
Copie e cole o arquivo Jenkins listado anteriormente. Clique em Salvar , como mostrado na Figura 5.
Figura 5: Configurando o script de pipeline
Um novo Jenkins Pipeline é criado (veja a Figura 6).
Figura 6: Canal Jenkins criado
Inicialmente, o pipeline não está em execução e o Status não deve listar nenhum Build sendo iniciado ou executado, conforme mostrado na Figura 7.
Figura 7: Status do pipeline Jenkins
Conclusão
Neste artigo, configuramos um Jenkinsfile e usamos o Jenkinsfile para criar um pipeline Jenkins. No artigo 3 e de conclusão sobre como automatizar a instalação do Kubernetes com o Jenkins, executaremos o pipeline do Jenkins criado neste artigo para instalar o Kubernetes. Posteriormente, testaremos o cluster Kubernetes instalado.