Neste tutorial, mostramos como configurar o Jenkins no Google Kubernetes Engine (GKE) para orquestrar o pipeline de entrega de software.
Objetivos
- Criar um cluster do Kubernetes com o GKE.
- Instalar o Jenkins usando o Helm.
- Conectar ao Jenkins.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Google Kubernetes Engine
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the GKE APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Enable the GKE APIs.
Como preparar o ambiente
Primeiro, prepare o ambiente de implantação.
Ative o Cloud Shell. O Cloud Shell fornece acesso à linha de comando no Console do Google Cloud e inclui o SDK do Cloud, além de outras ferramentas necessárias para o desenvolvimento do Google Cloud. O provisionamento do Cloud Shell pode levar vários minutos.
Após a conclusão do processo, você verá a saída a seguir:
Welcome to Cloud Shell! Type "help" to get started.
Clone o código de amostra.
git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
O repositório Git contém os manifestos Kubernetes usados para implantar o Jenkins. Os manifestos e as respectivas configurações estão descritos em Como configurar o Jenkins para o GKE.
Acesse o diretório do código de amostra:
cd continuous-deployment-on-kubernetes
crie um cluster do GKE;
Veja como provisionar um cluster do GKE. A conclusão desta etapa pode levar vários minutos.
gcloud container clusters create jenkins-cd \ --zone us-east1-d --scopes cloud-platform
O escopo de
cloud-platform
permite que o Jenkins acesse o Cloud Source Repositories e o Container Registry.Tente se conectar ao cluster.
kubectl cluster-info
Se você conseguir se conectar ao cluster, a saída será assim:
Kubernetes control plane is running at https://35.196.84.95 GLBCDefaultBackend is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy KubeDNS is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://35.196.84.95/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
Adicione a si mesmo como administrador de clusters no RBAC do cluster para conceder permissões ao Jenkins no cluster:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin --user=$(gcloud config get-value account)
Instalar o Jenkins
Use o Helm para implantar o Jenkins no repositório.
Adicione o repositório de gráficos do Helm para o Jenkins:
helm repo add jenkinsci https://charts.jenkins.io helm repo update
Use um arquivo de valores
personalizado
para configurar a instalação do Jenkins. Para detalhes sobre a configuração, consulte o arquivo jenkins/values.yaml
.
Use a CLI do Helm para implantar o gráfico com o conjunto de configurações:
helm install cd-jenkins -f jenkins/values.yaml jenkinsci/jenkins --wait
Para mais informações sobre como configurar a instalação do Jenkins, visite a página de documentação do gráfico Jenkins (em inglês).
Verifique se o pod do Jenkins está no estado
Running
e se o contêiner está no estadoREADY
:kubectl get pods
Você verá
2/2
na colunaREADY
eRunning
na colunaSTATUS
. A inicialização do Jenkins pode levar alguns minutos para ser concluída.NAME READY STATUS RESTARTS AGE cd-jenkins-0 2/2 Running 0 6m30s
Verifique se os serviços do Kubernetes foram criados corretamente.
kubectl get svc
A saída será assim:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE cd-jenkins 10.35.249.67 <none> 8080/TCP 3h cd-jenkins-agent 10.35.248.1 <none> 50000/TCP 3h kubernetes 10.35.240.1 <none> 443/TCP 9h
Na instalação do Jenkins, o plug-in do Kubernetes (em inglês) é usado para criar agentes de criador. Eles serão lançados automaticamente, conforme necessário quando o mestre do Jenkins precisar executar uma compilação. Quando o trabalho for concluído, eles serão automaticamente finalizados, e os respectivos recursos serão adicionados novamente ao pool de recursos do cluster.
Conectar ao Jenkins
No Cloud Shell, configure o encaminhamento de portas para a IU do Jenkins:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd-jenkins" -o jsonpath="{.items[0].metadata.name}") kubectl port-forward $POD_NAME 8080:8080 >> /dev/null 2>&1 &
Para abrir a interface do usuário do Jenkins, no Cloud Shell, clique em Visualização da Web e em Visualizar na porta 8080.
Agora você tem acesso ao Jenkins e ao GKE. Para aproveitar ainda mais essa solução, você pode usar esses componentes no canal de entrega contínua.
Limpeza
Depois de concluir este tutorial, limpe os recursos que você criou no GCP para que não sejam faturados.
Como excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Como excluir o cluster do GKE
- Exclua o cluster do GKE:
gcloud container clusters delete jenkins-cd --zone us-east1-d
A seguir
Saiba mais sobre o Jenkins nas práticas recomendadas do GKE.
Saiba como configurar o Jenkins para o GKE.
Saiba como configurar a implantação contínua no GKE usando o Jenkins.
Conheça arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.