{"id":31147,"date":"2022-09-07T01:40:24","date_gmt":"2022-09-07T01:40:24","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=31147"},"modified":"2022-12-23T05:47:31","modified_gmt":"2022-12-23T05:47:31","slug":"gitlab-tutorials-how-to-setup-and-run-gitlab-runner-in-a-container","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/gitlab-tutorials-how-to-setup-and-run-gitlab-runner-in-a-container\/","title":{"rendered":"GitLab Tutorials: How to setup and run GitLab Runner in a container?"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Step 1 &#8211; Install Latest Version of Docker<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2 &#8211; Run &#8220;gitlab-runner&#8221; command in the container<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Use local system volume mounts to start the Runner container<\/span>\n\n$ docker run -d --name gitlab-runner --restart always \\\n  -v \/srv\/gitlab-runner\/config:\/etc\/gitlab-runner \\\n  -v \/<span class=\"hljs-keyword\">var<\/span>\/run\/docker.sock:\/<span class=\"hljs-keyword\">var<\/span>\/run\/docker.sock \\\n  gitlab\/gitlab-runner:latest\n\n$ docker logs gitlab-runner<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3 &#8211; Register the runner<\/h3>\n\n\n\n<p>The following steps describe launching a short-lived gitlab-runner container to register the container you created during install. After you finish registration, the resulting configuration is written to your chosen configuration volume (for example, \/srv\/gitlab-runner\/config) and is loaded by the runner using that configuration volume.<\/p>\n\n\n\n<p>To register a runner using a Docker container: Run the register command based on the mount type:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">$ docker run --rm -it -v \/srv\/gitlab-runner\/config:<span class=\"hljs-regexp\">\/etc\/gi<\/span>tlab-runner gitlab\/gitlab-runner register\n\n\n- Enter your GitLab instance URL (also known <span class=\"hljs-keyword\">as<\/span> the gitlab-ci coordinator URL).\n- Enter the token you obtained to register the runner.\n- Enter a description <span class=\"hljs-keyword\">for<\/span> the runner. You can change <span class=\"hljs-keyword\">this<\/span> value later <span class=\"hljs-keyword\">in<\/span> the GitLab user interface.\n- Enter the tags associated <span class=\"hljs-keyword\">with<\/span> the runner, separated by commas. You can change <span class=\"hljs-keyword\">this<\/span> value later <span class=\"hljs-keyword\">in<\/span> the GitLab user interface.\n- Enter any optional maintenance note <span class=\"hljs-keyword\">for<\/span> the runner.\n- Provide the runner executor. For most use cases, enter docker.\n- If you entered docker <span class=\"hljs-keyword\">as<\/span> your executor, you are asked <span class=\"hljs-keyword\">for<\/span> the <span class=\"hljs-keyword\">default<\/span> image to be used <span class=\"hljs-keyword\">for<\/span> projects that <span class=\"hljs-keyword\">do<\/span> not define one <span class=\"hljs-keyword\">in<\/span> .gitlab-ci.yml.<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Reference<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/docs.gitlab.com\/runner\/install\/docker.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.gitlab.com\/runner\/install\/docker.html<\/a><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example of .gitlab-ci.yml<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">stages:\r\n  - publish\r\n  - deploy\r\n\r\nvariables:\r\n  TAG_LATEST: $CI_REGISTRY_IMAGE\/$CI_COMMIT_REF_NAME:latest\r\n  TAG_COMMIT: $CI_REGISTRY_IMAGE\/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA\r\n\r\npublish:\r\n  image: docker:latest\r\n  stage: publish\r\n  services:\r\n    - docker:dind\r\n  script:\r\n    - docker build -t $TAG_COMMIT -t $TAG_LATEST .\r\n    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY\r\n    - docker push $TAG_COMMIT\r\n    - docker push $TAG_LATEST\r\n\r\ndeploy:\r\n  image: alpine:latest\r\n  stage: deploy\r\n  tags:\r\n    - deployment\r\n  script:\r\n    - chmod og= $ID_RSA\r\n    - apk update &amp;&amp; apk add openssh-client\r\n    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP <span class=\"hljs-string\">\"docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY\"<\/span>\r\n    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP <span class=\"hljs-string\">\"docker pull $TAG_COMMIT\"<\/span>\r\n    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP <span class=\"hljs-string\">\"docker container rm -f my-app || true\"<\/span>\r\n    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP <span class=\"hljs-string\">\"docker run -d -p 80:80 --name my-app $TAG_COMMIT\"<\/span>\r\n  environment:\r\n    name: production\r\n    url: http:<span class=\"hljs-comment\">\/\/your_server_IP<\/span>\r\n  only:\r\n    - master<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">image: node:4.2.2\r\n\r\nvariables:\r\n  POSTGRES_USER: testuser\r\n  POSTGRES_PASSWORD: testpass\r\n\r\nservices:\r\n  - postgres:9.5.0\r\n\r\nall_tests:\r\n  script:\r\n   - npm install\r\n   - node .\/specs\/start.js<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">image<\/span>: node:4.2.2\n\ncache:\n  paths:\n  - node_modules\/\n\nstages:\n  - test\n\ntest_async:\n  stage: test\n  script:\n   - npm install\n   - node .\/specs\/start.js .\/specs\/async.spec.js\n  tags:\n    - docker\n\ntest_db:\n  stage: test\n  services:\n    - postgres:9.5.0\n  script:\n   - npm install\n   - node .\/specs\/start.js .\/specs\/db-postgres.spec.js\n  tags:\n    - docker\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><a href=\"https:\/\/gitlab.com\/gitlab-examples\/nodejs\/-\/tree\/master\/\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/gitlab-examples\/nodejs\/-\/tree\/master\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Step 1 &#8211; Install Latest Version of Docker Step 2 &#8211; Run &#8220;gitlab-runner&#8221; command in the container Step 3 &#8211; Register the runner The following steps describe launching a short-lived gitlab-runner container to register the container you created during install. After you finish registration, the resulting configuration is written to your chosen configuration volume (for&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-31147","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=31147"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31147\/revisions"}],"predecessor-version":[{"id":31152,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/31147\/revisions\/31152"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=31147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=31147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=31147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}