Exemples de pipelines¶
Note
Dans ce tutoriel, remplacez les valeurs suivantes comme suit :
ZONE_NAME
à remplacer par le nom de votre zone d'administration (commence parocb-
).TEAM_NAME
à remplacer par le nom de l'équipe utilisée pour le déploiement.
Construire et publier une image Docker¶
Nous souhaitons construire une image Docker avec un Dockerfile dans un référentiel git. Une fois l'image construite, nous voulons la publier dans le registre Docker Quay.
Etape 1: définir les ressources¶
Pour ce pipeline, il nous faut définir deux ressources :
git-master
: il s'agit de la référence au référentiel git où se trouve votre Dockerfile.latest-image
: le typeregistry-image
represente un registre Docker. Si vous souhaitez utiliser Quay, nous vous recommandons de créer un robot account et de l'utiliser pour pousser votre image.
resources:
- name: git-master
type: git
icon: git
source:
uri: https://git.ZONE_NAME.caascad.com/myorg/myrepo.git
username: ((git-username))
password: ((git-password))
branch: master
- name: latest-image
type: registry-image
icon: docker
source:
repository: docker-registry.ZONE_NAME.caascad.com/myorg/myimage
username: ((quay-robot-username))
password: ((quay-robot-password))
tag: latest
Toutes les valeurs entre parenthèses ((
et ))
, sont des variables. Les valeurs de ces variables sont affectées avec la commande fly set-pipeline
.
Etape 2: récupérer le référentiel Git¶
Récupérez le référentiel git. L'option trigger
déclenchera ce job à chaque fois qu'il y aura un nouveau commit sur master.
jobs:
- name: build
plan:
- get: git-master
trigger: true
Etape 3: générer le fichier de credentials¶
Le fichier yaml ci-dessous sera utilisé par la tâche qui construit l'image. Cette étape n'est utile que si l'image de base de votre Dockerfile est située sur un registre Docker privé.
- task: generate-docker-creds
config:
platform: linux
image_resource:
type: registry-image
source:
repository: docker-registry.ZONE_NAME.caascad.com/myorg/alpine
username: ((quay-robot-username))
password: ((quay-robot-password))
outputs:
- name: docker-creds
run:
path: ash
args:
- -c
- |
AUTH="$(echo -n "((quay-robot-username)):((quay-robot-password))" | base64 | tr -d '\n')"
echo '{"auths": {"docker-registry.ZONE_NAME.caascad.com": {"auth": "'$AUTH'", "email": ""}}}' > docker-creds/config.json
Le fichier résultant est situé dans docker-creds/config.json
. Il contient une structure JSON avec le nom d'utilisateur et le mot de passe du robot Quay encodés en base64. Cette structure est la même que celle utilisée par le client officiel de Docker.
Etape 4: construire l'image¶
Pour construire l'image Docker, nous utilisons une tâche utilisant l'image vito/oci-build-task
. Elle utilisera le Dockerfile disponible dans le référentiel git et exportera l'image dans image/image.tar
.
- task: build-docker-image
privileged: true
config:
platform: linux
image_resource:
type: registry-image
source:
repository: vito/oci-build-task
caches:
- path: cache
inputs:
- name: git-master
- name: docker-creds
outputs:
- name: image
params:
CONTEXT: git-master
DOCKER_CONFIG: docker-creds
run:
path: build
Cette tâche utilise deux entrées :
git-master
: il contient le contenu du référentiel Git.docker-creds
: il contient le fichier JSON avec les informations d'identification de Docker que nous avons générées précédemment.
La clé params
contient des variables d'environnement pour configurer les tâches. Vous pouvez vous référer à la documentation pour connaître les valeurs acceptées.
Etape 5: publier l'image¶
Cette étape prend le fichier image et le pousse vers le référentiel défini dans la ressource avec le nom latest-image
.
- put: latest-image
params:
image: image/image.tar
Etape 6: appliquer le pipeline¶
Vous pouvez copier le pipeline complet et le placer dans un fichier :
Pipeline complet
resources:
- name: latest-image
type: registry-image
icon: docker
source:
repository: docker-registry.ZONE_NAME.caascad.com/myorg/myimage
username: ((quay-robot-username))
password: ((quay-robot-password))
tag: latest
- name: git-master
type: git
icon: git
source:
uri: https://git.ZONE_NAME.caascad.com/myorg/myrepo.git
username: ((git-username))
password: ((git-password))
branch: master
jobs:
- name: build
plan:
- get: git-master
trigger: true
# Create a file with the credentials used to authenticate to the docker registry
# This step is mandatory only if you need to fetch an image from a private registry
- task: generate-docker-creds
config:
platform: linux
image_resource:
type: registry-image
source:
repository: docker-registry.ZONE_NAME.caascad.com/myorg/alpine
username: ((quay-robot-username))
password: ((quay-robot-password))
outputs:
- name: docker-creds
run:
path: ash
args:
- -c
- |
AUTH="$(echo -n "((quay-robot-username)):((quay-robot-password))" | base64 | tr -d '\n')"
echo '{"auths": {"docker-registry.ZONE_NAME.caascad.com": {"auth": "'$AUTH'", "email": ""}}}' > docker-creds/config.json
# Build the docker image using the credentials we previously forged
- task: build-docker-image
privileged: true
config:
platform: linux
image_resource:
type: registry-image
source:
repository: vito/oci-build-task
caches:
- path: cache
inputs:
- name: git-master
- name: docker-creds
outputs:
- name: image
params:
CONTEXT: git-master
DOCKER_CONFIG: docker-creds
run:
path: build
- put: latest-image
params:
image: image/image.tar
Vous pouvez appliquer le pipeling en utilisant fly
:
fly -t caascad set-pipeline -p pipeline-name -c pipeline.yaml \
-v quay-robot-username=ROBOTUSERNAME \
-v quay-robot-password=ROBOTPASSWORD \
-v git-username=USERNAME \
-v git-password=PASSWORD
Deployer sur K8s en utilisant Rancher¶
Ce pipeline récupère une charte Helm à partir d'un dépôt git et la déploie sur le cluster Kubernetes en utilisant Rancher.
Etape 1: définir les ressources¶
Pour ce pipeline, nous devons définir une ressource :
git-master
: c'est la référence au référentiel git dans lequel se trouve notre Dockerfile.
resources:
- name: git-master
type: git
icon: git
source:
uri: https://git.ZONE_NAME.caascad.com/myorg/myrepo.git
username: ((git-username))
password: ((git-password))
branch: master
Etape 2: récupérer le référentiel Git¶
Récupèrez le dépôt git. L'option trigger
déclenchera ce job à chaque fois qu'il y aura un nouveau commit sur master.
jobs:
- name: deploy
plan:
- get: git-master
trigger: true
Etape 3: appliquer la charte Helm¶
Utilisez une tâche pour déployer la charte Helm à partir une image contenant Helm et un shell appelé dtzar/helm-kubectl
.
- task: deploy manifest
config:
platform: linux
inputs:
- name: git-master
image_resource:
type: registry-image
source:
repository: dtzar/helm-kubectl
tag: 3.2.1
run:
path: bash
dir: git-master
args:
- -ec
- |
echo "((caascad-kubernetes-TEAM_NAME.kubeconfig))" > /tmp/kubeconfig
export KUBECONFIG="/tmp/kubeconfig"
helm upgrade --install --wait --create-namespace -n demo release-name ./helm/demo
La chaîne ((caascad-kubernetes-TEAM_NAME.kubeconfig))
sera remplacée automatiquement par Concourse. Cette variable a déjà été créée pour vous en tant que secret. Elle vous permettra de récupérer le kubeconfig
utilisé pour configurer la commande kubectl
et helm
. Elle contient les informations d'identification pour se connecter à Kubernetes en utilisant Rancher.
Etape 4 : appliquer le pipeline¶
Vous pouvez copier le pipeline complet et l'enregistrer dans un fichier :
Pipeline complet
resources:
- name: git-master
type: git
icon: git
source:
uri: https://git.ZONE_NAME.caascad.com/myorg/myrepo.git
username: ((git-username))
password: ((git-password))
branch: master
jobs:
- name: deploy
plan:
- get: git-master
trigger: true
- task: deploy manifest
config:
platform: linux
inputs:
- name: git-master
image_resource:
type: registry-image
source:
repository: dtzar/helm-kubectl
tag: 3.2.1
run:
path: bash
dir: git-master
args:
- -ec
# The secret "caascad-kubernetes-TEAM_NAME.kubeconfig" has already been created for you
- |
echo "((caascad-kubernetes-TEAM_NAME.kubeconfig))" > /tmp/kubeconfig
export KUBECONFIG="/tmp/kubeconfig"
helm upgrade --install --wait --create-namespace -n demo release-name ./helm/demo
Vous pouvez appliquer le pipeling en utilisant fly
:
fly -t caascad set-pipeline -p pipeline-rancher -c pipeline-rancher.yaml \
-v git-username=USERNAME \
-v git-password=PASSWORD
Création du secret Kubernetes pour la récupération des images d'un registre privé¶
Ce pipeline montre comment obtenir les informations d'identification du registre Docker à partir de Vault et les déployer en tant que secret Kubernetes afin de pouvoir télécharger des images Docker depuis un registre privé.
Les identifiants du registre d'image Docker (au format d'authentification Docker JSON) devront être ajouter au préalable dans un secret Vault.
Note
Les secrets Vault qui seront utilisés dans les pipelines Concourse devront être placés dans le KV store Vault à des endroits précis suivant l'utilisation souhaitée.
Exemple :
kv/concourse/TEAM_NAME/
Le secret sera accessible et utilisable dans tout les pipelines Concourse de la TEAM_NAME
Vous pouvez copier le code du pipeline qui suit dans un fichier (ex: pipeline-regcred.yaml):
jobs:
- name: add-regcred-to-k8s
plan:
- task: push-regcred
config:
platform: linux
image_resource:
type: registry-image
source:
repository: dtzar/helm-kubectl
run:
path: /bin/sh
args:
- -cx
- |
# delete secret first and ignore if not found
kubectl --server="((caascad-kubernetes-TEAM_NAME.url))" --token="((caascad-kubernetes-TEAM_NAME.token))" -n ((namespace)) delete secret regcred --ignore-not-found=true
# create secret
kubectl --server="((caascad-kubernetes-TEAM_NAME.url))" --token="((caascad-kubernetes-TEAM_NAME.token))" -n ((namespace)) create secret generic regcred --from-literal=.dockerconfigjson='((YOUR_SECRET.KEY))' --type=kubernetes.io/dockerconfigjson
Remplacez TEAM_NAME
avec le nom d'équipe Concourse correspondante, et remplacez YOUR_SECRET.KEY
avec votre secret.key Vault.
A présent, vous pouvez appliquer le pipeline en utilisant l'outil en ligne de commande fly
et spécifier le namespace dans lequel vous voulez déployer le secret :
fly -t caascad set-pipeline -p pipeline-regcred -c pipeline-regcred.yaml \
-v namespace=default