\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{violaken (violaken)} \pdfinfo{ /Title (gitlab-ci-cd-pipeline-configuration.pdf) /Creator (Cheatography) /Author (violaken (violaken)) /Subject (GitLab CI/CD Pipeline Configuration Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{FC6D27} \definecolor{LightBackground}{HTML}{FEF5F1} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{GitLab CI/CD Pipeline Configuration Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{violaken (violaken)} via \textcolor{DarkBackground}{\uline{cheatography.com/90451/cs/20475/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}violaken (violaken) \\ \uline{cheatography.com/violaken} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 31st October, 2019.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Pipeline Architecture}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Globals | Includes | Before/After | Extends% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.09494 cm} x{3.88206 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Global Defaults}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{`default`} & `image` | `services` | `before\_script` | `after\_script` | `cache` \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} \seqsplit{`variables`} & Cannot be specified under `default` \tn % Row Count 5 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{`stages`} & Cannot be specified under `default` \tn % Row Count 7 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Job values always override global defaults.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Include}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{include: \newline - remote: \seqsplit{'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'} \newline - local: \seqsplit{'/templates/.after-script-template.yml'} \newline - template: \seqsplit{Auto-DevOps.gitlab-ci.yml} \newline - project: 'my-group/my-project' \newline ref: master \newline file: \seqsplit{'/templates/.gitlab-ci-template.yml'}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{`extension: .yml | .yaml`} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Before and After Scripts}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{default: \newline before\_script: \newline - global before script \newline \newline job: \newline before\_script: \newline - execute this instead of global version \newline script: \newline - my command \newline after\_script: \newline - execute this after my script} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Extends}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{.only-important: \newline only: \newline - master \newline - stable \newline tags: \newline - production \newline \newline .in-docker: \newline tags: \newline - docker \newline image: alpine \newline \newline rspec: \newline extends: \newline - .only-important \newline - .in-docker \newline script: \newline - rake rspec \newline \newline spinach: \newline extends: .in-docker \newline script: rake spinach} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Jobs Management}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Stages | Parameters | Environments% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Stages}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{stages: \newline - .pre \newline - build \newline - test \newline - deploy \newline - .post} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{.pre and .post stages are guaranteed to be the first (.pre) or last (.post) stage in a pipeline} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Disabling Jobs by Hiding Them}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{.hidden\_job: \newline script: \newline - run test} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{temporarily 'disable' a job by prepending a dot (.)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Variables}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{variables: \newline ENVIRONMENT: "staging" \newline DB\_URL: \seqsplit{"postgres://postgres@postgres/db} \newline \newline build: \newline script: mvn build \newline variables: \newline ENVIRONMENT: "production"} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Environment}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{review\_app: \newline stage: deploy \newline script: make deploy-app \newline environment: \newline name: review \newline on\_stop: stop\_review\_app \newline \newline stop\_review\_app: \newline stage: deploy \newline variables: \newline GIT\_STRATEGY: none \newline script: make delete-app \newline when: manual \newline environment: \newline name: review \newline action: stop \newline \newline deploy as review app: \newline stage: deploy \newline script: make deploy \newline environment: \newline name: \seqsplit{review/\$CI\_COMMIT\_REF\_NAME} \newline url: \seqsplit{https://\$CI\_ENVIRONMENT\_SLUG}.example.com/} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Pages}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{pages: \newline stage: deploy \newline script: \newline - mkdir .public \newline - cp -r * .public \newline - mv .public public \newline artifacts: \newline paths: \newline - public \newline only: \newline - master} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Pages is a special job that is used to upload static content to GitLab that can be used to serve your website} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Dependencies}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{build:osx: \newline stage: build \newline script: make build:osx \newline artifacts: \newline paths: \newline - binaries/ \newline \newline build:linux: \newline stage: build \newline script: make build:linux \newline artifacts: \newline paths: \newline - binaries/ \newline \newline test:osx: \newline stage: test \newline script: make test:osx \newline dependencies: \newline - build:osx \newline \newline test:linux: \newline stage: test \newline script: make test:linux \newline dependencies: \newline - build:linux \newline \newline deploy: \newline stage: deploy \newline script: make deploy} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{By default, all artifacts from all previous stages are passed to the current job, but you can use the dependencies parameter to define a limited list of jobs (or no jobs) to fetch artifacts from.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Needs}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{linux:build: \newline stage: build \newline \newline mac:build: \newline stage: build \newline \newline linux:rspec: \newline stage: test \newline needs: {[}"linux:build"{]} \newline \newline linux:rubocop: \newline stage: test \newline needs: {[}"linux:build"{]} \newline \newline mac:rspec: \newline stage: test \newline needs: {[}"mac:build"{]} \newline \newline mac:rubocop: \newline stage: test \newline needs: {[}"mac:build"{]} \newline \newline production: \newline stage: deploy} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{The needs: keyword enables executing jobs out-of-order, allowing you to implement a directed acyclic graph. This lets you run some jobs without waiting for other ones, disregarding stage ordering so you can have multiple stages running concurrently.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Tags}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{job: \newline tags: \newline - ruby \newline - postgres \newline \newline osx job: \newline stage: \newline - build \newline tags: \newline - osx \newline script: \newline - echo "Hello, \$USER!"} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{tags is used to select specific Runners from the list of all Runners that are allowed to run this project. During the registration of a Runner, you can specify the Runner's tags, for example ruby, postgres, windows, osx.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Trigger}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{staging: \newline stage: deploy \newline trigger: my/deployment \newline \newline staging-branch: \newline stage: deploy \newline trigger: \newline project: my/deployment \newline branch: stable} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{trigger allows you to define downstream pipeline trigger. When a job created from trigger definition is started by GitLab, a downstream pipeline gets created.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Parallel}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{test: \newline parallel: 3 \newline script: \newline - bundle \newline - bundle exec rspec\_booster -{}-job \seqsplit{\$CI\_NODE\_INDEX/\$CI\_NODE\_TOTAL}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{parallel allows you to configure how many instances of a job to run in parallel. This value has to be greater than or equal to two (2) and less than or equal to 50.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Flow Control}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Rules | Retries% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{rules Evaluation}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{docker build: \newline script: docker build -t my-image:\$SLUG . \newline rules: \newline - changes: \newline - Dockerfile \newline when: manual \newline - if: '\$VAR == "string value"' \newline when: manual \newline - when: on\_success \newline \newline docker build: \newline script: docker build -t my-image:\$SLUG . \newline rules: \newline - if: '\$VAR == "string value"' \newline changes: \newline - Dockerfile \newline - docker/scripts/* \newline when: manual} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{To conjoin if and changes clauses with an AND, use them in the same rule.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Job Retries}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{test: \newline script: rspec \newline retry: \newline max: 2 \newline when: \newline - runner\_system\_failure \newline - \seqsplit{stuck\_or\_timeout\_failure}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{`when: always | unknown\_failure | script\_failure | api\_failure | \seqsplit{stuck\_or\_timeout\_failure} | runner\_system\_failure | \seqsplit{missing\_dependency\_failure} | runner\_unsupported`} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Interruptible}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{stages: \newline - stage1 \newline - stage2 \newline \newline step-1: \newline stage: stage1 \newline script: \newline - echo "Can be canceled" \newline \newline step-2: \newline stage: stage2 \newline script: \newline - echo "Can not be canceled" \newline interruptible: false} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{This value will only be used if the {\bf{automatic cancellation of redundant pipelines}} feature is enabled.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Protecting Manual Jobs}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{deploy\_prod: \newline stage: deploy \newline script: \newline - echo "Deploy to production server" \newline environment: \newline name: production \newline url: https://example.com \newline when: manual \newline only: \newline - master \newline allow\_failure: false} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{In the protected environments settings, select the environment and add the users, roles or groups that are authorized to trigger the manual job to the Allowed to Deploy list} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Artifact Management}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Artifacts | Docker | Cache% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Artifacts}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{job: \newline artifacts: \newline name: "\$CI\_JOB\_NAME" \newline paths: \newline - binaries/ \newline - .config \newline untracked: true \newline when: on\_failure \newline expire\_in: 1 week \newline \newline code\_quality: \newline stage: test \newline script: codequality /code \newline artifacts: \newline reports: \newline codequality: \seqsplit{gl-code-quality-report.json} \newline coverage: '/Code coverage: \textbackslash{}d+\textbackslash{}.\textbackslash{}d+/'} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{`untracked: true | false` `when: on\_success | on\_failure | always | manual`} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Docker Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{image: \newline name: super/sql:experimental \newline entrypoint: {[}""{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Docker Service}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{services: \newline - name: postgres:9.4 \newline alias: db \newline entrypoint: {[}"docker-entrypoint.sh"{]} \newline command: {[}"postgres"{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Cache}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{build: \newline script: mvn test \newline cache: \newline key: build \newline untracked: true \newline paths: \newline - binaries/ \newline policy: pull} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{`policy : pull | push | pull-push` `untracked : true | false`} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}