Wenn der Ant Build im Jenkins Server mit der sehr nichts sagenden Fehlermeldung fehlschlägt:
build.xml:103: exec returned: 255
dann kann dies daran liegen, dass nicht genug RAM zur Verfügung steht.
Wenn der Ant Build im Jenkins Server mit der sehr nichts sagenden Fehlermeldung fehlschlägt:
build.xml:103: exec returned: 255
dann kann dies daran liegen, dass nicht genug RAM zur Verfügung steht.
Um in CloudWatch eigene Metriken anzulegen, um z.B. Alarm auszulösen und Monitoring zu betreiben mit den Daten der Applikation, kann man mit dem aws-php-sdk den folgenden Code verwenden:
$client = new CloudWatchClient([ 'region' => 'eu-central-1', 'version' => '2010-08-01', 'credentials' => [ 'key' => 'xxx', 'secret' => 'xxx ], ]); } $result = $this->client->putMetricData(array( 'Namespace' => 'MyProject', 'MetricData' => array( array( 'MetricName' => 'MyMetric, 'Timestamp' => time(), 'Value' => 1, 'Unit' => 'Count', 'Dimensions' => array( array( 'Name' => 'Environment', 'Value' => 'test', ), ), ) ) ));
Wenn man keine Packete installieren kann bei einem Build, kann man versuchen, die docker-machine neuzustarten:
docker-machine restart
Um auf der Linux Shell die gewohnten Aliase wie ll für ls -lh zu verwenden, muss man folgenden Trick verwenden:
Da das Login über sh keine Linux Login Shell ist, werden die Alias Definitionen in /etc/profile.d nicht geladen beim Login.
Es reicht, sich mit sh –login im Container anzumleden, dann stehen die Alias Definitionen zur Verfügung.
Ein DockerFile für eine PHP 7.2. Umgebung mit XDebug für eine Symfony 4 Umgebung unter Amazon Linux 2:
FROM amazonlinux:2.0.20190823.1 RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # install php RUN amazon-linux-extras install -y php7.2 RUN yum install -y php-devel.x86_64 php-xml.x86_64 php-pecl-zip.x86_64 php-intl.x86_64 #install xdebug RUN yum install -y gcc make RUN yum install -y php-pear.noarch RUN pecl install xdebug RUN echo 'zend_extension=/usr/lib64/php/modules/xdebug.so' >> /etc/php.ini
Um mit Xdebug und PHPStorm im Docker Container debuggen zu können, aber die Fehlermeldung bekommt:
Connection was not established. Probably 'xdebug.remote_host=docker.for.win.localhost' is incorrect
liegt das daran, dass Docker in der Toolbox Variante für Windows den Platzhalter docker.for.win.localhost nicht befüllt. Es muss also die IP des PHPStorm Rechners manuell gesetzt werden.
Dazu setzt man manuell den Wert von xdebug.remote_host auf 192.168.99.1 (die IP Docker für den Host setzt, kann varieren) bei den CLI Interpreter Optionen:
Um einen lokalen Ordner in einen Docker Container unter Windows 10 zu mounten, kann man entweder Docker für Windows verwenden oder wenn man die Windows 10 Home Edition verwendet, ist man gezwungen, dies per Hand mit Virtual Box erledigen.
Dazu muss man die Docker default Box auswählen in Virtual Box:
und einen neuen Gemeinsamen Ordner hinzufügen:
Dann muss man die docker-machine neustarten in der Docker Toolbox, dadurch wird die docker default Virtual Box neugestartet:
docker-machine restart
Jetzt kann man sein Verzeichnis mounten in seiner docker-compose.yml:
volumes: - /htdocs/my_project:/var/www/html/
Jetzt wird der Ordner in dem Docker Container erfolgreich gemountet.
Mit dem folgenden Befehl kann getestet werden, ob das mounten erfolgreich war:
docker exec -it CONTAINER_ID ls -ll /var/www/html
Mit diesem Befehl kann man nach yum Packeten suchen:
yum search mysql | grep client
Damit die Logs schön formatiert aus einer Symfony 4 Anwendung in AWS Cloudwatch ankommen, muss man Monolog folgendermaßen konfigurieren:
# config/services.yaml Monolog\Formatter\JsonFormatter: calls: - [includeStacktraces]
und
# config/packages/prod/monolog.yaml monolog: handlers: main: type: stream level: error path: '%kernel.logs_dir%/error.log' formatter: Monolog\Formatter\JsonFormatter
Danach muss man der Cloudwatch Daemon konfigurieren:
# /etc/awslogs/awslogs.conf
[general] # Path to the CloudWatch Logs agent's state file. The agent uses this file to maintain # client side state across its executions. state_file = /var/lib/awslogs/agent-state [/var/www/html/var/log/error.prod.log] datetime_format = [%Y-%m-%d H:%M:%S] file = /var/www/html/var/log/error.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = test_group_name/error_log
und man erhält wunderbare (aggregierte) ErrorLog Informationen in Cloudwatch Logs Insight:
Bei meiner Arbeit mit Cloudfromation habe ich viel nützliche Tipps gesammelt, die ich gern teilen will.
Für die Jetbrains IDEs wie PHPStorm, Webstorm oder IntelliJ gibt es ein sehr gutes AWS Cloudfromation Plugin namens AWS Cloudfromation von Leonid Shalupov:
Dieses biete Autocomplete für die IDE an und eine automatische Formatüberprüfung, ob Attribute gesetzt werden, die dort nicht erlaubt sind. Auf diesem weg kann man viele Fehler schon vor dem validieren finden und spart viel Zeit.