Concourse Lab Creation

Support HackTricks

Testumgebung

Concourse ausführen

Mit Docker-Compose

Diese Docker-Compose-Datei vereinfacht die Installation, um einige Tests mit Concourse durchzuführen:

wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml
docker-compose up -d

Sie können die Befehlszeile fly für Ihr Betriebssystem von der Website unter 127.0.0.1:8080 herunterladen.

Mit Kubernetes (Empfohlen)

Sie können Concourse einfach in Kubernetes (zum Beispiel in minikube) mit dem Helm-Chart bereitstellen: concourse-chart.

brew install helm
helm repo add concourse https://concourse-charts.storage.googleapis.com/
helm install concourse-release concourse/concourse
# concourse-release will be the prefix name for the concourse elements in k8s
# After the installation you will find the indications to connect to it in the console

# If you need to delete it
helm delete concourse-release

Nachdem Sie die Concourse-Umgebung erstellt haben, können Sie ein Geheimnis generieren und dem SA, der in Concourse Web ausgeführt wird, Zugriff auf K8s-Geheimnisse gewähren:

echo 'apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: read-secrets
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]

---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-secrets-concourse
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: read-secrets
subjects:
- kind: ServiceAccount
name: concourse-release-web
namespace: default

---

apiVersion: v1
kind: Secret
metadata:
name: super
namespace: concourse-release-main
type: Opaque
data:
secret: MWYyZDFlMmU2N2Rm

' | kubectl apply -f -

Pipeline erstellen

Eine Pipeline besteht aus einer Liste von Jobs, die eine geordnete Liste von Steps enthält.

Schritte

Es können mehrere verschiedene Arten von Schritten verwendet werden:

Jeder Schritt in einem Job-Plan wird in seinem eigenen Container ausgeführt. Sie können alles, was Sie möchten, im Container ausführen (d.h. meine Tests ausführen, dieses Bash-Skript ausführen, dieses Image erstellen usw.). Wenn Sie also einen Job mit fünf Schritten haben, erstellt Concourse fünf Container, einen für jeden Schritt.

Daher ist es möglich, den Typ des Containers anzugeben, in dem jeder Schritt ausgeführt werden muss.

Einfaches Pipeline-Beispiel

jobs:
- name: simple
plan:
- task: simple-task
privileged: true
config:
# Tells Concourse which type of worker this task should run on
platform: linux
image_resource:
type: registry-image
source:
repository: busybox # images are pulled from docker hub by default
run:
path: sh
args:
- -cx
- |
sleep 1000
echo "$SUPER_SECRET"
params:
SUPER_SECRET: ((super.secret))
fly -t tutorial set-pipeline -p pipe-name -c hello-world.yml
# pipelines are paused when first created
fly -t tutorial unpause-pipeline -p pipe-name
# trigger the job and watch it run to completion
fly -t tutorial trigger-job --job pipe-name/simple --watch
# From another console
fly -t tutorial intercept --job pipe-name/simple

Überprüfen Sie 127.0.0.1:8080, um den Pipeline-Fluss zu sehen.

Bash-Skript mit Ausgabe/Eingabe-Pipeline

Es ist möglich, die Ergebnisse einer Aufgabe in einer Datei zu speichern und anzugeben, dass es sich um eine Ausgabe handelt, und dann die Eingabe der nächsten Aufgabe als die Ausgabe der vorherigen Aufgabe anzugeben. Was Concourse tut, ist, das Verzeichnis der vorherigen Aufgabe in der neuen Aufgabe zu mounten, wo Sie auf die von der vorherigen Aufgabe erstellten Dateien zugreifen können.

Trigger

Sie müssen die Jobs nicht jedes Mal manuell auslösen, wenn Sie sie ausführen möchten, Sie können sie auch so programmieren, dass sie jedes Mal ausgeführt werden:

Überprüfen Sie ein YAML-Pipeline-Beispiel, das bei neuen Commits auf master in https://concourse-ci.org/tutorial-resources.html ausgelöst wird.

Unterstützen Sie HackTricks

Last updated