{"id":121,"date":"2020-02-09T17:29:53","date_gmt":"2020-02-09T09:29:53","guid":{"rendered":"http:\/\/kevinliao.myds.me\/wordpress\/?p=121"},"modified":"2020-02-09T17:33:49","modified_gmt":"2020-02-09T09:33:49","slug":"%e4%bd%bf%e7%94%a8docker-%e5%bb%ba%e7%bd%ae-gitlab-ci","status":"publish","type":"post","link":"https:\/\/kevinliao.myds.me\/wordpress\/2020\/02\/09\/%e4%bd%bf%e7%94%a8docker-%e5%bb%ba%e7%bd%ae-gitlab-ci\/","title":{"rendered":"\u4f7f\u7528\bDocker \u5efa\u7f6e GitLab CI"},"content":{"rendered":"\n<p>\u6700\u8fd1\u6709\u9700\u6c42\u5728Mac\u74b0\u5883\u4e2d\uff0c\u4f7f\u7528Docker\u5efa\u7f6eGitlab\u7684\u958b\u767c\u74b0\u5883\u8207CI \/CD \uff0c \u6240\u4ee5\u8a18\u9304\u4e00\u4e0b\u76f8\u95dc\u7684\u6b65\u9a5f\u8207\u7d30\u7bc0\uff0cGitlab\u662f\u4e00\u500b\u7528Ruby on \bRails \u958b\u767c\u7684\u958b\u6e90\u9805\u76ee\uff0c\u53ef\u4ee5\u901a\u904eweb \u754c\u9762\u9032\u884c\u5c08\u6848\u7ba1\u7406\u8207\u6e2c\u8a66\u3002<\/p>\n\n\n\n<p>\u4f7f\u7528Docker \u4f48\u7f72\u53ef\u4ee5\u5f88\u5bb9\u6613\u9032\u884c\u5b89\u88ddGitlab\u8207\u7248\u672c\u7ba1\u7406\u3002<\/p>\n\n\n\n<h3>\u5b89\u88ddDocker Desktop<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><a href=\"https:\/\/docs.docker.com\/docker-for-mac\/install\/\">https:\/\/docs.docker.com\/docker-for-mac\/install\/<\/a><\/p><\/blockquote>\n\n\n\n<ul><li>\u4e0b\u8f09Docker.dmg (<a href=\"https:\/\/docs.docker.com\/docker-for-mac\/install\/\">https:\/\/docs.docker.com\/docker-for-mac\/install\/<\/a>)<\/li><li>\u9ede\u64ca\bDocker.dmg \u5c07Docker.app \u62d6\u79fb\u5230Applications \u4e2d<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"722\" height=\"300\" src=\"https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/docker-app-drag.png\" alt=\"\" class=\"wp-image-123\" srcset=\"https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/docker-app-drag.png 722w, https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/docker-app-drag-300x125.png 300w, https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/docker-app-drag-400x166.png 400w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<ul><li>\u9ede\u64caDocker.app\u9032\u884c\u5b89\u88dd<\/li><\/ul>\n\n\n\n<p>\u555f\u52d5\u5f8c\u6703\u63d0\u793a\u60a8\u4f7f\u7528\u7cfb\u7d71\u5bc6\u78bc\u6388\u6b0aDocker.app\u3002 \u9700\u8981\u7279\u6b0a\u8a2a\u554f\u624d\u80fd\u5b89\u88dd\u7db2\u7d61\u7d44\u4ef6\u548cDocker\u61c9\u7528\u7a0b\u5e8f\u7684\u93c8\u63a5\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"184\" height=\"25\" src=\"https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/whale-in-menu-bar.png\" alt=\"\" class=\"wp-image-124\"\/><\/figure>\n\n\n\n<p>\u9802\u90e8\u72c0\u614b\u6b04\u4e2d\u7684Docker\u83dc\u55ae\u8868\u793aDocker Desktop\u6b63\u5728\u904b\u884c\uff0c\u4e26\u4e14\u53ef\u4ee5\u5f9e\u7d42\u7aef\u9032\u884c\u8a2a\u554f\u3002<\/p>\n\n\n\n<p>\u5982\u679c\u60a8\u525b\u525b\u5b89\u88dd\u4e86\u8a72\u61c9\u7528\u7a0b\u5e8f\uff0c\u5247\u9084\u6703\u6536\u5230\u4e00\u689d\u6d88\u606f\uff0c\u5176\u4e2d\u5305\u542b\u5efa\u8b70\u7684\u5f8c\u7e8c\u6b65\u9a5f\u4ee5\u53ca\u6307\u5411\u6587\u6a94\u7684\u93c8\u63a5\u3002 \u55ae\u64caDocker menu\u4ee5\u6d88\u9664\u6b64\u5f48\u51fa\u901a\u77e5\u3002<\/p>\n\n\n\n<ul><li>\u958b\u555fTeminal \u78ba\u8a8ddocker \u6307\u4ee4\u53ef\u4ee5\u6b63\u5e38<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$ docker -v<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"626\" height=\"122\" src=\"https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/\u622a\u5716-2020-02-09-\u4e0b\u53484.54.49.png\" alt=\"\" class=\"wp-image-125\" srcset=\"https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/\u622a\u5716-2020-02-09-\u4e0b\u53484.54.49.png 626w, https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/\u622a\u5716-2020-02-09-\u4e0b\u53484.54.49-300x58.png 300w, https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/\u622a\u5716-2020-02-09-\u4e0b\u53484.54.49-400x78.png 400w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<h2>\u4e0b\u8f09Gitlab image<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>$ docker pull gitlab\/gitlab-ce<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><a href=\"https:\/\/docs.gitlab.com\/omnibus\/docker\/\">https:\/\/docs.gitlab.com\/omnibus\/docker\/<\/a><\/p><\/blockquote>\n\n\n\n<h2>\u5efa\u7acbGitlab Container<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>$   sudo docker run -d \\\n    --hostname xxxx.xxxx.xx \\\n    --name gitlab \\\n    --restart always \\\n    --publish 30001:22 --publish 30000:80 --publish 30002:443 \\\n    --volume ~\/gitlab\/data:\/var\/opt\/gitlab \\\n    --volume ~\/gitlab\/logs:\/var\/log\/gitlab \\\n    --volume ~\/gitlab\/config:\/etc\/gitlab \\\n    gitlab\/gitlab-ce<\/code><\/pre>\n\n\n\n<ul><li>hostname \u5efa\u7acbgitlab \u7684\u4f4d\u7f6e\u53ef\u4f7f\u7528domain or ip<\/li><li>name container \u540d\u7a31<\/li><li>restart \u8a2d\u5b9a\u70badocker \u670d\u52d9\u555f\u52d5\u5f8c\u81ea\u52d5\u91cd\u555f<\/li><li>publish \u5c07\u4e3b\u6a5f\u768430000, 30001, 30002 \u5c0d\u61c9\u5230 80, 22, 443<\/li><li>volume \u5c07gitlab \u7684\u6a94\u6848\u5c0d\u61c9\u5230\u5be6\u9ad4\u4e3b\u6a5f\u7684\u8def\u5f91\uff0ccontainer \u522a\u9664\u5f8c\u91cd\u5efa\u8207\u66f4\u65b0\u5f8c\u4e0d\u5f71\u97ff\u7cfb\u7d71\u8cc7\u6599<\/li><\/ul>\n\n\n\n<h2>\u4fee\u6539gitlab.rb \u6587\u4ef6<\/h2>\n\n\n\n<p>\u56e0\u70ba\u5df2\u7d93\u6709\u628agitlab.rb \u6587\u4ef6\u5c0d\u61c9\u5230 ~\/gitlab\/config <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ vi ~\/gitlab\/config\/gitlab.rb<\/code><\/pre>\n\n\n\n<p>\u4fee\u6539\u7684\u5167\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ul><li>external_url &#8216;<strong>http:\/\/hostname:30000<\/strong>&#8216;<\/li><li>gitlab_rails[&#8216;gitlab_ssh_host&#8217;] = &#8216;hostname&#8217;<\/li><li>gitlab_rails[&#8216;gitlab_shell_ssh_port&#8217;] = 30001<\/li><li>nginx[&#8216;listen_port&#8217;] = 80<\/li><\/ul>\n\n\n\n<h2>\u4fee\u6539email \u7684\u914d\u7f6e<\/h2>\n\n\n\n<p>\u4e00\u6a23\u5728gitlab.rb \u4e2d\u589e\u52a0smtp\u7684\u914d\u7f6e<\/p>\n\n\n\n<p>gitlab_rails[&#8216;gitlab_email_from&#8217;] = &#8220;<a href=\"mailto:xxxx@163.com\">xxxx@163.com<\/a>\u201d\u00a0\u00a0<br>gitlab_rails[&#8216;gitlab_email_reply_to&#8217;] = \u2018<a href=\"mailto:xzhang_thu@163.com\">xxxx@163.com<\/a>&#8216;\u00a0\u00a0<br>gitlab_rails[&#8216;smtp_enable&#8217;] = true<br>gitlab_rails[&#8216;smtp_address&#8217;] = &#8220;<a href=\"http:\/\/smtp.163.com\/\">smtp.163.com<\/a>&#8220;<br>gitlab_rails[&#8216;smtp_port&#8217;] = 465\u00a0<br>gitlab_rails[&#8216;smtp_user_name&#8217;] = &#8220;<a href=\"mailto:xxxx@163.com\">xxxx@163.com<\/a>&#8221;\u00a0\u00a0<br>gitlab_rails[&#8216;smtp_password&#8217;] = &#8220;xxxxpassword&#8221;\u00a0\u00a0 gitlab_rails[&#8216;smtp_domain&#8217;] = &#8220;<a href=\"http:\/\/163.com\/\">163.com<\/a>&#8221;\u00a0\u00a0 gitlab_rails[&#8216;smtp_authentication&#8217;] = &#8220;login&#8221;\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 gitlab_rails[&#8216;smtp_enable_starttls_auto&#8217;] = true\u00a0<br>gitlab_rails[&#8216;smtp_tls&#8217;] =true\u00a0\u00a0\u00a0 gitlab_rails[&#8216;smtp_openssl_verify_mode&#8217;] = &#8220;peer&#8221;\u00a0<\/p>\n\n\n\n<h2>\u91cd\u555fgitlab service<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo docker exec -it gitlab \/bin\/bash\n$ gitlab-ctl reconfigure<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u6709\u9700\u6c42\u5728Mac\u74b0\u5883\u4e2d\uff0c\u4f7f\u7528Docker\u5efa\u7f6eGitlab\u7684\u958b\u767c\u74b0\u5883\u8207CI \/CD \uff0c \u6240\u4ee5\u8a18\u9304\u4e00\u4e0b\u76f8\u95dc\u7684\u6b65\u9a5f &hellip; <a href=\"https:\/\/kevinliao.myds.me\/wordpress\/2020\/02\/09\/%e4%bd%bf%e7%94%a8docker-%e5%bb%ba%e7%bd%ae-gitlab-ci\/\" class=\"more-link\">\u95b1\u8b80\u5168\u6587<span class=\"screen-reader-text\">\u3008\u4f7f\u7528\bDocker \u5efa\u7f6e GitLab CI\u3009<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":122,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[17],"tags":[20,18,19],"jetpack_featured_media_url":"https:\/\/kevinliao.myds.me\/wordpress\/wp-content\/uploads\/2020\/02\/\u622a\u5716-2020-02-09-\u4e0b\u53484.24.36.png","_links":{"self":[{"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/posts\/121"}],"collection":[{"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/comments?post=121"}],"version-history":[{"count":3,"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/posts\/121\/revisions"}],"predecessor-version":[{"id":128,"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/posts\/121\/revisions\/128"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/media\/122"}],"wp:attachment":[{"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/media?parent=121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/categories?post=121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kevinliao.myds.me\/wordpress\/wp-json\/wp\/v2\/tags?post=121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}