{"id":4616,"date":"2018-02-20T07:00:23","date_gmt":"2018-02-20T15:00:23","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4616"},"modified":"2025-06-13T18:45:42","modified_gmt":"2025-06-14T01:45:42","slug":"create-continuous-deployment-pipeline-golang-jenkins","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/create-continuous-deployment-pipeline-golang-jenkins\/","title":{"rendered":"Golang &amp; Jenkins\ub85c \uc9c0\uc18d\uc801 \ubc30\ud3ec \ud30c\uc774\ud504\ub77c\uc778 \ub9cc\ub4e4\uae30"},"content":{"rendered":"<p>\uba87 \uc8fc \uc804\uc5d0 \uc800\ub294 Travis CI\ub77c\ub294 \uc778\uae30 \uc788\ub294 \uc11c\ube44\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec Go \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\ub85c \uc791\uc131\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc9c0\uc18d\uc801\uc73c\ub85c \ubc30\ud3ec\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc791\uc131\ud55c \uc801\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4dc\ub294 \ub370 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/\" target=\"_blank\" rel=\"noopener noreferrer\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4<\/a> NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, \ub2e8\uc704 \ud14c\uc2a4\ud2b8 \uc0dd\uc131, Golang \uc9c0\uc18d\uc801 \ud1b5\ud569 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ud574\ub2f9 \ud14c\uc2a4\ud2b8 \uc2e4\ud589, \ub9c8\uc9c0\ub9c9\uc73c\ub85c \ubaa8\ub4e0 \uac83\uc774 \uc131\uacf5\ud558\uba74 \uc6d0\uaca9 \uc11c\ubc84\uc5d0 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7ec\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \uc11c\ube44\uc2a4\ub294 \ud2b8\ub798\ube44\uc2a4 CI\ub9cc\uc774 \uc544\ub2d9\ub2c8\ub2e4. \uc2e4\uc81c\ub85c Jenkins\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc790\uccb4 CI\/CD \uc11c\ube44\uc2a4\ub97c \ud638\uc2a4\ud305\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc9c0\uc18d\uc801\uc778 \ud1b5\ud569\uacfc \uc9c0\uc18d\uc801\uc778 \ubc30\ud3ec\ub97c \uac00\ub2a5\ud558\uac8c \ud558\ub294 Golang \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc5d0 Jenkins\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><!--more--><\/p>\n<p>\uc544\uc9c1 \uc77d\uc9c0 \uc54a\uc73c\uc168\ub2e4\uba74 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/continuously-deploying-golang-application-using-travis-ci\/\" target=\"_blank\" rel=\"noopener noreferrer\">\uc774\uc804 \ud2b8\ub798\ube44\uc2a4 CI \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc0ac\uc6a9\ud55c \uace8\ub791<\/a>\uc720\uc6a9\ud55c \uc124\uba85\uc774 \ub9ce\uc73c\ub2c8 \uaf2d \uc77d\uc5b4\ubcf4\uc2dc\uae38 \ucd94\ucc9c\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\ub294 \ub3d9\uc77c\ud55c \uc790\ub8cc\uac00 \ub9ce\uc774 \ud45c\uc2dc\ub418\uc9c0\ub9cc \uc124\uba85\uc774 \ub2e4\ub974\ubbc0\ub85c \ub450 \uac00\uc9c0 \uc124\uba85\uc774 \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 Jenkins with Golang \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc81c\ub300\ub85c \uacbd\ud5d8\ud558\ub824\uba74 \ub2e4\uc74c\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/server\/\" target=\"_blank\" rel=\"noopener noreferrer\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc11c\ubc84<\/a> \ub97c \uc5b4\ub518\uac00\uc5d0 \uc124\uce58\ud569\ub2c8\ub2e4. \ubaa9\ud45c\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ubc30\ud3ec\ub41c \ud6c4 \ud574\ub2f9 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc778\uc2a4\ud134\uc2a4\ub97c \uc2e4\ud589\ud558\uace0 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h2>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc73c\ub85c Go \uac1c\ubc1c\ud558\uae30<\/h2>\n<p>\uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ud558\ub824\uba74 \ud14c\uc2a4\ud2b8\ud558\uace0 \ubc30\ud3ec\ud560 Go \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ubbf8\ub9ac \uc2dc\uc791\ud558\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74 \uae30\ub2a5\uc801\uc778 \ud504\ub85c\uc81d\ud2b8\ub97c \ub2e4\uc74c \uc8fc\uc18c\uc5d0 \uc5c5\ub85c\ub4dc\ud588\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/github.com\/couchbaselabs\/golang-ci-example\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>. \uc2e4\uc81c\ub85c \ud2b8\ub798\ube44\uc2a4 CI \uc608\uc2dc\uc640 \ub3d9\uc77c\ud55c \ud504\ub85c\uc81d\ud2b8\uc785\ub2c8\ub2e4.<\/p>\n<p>\ud504\ub85c\uc81d\ud2b8\ub97c \uc9c1\uc811 \uc0b4\ud3b4\ubcf4\uace0 \uc2f6\uc73c\uc2dc\ub2e4\uba74 \uc7a0\uc2dc \uc2dc\uac04\uc744 \ub0b4\uc5b4 \uc0b4\ud3b4\ubcf4\uc138\uc694.<\/p>\n<p>\uc5b4\ub518\uac00\uc5d0\u00a0<strong>$GOPATH<\/strong> \ub77c\ub294 \ud30c\uc77c\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\u00a0<strong>main.go<\/strong> \ub97c \ud074\ub9ad\ud558\uace0 \ub2e4\uc74c Go \ucf54\ub4dc\ub97c \ud3ec\ud568\ud558\uc138\uc694. \ub098\uc911\uc5d0 \uc790\uc138\ud788 \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">package main\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"os\"\r\n\r\n\tgocb \"gopkg.in\/couchbase\/gocb.v1\"\r\n)\r\n\r\ntype BucketInterface interface {\r\n\tGet(key string, value interface{}) (gocb.Cas, error)\r\n\tInsert(key string, value interface{}, expiry uint32) (gocb.Cas, error)\r\n}\r\n\r\ntype Database struct {\r\n\tbucket BucketInterface\r\n}\r\n\r\ntype Person struct {\r\n\tType      string `json:\"type\"`\r\n\tFirstname string `json:\"firstname\"`\r\n\tLastname  string `json:\"lastname\"`\r\n}\r\n\r\nfunc (d Database) GetPersonDocument(key string) (interface{}, error) {\r\n\tvar data interface{}\r\n\t_, err := d.bucket.Get(key, &amp;data)\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\treturn data, nil\r\n}\r\n\r\nfunc (d Database) CreatePersonDocument(key string, data interface{}) (interface{}, error) {\r\n\t_, err := d.bucket.Insert(key, data, 0)\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\treturn data, nil\r\n}\r\n\r\nfunc main() {\r\n\tfmt.Println(\"Starting the application...\")\r\n\tvar database Database\r\n\tcluster, _ := gocb.Connect(\"couchbase:\/\/\" + os.Getenv(\"DB_HOST\"))\r\n\tcluster.Authenticate(gocb.PasswordAuthenticator{Username: os.Getenv(\"DB_USER\"), Password: os.Getenv(\"DB_PASS\")})\r\n\tdatabase.bucket, _ = cluster.OpenBucket(os.Getenv(\"DB_BUCKET\"), \"\")\r\n\tfmt.Println(database.GetPersonDocument(\"8eaf1065-5bc7-49b5-8f04-c6a33472d9d5\"))\r\n\tdatabase.CreatePersonDocument(\"blawson\", Person{Type: \"person\", Firstname: \"Brett\", Lastname: \"Lawson\"})\r\n}<\/pre>\n<p>\uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \ub9ce\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc \ub9ce\uc740 \uc77c\uc774 \uc9c4\ud589\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uac00\uc838\uc624\uae30\uc5d0\uc11c\ub294 Go\uc6a9 Couchbase SDK\ub97c \uc0ac\uc6a9\ud55c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \ucef4\ud30c\uc77c\ud558\ub824\uba74 SDK\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud574\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \uba85\ub839\uc5b4\ub85c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">go get gopkg.in\/couchbase\/gocb.v1<\/pre>\n<p>\ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uae30 \uc804\uc5d0 \ud55c \uac78\uc74c \ubb3c\ub7ec\ub098\uc11c \uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc5b4\ub5bb\uac8c \uc791\ub3d9\ud574\uc57c \ud558\ub294\uc9c0 \uc54c\uc544\ubcfc \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc5ec\uae30\uc11c \ubaa9\ud45c\ub294 NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc778 Couchbase\uc5d0 \uc5f0\uacb0\ud558\uc5ec \uc77c\ubd80 \ub370\uc774\ud130\ub97c \uac80\uc0c9\ud558\uace0 \uc77c\ubd80 \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ubb3c\ub860 \uc774 \uc791\uc5c5\uc740 SDK\ub97c \ud1b5\ud574 \ub9e4\uc6b0 \uc27d\uac8c \uc218\ud589\ud560 \uc218 \uc788\uc9c0\ub9cc, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \ub300\ud55c \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub97c \ub9cc\ub4e4\uace0 \uc2f6\uc2b5\ub2c8\ub2e4. \ub2e8\uc704 \ud14c\uc2a4\ud2b8\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub300\uc0c1\uc73c\ub85c \ud14c\uc2a4\ud2b8\ud558\uc9c0 \uc54a\ub294 \uac83\uc774 \uac00\uc7a5 \uc88b\uc2b5\ub2c8\ub2e4. \ud1b5\ud569 \ud14c\uc2a4\ud2b8\ub97c \uc704\ud574 \uc800\uc7a5\ud574 \ub450\uc138\uc694. \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub300\uc0c1\uc73c\ub85c \ud14c\uc2a4\ud2b8\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 \ubaa8\uc758 \uc2dc\ub098\ub9ac\uc624\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc2e4\uc81c \uc2dc\ub098\ub9ac\uc624\uc640 \ubaa8\uc758 \uc2dc\ub098\ub9ac\uc624\ub97c \uad6c\ubd84\ud558\ub294 \uac00\uc7a5 \uc88b\uc740 \ubc29\ubc95\uc740 Go\ub85c \ub450 \uac00\uc9c0 \ubaa8\ub450\uc5d0 \ub300\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub9cc\ub4dc\ub294 \uac83\uc785\ub2c8\ub2e4. \uba54\uc778 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \uc2e4\uc81c \ud074\ub798\uc2a4\ub97c \uc778\ud130\ud398\uc774\uc2a4\uc758 \uc77c\ubd80\ub85c \uc0ac\uc6a9\ud558\uace0 \ud14c\uc2a4\ud2b8\ub294 \ubaa8\uc758 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub530\ub77c\uc11c Couchbase Go SDK\ub97c \uc704\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. <code>\ubc84\ud0b7<\/code> \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">type BucketInterface interface {\r\n\tGet(key string, value interface{}) (gocb.Cas, error)\r\n\tInsert(key string, value interface{}, expiry uint32) (gocb.Cas, error)\r\n}<\/pre>\n<p>\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ubc84\ud0b7\uc5d0\ub294 \ub2e4\uc74c\ubcf4\ub2e4 \ud6e8\uc52c \ub354 \ub9ce\uc740 \uae30\ub2a5\uc774 \uc788\uc2b5\ub2c8\ub2e4. <code>Get<\/code> \uadf8\ub9ac\uace0 <code>\uc0bd\uc785<\/code>\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc9c0\ub9cc \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \uc774 \ud568\uc218\ub9cc \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ub4b7\ubd80\ubd84\uc5d0\uc11c \uac04\ub2e8\ud558\uac8c \ud558\uae30 \uc704\ud574 \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 <code>\uad6c\uc870\uccb4<\/code> \uc0c8\ub85c\uc6b4 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc138\uc694.<\/p>\n<pre class=\"lang:default decode:true\">type Database struct {\r\n\tbucket BucketInterface\r\n}<\/pre>\n<p>\uc774 \uc608\uc81c\uc5d0\ub294 \ub370\uc774\ud130 \ubaa8\ub378\uc774 \ud558\ub098\ub9cc \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \ub2e4\uc74c\uc744 \uae30\ubc18\uc73c\ub85c \ud558\ub294 \ub370\uc774\ud130 \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4. <code>\uc0ac\ub78c<\/code> \ub370\uc774\ud130 \uad6c\uc870\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uace0 \uc790\uc720\ub86d\uac8c \ubcc0\uacbd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uacb0\uad6d \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub97c \ud558\uac8c \ub420 \ud568\uc218 \uc911 \ud558\ub098\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">func (d Database) GetPersonDocument(key string) (interface{}, error) {\r\n\tvar data interface{}\r\n\t_, err := d.bucket.Get(key, &amp;data)\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\treturn data, nil\r\n}<\/pre>\n<p>\uc5d0\uc11c <code>GetPersonDocument<\/code> \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc6b0\ub9ac\ub294 <code>\ubc84\ud0b7 \uc778\ud130\ud398\uc774\uc2a4<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c \ud0a4\ub85c \ud2b9\uc815 \ubb38\uc11c\ub97c \uac00\uc838\uc635\ub2c8\ub2e4.<\/p>\n<p>\ub9c8\ucc2c\uac00\uc9c0\ub85c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud574\uc57c \ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">func (d Database) CreatePersonDocument(key string, data interface{}) (interface{}, error) {\r\n\t_, err := d.bucket.Insert(key, data, 0)\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\treturn data, nil\r\n}<\/pre>\n<p>\ubc18\ubcf5\ud574\uc11c \ub9d0\uc500\ub4dc\ub824\uc57c \ud560 \uac83 \uac19\uc9c0\ub9cc, \uc774 \uae30\ub2a5\uc740 \ud544\uc694 \uc774\uc0c1\uc73c\ub85c \ubcf5\uc7a1\ud558\uac8c \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uba87 \uac00\uc9c0 \ud14c\uc2a4\ud2b8\ub97c \uc2dc\uc5f0\ud558\uae30 \uc704\ud574 \uc774\ub807\uac8c \ub9cc\ub4e0 \uac83\uc785\ub2c8\ub2e4. \uae30\ubd84\uc774 \ub098\uc544\uc9c8 \uc218 \uc788\ub2e4\uba74 \ub2e8\uc21c\ud55c \uae30\ub2a5\ubcf4\ub2e4\ub294 \uc880 \ub354 \ubcf5\uc7a1\ud55c \uae30\ub2a5\uc744 \ucd94\uac00\ud574 \ubcf4\uc138\uc694. <code>Get<\/code> \uadf8\ub9ac\uace0 <code>\uc0bd\uc785<\/code> \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ub7f0\ud0c0\uc784\uc5d0 \uc2e4\ud589\ub418\ub294 \ub2e4\uc74c \ucf54\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">func main() {\r\n\tfmt.Println(\"Starting the application...\")\r\n\tvar database Database\r\n\tcluster, _ := gocb.Connect(\"couchbase:\/\/\" + os.Getenv(\"DB_HOST\"))\r\n\tcluster.Authenticate(gocb.PasswordAuthenticator{Username: os.Getenv(\"DB_USER\"), Password: os.Getenv(\"DB_PASS\")})\r\n\tdatabase.bucket, _ = cluster.OpenBucket(os.Getenv(\"DB_BUCKET\"), \"\")\r\n\tfmt.Println(database.GetPersonDocument(\"8eaf1065-5bc7-49b5-8f04-c6a33472d9d5\"))\r\n\tdatabase.CreatePersonDocument(\"blawson\", Person{Type: \"person\", Firstname: \"Brett\", Lastname: \"Lawson\"})\r\n}<\/pre>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \uc2e4\ud589\ub418\uba74 \ud658\uacbd \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uc5ec Couchbase\uc5d0 \uc5f0\uacb0\uc744 \uc124\uc815\ud569\ub2c8\ub2e4. \uc5f4\ub9b0 \ubc84\ud0b7\uc740 \uc6b0\ub9ac\uc758 <code>\ubc84\ud0b7 \uc778\ud130\ud398\uc774\uc2a4<\/code>\ub97c \ud074\ub9ad\ud55c \ub2e4\uc74c \ub450 \ud568\uc218\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub807\ub2e4\uba74 \uc774\ub97c \uc5b4\ub5bb\uac8c \ud14c\uc2a4\ud2b8\ud560 \uc218 \uc788\uc744\uae4c\uc694?<\/p>\n<p>\ud504\ub85c\uc81d\ud2b8\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ud30c\uc77c\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.\u00a0<strong>main_test.go<\/strong> \ub97c \ub2e4\uc74c \ucf54\ub4dc\ub85c \ub300\uccb4\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">package main\r\n\r\nimport (\r\n\t\"encoding\/json\"\r\n\t\"os\"\r\n\t\"testing\"\r\n\r\n\t\"github.com\/mitchellh\/mapstructure\"\r\n\tgocb \"gopkg.in\/couchbase\/gocb.v1\"\r\n)\r\n\r\ntype MockBucket struct{}\r\n\r\nvar testdatabase Database\r\n\r\nfunc convert(start interface{}, end interface{}) error {\r\n\tbytes, err := json.Marshal(start)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\terr = json.Unmarshal(bytes, end)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (b MockBucket) Get(key string, value interface{}) (gocb.Cas, error) {\r\n\tswitch key {\r\n\tcase \"nraboy\":\r\n\t\terr := convert(Person{Type: \"person\", Firstname: \"Nic\", Lastname: \"Raboy\"}, value)\r\n\t\tif err != nil {\r\n\t\t\treturn 0, err\r\n\t\t}\r\n\tdefault:\r\n\t\treturn 0, gocb.ErrKeyNotFound\r\n\t}\r\n\treturn 1, nil\r\n}\r\n\r\nfunc (b MockBucket) Insert(key string, value interface{}, expiry uint32) (gocb.Cas, error) {\r\n\tswitch key {\r\n\tcase \"nraboy\":\r\n\t\treturn 0, gocb.ErrKeyExists\r\n\t}\r\n\treturn 1, nil\r\n}\r\n\r\nfunc TestMain(m *testing.M) {\r\n\ttestdatabase.bucket = &amp;MockBucket{}\r\n\tos.Exit(m.Run())\r\n}\r\n\r\nfunc TestGetPersonDocument(t *testing.T) {\r\n\tdata, err := testdatabase.GetPersonDocument(\"nraboy\")\r\n\tif err != nil {\r\n\t\tt.Fatalf(\"Expected `err` to be `%s`, but got `%s`\", \"nil\", err)\r\n\t}\r\n\tvar person Person\r\n\tmapstructure.Decode(data, &amp;person)\r\n\tif person.Type != \"person\" {\r\n\t\tt.Fatalf(\"Expected `type` to be %s, but got %s\", \"person\", person.Type)\r\n\t}\r\n}\r\n\r\nfunc TestCreatePersonDocument(t *testing.T) {\r\n\t_, err := testdatabase.CreatePersonDocument(\"blawson\", Person{Type: \"person\", Firstname: \"Brett\", Lastname: \"Lawson\"})\r\n\tif err != nil {\r\n\t\tt.Fatalf(\"Expected `err` to be `%s`, but got `%s`\", \"nil\", err)\r\n\t}\r\n}<\/pre>\n<p>\uc774 \ud30c\uc77c\uc774 \uc0c1\ub2f9\ud788 \uae38\uace0 \ub2e4\ub978 \uc0ac\uc6a9\uc790 \uc815\uc758 \ud328\ud0a4\uc9c0\ub3c4 \ud3ec\ud568\ub418\uc5b4 \uc788\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\ub97c \ubd84\uc11d\ud558\uae30 \uc804\uc5d0 \ud574\ub2f9 \ud328\ud0a4\uc9c0\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uba85\ub839\uc904\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">go get github.com\/mitchellh\/mapstructure<\/pre>\n<p>\ub9f5\uad6c\uc870 \ud328\ud0a4\uc9c0\ub97c \uc0ac\uc6a9\ud558\uba74 \uc9c0\ub3c4\ub97c \uac00\uc838\uc640\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uc2e4\uc81c \ub370\uc774\ud130 \uad6c\uc870\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>\uc0ac\ub78c<\/code> \ub370\uc774\ud130 \uad6c\uc870\ub85c \ubcc0\uacbd\ud588\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc6b0\ub9ac\uac00 \ud560 \uc218 \uc788\ub294 \uc77c\uc5d0 \uc57d\uac04\uc758 \uc720\uc5f0\uc131\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub9f5\uad6c\uc870 \ud328\ud0a4\uc9c0\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\ub824\uba74 \uc774\uc804\uc5d0 \uc791\uc131\ud55c \uae00\uc744 \ucc38\uc870\ud558\uc138\uc694,\u00a0<a href=\"https:\/\/www.thepolyglotdeveloper.com\/2017\/04\/decode-map-values-native-golang-structures\/\" target=\"_blank\" rel=\"noopener noreferrer\">\ub9f5 \uac12\uc744 \ub124\uc774\ud2f0\ube0c Golang \uad6c\uc870\ub85c \ub514\ucf54\ub529\ud558\uae30<\/a>.<\/p>\n<p>\uc885\uc18d\uc131\uc774 \uc124\uce58\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\uc81c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uba54\uc778 \ucf54\ub4dc\uc5d0\uc11c Go SDK\uc758 \ubc84\ud0b7\uc744 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud588\ub294\uc9c0 \uae30\uc5b5\ud558\uc2dc\ub098\uc694? \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc5d0\uc11c\ub294 \uadf8\ub807\uac8c \ud558\uc9c0 \uc54a\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">type MockBucket struct{}\r\n\r\nvar testdatabase Database<\/pre>\n<p>\ud14c\uc2a4\ud2b8 \ucf54\ub4dc\uc5d0\uc11c\ub294 \ube48 <code>\uad6c\uc870\uccb4<\/code>\ub85c \uc124\uc815\ub418\uc5b4 \uc788\uc9c0\ub9cc <code>\ubc84\ud0b7 \uc778\ud130\ud398\uc774\uc2a4<\/code> \uc5d0\uc11c <code>\ub370\uc774\ud130\ubca0\uc774\uc2a4<\/code> \ub370\uc774\ud130 \uad6c\uc870\uac00 \uba54\uc778 \ucf54\ub4dc\uc5d0\uc11c \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub370\uc774\ud130 \uad6c\uc870\uc758 \uc2e4\uc81c \uc124\uc815\uc740 <code>TestMain<\/code> \ud568\uc218\ub294 \ub2e4\ub978 \ubaa8\ub4e0 \ud14c\uc2a4\ud2b8\ubcf4\ub2e4 \uba3c\uc800 \uc2e4\ud589\ub429\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">func TestMain(m *testing.M) {\r\n\ttestdatabase.bucket = &amp;MockBucket{}\r\n\tos.Exit(m.Run())\r\n}<\/pre>\n<p>\uc774\uc81c \uc6b0\ub9ac\ub294 <code>\ubaa8\uc758 \ubc84\ud0b7<\/code>\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4. <code>gocb.Bucket<\/code> \uac00 \uc788\uc5c8\uc744\uc9c0\ub3c4 \ubaa8\ub985\ub2c8\ub2e4. \ub300\uc2e0, \uc6b0\ub9ac\ub294 <code>\ubc84\ud0b7 \uc778\ud130\ud398\uc774\uc2a4<\/code> \uc815\uc758.<\/p>\n<p>\uc6b0\ub9ac\ub294 <code>Get<\/code> \ubc0f <code>\uc0bd\uc785<\/code> \ud568\uc218\ub97c \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uc815\uc758\ub41c \ub300\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubd80\ud130 \uc2dc\uc791\ud558\uc5ec <code>Get<\/code> \ud568\uc218\uc5d0\ub294 \ub2e4\uc74c\uc774 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">func convert(start interface{}, end interface{}) error {\r\n\tbytes, err := json.Marshal(start)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\terr = json.Unmarshal(bytes, end)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (b MockBucket) Get(key string, value interface{}) (gocb.Cas, error) {\r\n\tswitch key {\r\n\tcase \"nraboy\":\r\n\t\terr := convert(Person{Type: \"person\", Firstname: \"Nic\", Lastname: \"Raboy\"}, value)\r\n\t\tif err != nil {\r\n\t\t\treturn 0, err\r\n\t\t}\r\n\tdefault:\r\n\t\treturn 0, gocb.ErrKeyNotFound\r\n\t}\r\n\treturn 1, nil\r\n}<\/pre>\n<p>\uc0ac\uc6a9 \uc911\uc778 \uacbd\uc6b0 <code>\ubaa8\uc758 \ubc84\ud0b7<\/code> \uadf8\ub9ac\uace0 \uc6b0\ub9ac\ub294 <code>Get<\/code>\ud0a4\uac00 \ud558\ub098\ub9cc \uc720\ud6a8\ud560 \uac83\uc73c\ub85c \uc608\uc0c1\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uac83\uc740 \ud14c\uc2a4\ud2b8\uc774\ubbc0\ub85c \uaddc\uce59\uc744 \uc815\ud55c\ub2e4\ub294 \uc810\uc744 \uae30\uc5b5\ud558\uc138\uc694. \ub9cc\uc57d <code>nraboy<\/code> \ub97c \ud0a4\ub85c \uc0ac\uc6a9\ud558\uba74 \uc77c\ubd80 \ubaa8\uc758 \ub370\uc774\ud130\ub97c \ubc18\ud658\ud558\uace0, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 <em>\ud0a4\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc74c<\/em> \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \uc7a0\uc7ac\uc801\uc73c\ub85c \uc5ec\ub7ec \uc720\ud615\uc758 \ub370\uc774\ud130\ub85c \uc791\uc5c5\ud558\uace0 \uc788\uc73c\ubbc0\ub85c \ub370\uc774\ud130\ub97c \ubcc0\ud658\ud558\ub824\uba74 <code>\ubcc0\ud658<\/code> \ud568\uc218\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c \uc778\ud130\ud398\uc774\uc2a4\ub97c JSON\uc73c\ub85c \ub9c8\uc0ec\ub9c1\ud55c \ub2e4\uc74c \ub2e4\uc2dc \ub9c8\uc0ec\ub9c1\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uadf8 \ubaa8\uc758 \uc0ac\ub840\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. <code>\uc0bd\uc785<\/code> \ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">func (b MockBucket) Insert(key string, value interface{}, expiry uint32) (gocb.Cas, error) {\r\n\tswitch key {\r\n\tcase \"nraboy\":\r\n\t\treturn 0, gocb.ErrKeyExists\r\n\t}\r\n\treturn 1, nil\r\n}<\/pre>\n<p>\ubaa8\uc758 \ubc84\ud0b7\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \uc0bd\uc785\ud558\ub824\uace0 \ud558\uba74 \ud0a4\uac00 \ub2e4\uc74c\uacfc \uac19\uc9c0 \uc54a\uc744 \uac83\uc73c\ub85c \uc608\uc0c1\ub429\ub2c8\ub2e4. <code>nraboy<\/code>\ub97c \ubc18\ud658\ud558\uace0, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uc624\ub958\ub97c \ubc1c\uc0dd\uc2dc\ud0b5\ub2c8\ub2e4.<\/p>\n<p>\uc778\ud130\ud398\uc774\uc2a4 \ud568\uc218\uac00 \uc0dd\uc131\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\uc81c \uba54\uc778 Go \ucf54\ub4dc\uc758 \ud568\uc218\ub97c \ud14c\uc2a4\ud2b8\ud558\ub294 \uc2e4\uc81c \ud14c\uc2a4\ud2b8\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">func TestGetPersonDocument(t *testing.T) {\r\n\tdata, err := testdatabase.GetPersonDocument(\"nraboy\")\r\n\tif err != nil {\r\n\t\tt.Fatalf(\"Expected `err` to be `%s`, but got `%s`\", \"nil\", err)\r\n\t}\r\n\tvar person Person\r\n\tmapstructure.Decode(data, &amp;person)\r\n\tif person.Type != \"person\" {\r\n\t\tt.Fatalf(\"Expected `type` to be %s, but got %s\", \"person\", person.Type)\r\n\t}\r\n}<\/pre>\n<p>\uadf8\ub9ac\uace0 <code>TestGetPersonDocument<\/code> \ub294 \uc2e4\uc81c \ubc84\ud0b7\uc5d0\uc11c \ubaa8\uc758 \ubc84\ud0b7\uc744 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4. <code>GetPersonDocument<\/code> \ud568\uc218\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4. \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc73c\ubbc0\ub85c \uc2e4\uc81c Couchbase Go SDK \ud568\uc218\ub4e0 \uc6b0\ub9ac\uac00 \uc0ac\uc6a9\ud55c \ubaa8\uc758 \ud568\uc218\ub4e0 \uc5b4\ub5a4 \uc778\ud130\ud398\uc774\uc2a4 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560\uc9c0 Go\uac00 \uc54c\uc544\ub0bc \uac83\uc785\ub2c8\ub2e4. \uacb0\uacfc\uc5d0 \ub530\ub77c \ud14c\uc2a4\ud2b8\uac00 \uc9c4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:default decode:true\">func TestCreatePersonDocument(t *testing.T) {\r\n\t_, err := testdatabase.CreatePersonDocument(\"blawson\", Person{Type: \"person\", Firstname: \"Brett\", Lastname: \"Lawson\"})\r\n\tif err != nil {\r\n\t\tt.Fatalf(\"Expected `err` to be `%s`, but got `%s`\", \"nil\", err)\r\n\t}\r\n}<\/pre>\n<p>\uadf8\ub9ac\uace0 <code>TestCreatePersonDocument<\/code> \ub294 \uc774\uc804\uacfc \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc6b0\ub9ac\ub294 \uc2e4\uc81c <code>\uc0ac\ub78c \ubb38\uc11c \ub9cc\ub4e4\uae30<\/code>\ud558\uc9c0\ub9cc \uc6b0\ub9ac\ub294 \ubaa8\uc758 \ubc84\ud0b7\uacfc \ud568\uaed8 \ubaa8\uc758 <code>\uc0bd\uc785<\/code> \ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc2dc\uc810\uc5d0\uc11c \uc6b0\ub9ac\ub294 \ud14c\uc2a4\ud2b8\uac00 \uc644\ub8cc\ub41c \uae30\ub2a5\uc801\uc778 Go \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubcf4\uc720\ud558\uace0 \uc788\uc73c\uba70 \uc9c0\uc18d\uc801\uc778 \ud1b5\ud569 \ubc0f \uc9c0\uc18d\uc801\uc778 \ubc30\ud3ec\ub97c \uc704\ud55c \uc900\ube44\uac00 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>SSH \ubc0f Golang \ubc30\ud3ec\ub97c \uc704\ud55c Jenkins \uc124\uce58 \ubc0f \uad6c\uc131\ud558\uae30<\/h2>\n<p>\ub2e4\uc74c \ub2e8\uacc4\uc5d0\uc11c\ub294 \ubc30\ud3ec\ub97c \ubc1b\uc744 \uc900\ube44\uac00 \ub41c \uc6d0\uaca9 \uc11c\ubc84\uac00 \uc788\ub2e4\uace0 \uac00\uc815\ud569\ub2c8\ub2e4. \uc800\ub294 \uadf8\ub807\uc9c0 \uc54a\uc558\uae30 \ub54c\ubb38\uc5d0 Ubuntu\ub85c Docker \ucee8\ud14c\uc774\ub108\ub97c \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4. \uc2e4\uc81c\ub85c \uc81c Jenkins \uc124\uce58\uc640 \uc6d0\uaca9 \uc11c\ubc84 \ubaa8\ub450 Docker\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc81c\uac00 \ud55c \ubc29\ubc95\uc744 \ub530\ub77c\ud558\uace0 \uc2f6\ub2e4\uba74 \uc5ec\uae30\ub97c \ud655\uc778\ud558\uc138\uc694. \uba85\ub839\uc904\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec Ubuntu \ucee8\ud14c\uc774\ub108\ub97c \uc2dc\uc791\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">docker run -it --name ubuntu ubuntu \/bin\/bash<\/pre>\n<p>\uc704\uc758 \uba85\ub839\uc740 Ubuntu \ucee8\ud14c\uc774\ub108\ub97c \ubc30\ud3ec\ud558\uace0 \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4. <code>\uc6b0\ubd84\ud22c<\/code>. \ubc30\ud3ec\uac00 \uc644\ub8cc\ub418\uba74 \ub300\ud654\ud615 \ud130\ubbf8\ub110\uc744 \ud1b5\ud574 \uc5f0\uacb0\ub429\ub2c8\ub2e4. \ucee8\ud14c\uc774\ub108 \uac04 \ud1b5\uc2e0\uc5d0\ub294 \ub9e4\ud551\ub41c \ud3ec\ud2b8\uac00 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ud3ec\ud2b8\ub97c \uc5f4\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Ubuntu \ucee8\ud14c\uc774\ub108\uc5d0\ub294 SSH \uc11c\ubc84\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc73c\ubbc0\ub85c \uc774\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. Ubuntu \uc178\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">apt-get update\r\napt-get install openssh-server\r\nservice ssh restart<\/pre>\n<p>\uc704\uc758 \uba85\ub839\uc740 \ub2e4\uc74c\uc744 \uc124\uce58\ud569\ub2c8\ub2e4. <code>openssh-server<\/code> \ub97c \ud074\ub9ad\ud558\uace0 \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774\uc655 \ud558\ub294 \uae40\uc5d0 Jenkins\uac00 \uc0ac\uc6a9\ud560 \uacf5\uac1c \ud0a4\uc640 \ube44\uacf5\uac1c \ud0a4 \uc870\ud569\uc744 \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>Ubuntu \uc178\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">ssh-keygen -t rsa<\/pre>\n<p>\uc644\ub8cc\ub418\uba74\u00a0<strong>~\/.ssh\/id_rsa.pub<\/strong> \ucf58\ud150\uce20\ub85c\u00a0<strong>~\/.ssh\/authorized_keys<\/strong> \ub97c \uc0ac\uc6a9\ud560 \uac83\uc774\ubbc0\ub85c Jenkins \uc11c\ubc84\uc5d0\uc11c \uac1c\uc778 \ud0a4\ub97c \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc800\ub294 Jenkins\ub97c Docker \ucee8\ud14c\uc774\ub108\ub85c\ub3c4 \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\ub294 \uc810\uc744 \uae30\uc5b5\ud558\uc138\uc694. \uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4\uba74 \ucee8\ud14c\uc774\ub108\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4. \ubaa8\ub4e0 \uac83\uc774 \uc798 \ubc88\uc5ed\ub420 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>Docker\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec Jenkins \ucee8\ud14c\uc774\ub108\ub97c \uc2a4\ud540\uc5c5\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkins<\/pre>\n<p>\uc704\uc758 \uba85\ub839\uc740 \ubd84\ub9ac\ub41c \ubaa8\ub4dc\ub85c Jenkins\ub97c \ubc30\ud3ec\ud558\uace0 \uc77c\ubd80 \ud3ec\ud2b8\ub97c \ub9e4\ud551\ud569\ub2c8\ub2e4.<\/p>\n<p>\ubc29\ubb38 \uc2dc\u00a0<strong>https:\/\/localhost:8080<\/strong> \uc6f9 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ub9c8\ubc95\uc0ac\uc758 \ub2e8\uacc4\ub97c \ub530\ub77c \uad8c\uc7a5 \ud50c\ub7ec\uadf8\uc778 \uc124\uce58\ub97c \uc120\ud0dd\ud588\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<p>\uae30\ubcf8 Jenkins \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \ub3c4\ub2ec\ud558\uba74 \ub2e4\uc74c\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.\u00a0<strong>\uc820\ud0a8\uc2a4 \uad00\ub9ac -&gt; \ud50c\ub7ec\uadf8\uc778 \uad00\ub9ac<\/strong> \uba87 \uac00\uc9c0\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud574\uc57c \ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4617 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/golang-jenkins-plugins.png\" alt=\"Golang Jenkins Plugins\" width=\"2082\" height=\"452\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins.png 2082w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins-300x65.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins-1024x222.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins-768x167.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins-1536x333.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins-2048x445.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins-20x4.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins-1320x287.png 1320w\" sizes=\"auto, (max-width: 2082px) 100vw, 2082px\" \/><\/p>\n<p>Go \ucf54\ub4dc\ub97c \ucef4\ud30c\uc77c\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc774 \ud544\uc694\ud558\ubbc0\ub85c <a href=\"https:\/\/wiki.jenkins.io\/display\/JENKINS\/Go+Plugin\" target=\"_blank\" rel=\"noopener noreferrer\">\uc774\ub3d9<\/a> \ud50c\ub7ec\uadf8\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ube4c\ub4dc\ub97c \uc704\ud574 \uc790\uccb4 \uc0ac\uc6a9\uc790 \uc815\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc57c \ud558\ubbc0\ub85c <a href=\"https:\/\/wiki.jenkins.io\/display\/JENKINS\/PostBuildScript+Plugin\" target=\"_blank\" rel=\"noopener noreferrer\">\ud3ec\uc2a4\ud2b8\ube4c\ub4dc\uc2a4\ud06c\ub9bd\ud2b8<\/a> \ud50c\ub7ec\uadf8\uc778\uc744 \uc124\uce58\ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc6d0\uaca9 \uc11c\ubc84\uc5d0 \uac8c\uc2dc\ud558\uace0 \uba85\ub839\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub824\uba74 <a href=\"https:\/\/wiki.jenkins.io\/display\/JENKINS\/Publish+Over+SSH+Plugin\" target=\"_blank\" rel=\"noopener noreferrer\">SSH\ub97c \ud1b5\ud55c \uac8c\uc2dc<\/a> \ub2e4\ub978 \ud50c\ub7ec\uadf8\uc778\uacfc \ud568\uaed8 \uc81c\uacf5\ub418\ub294 \ud50c\ub7ec\uadf8\uc778\uc785\ub2c8\ub2e4.<\/p>\n<p>\ud50c\ub7ec\uadf8\uc778 \ub2e4\uc6b4\ub85c\ub4dc\uac00 \uc644\ub8cc\ub418\uba74 \uc804\uc5ed\uc801\uc73c\ub85c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uae30\ubcf8 Jenkins \ub300\uc2dc\ubcf4\ub4dc\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.\u00a0<strong>Jenkins \uad00\ub9ac -&gt; \uae00\ub85c\ubc8c \ub3c4\uad6c \uad6c\uc131<\/strong>\u00a0\ub97c \ud074\ub9ad\ud558\uace0 \uc774\ub3d9 \uc139\uc158\uc744 \uac80\uc0c9\ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4618 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/golang-jenkins-config.png\" alt=\"Golang Jenkins Configuration\" width=\"2048\" height=\"866\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-config.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-config-300x127.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-config-1024x433.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-config-768x325.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-config-1536x650.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-config-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-config-1320x558.png 1320w\" sizes=\"auto, (max-width: 2048px) 100vw, 2048px\" \/><\/p>\n<p>\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 Go \ubc84\uc804\uc744 \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 1.8 \ubc84\uc804\ub9cc \ud544\uc694\ud558\uc9c0\ub9cc \ub098\uba38\uc9c0\ub294 \uc0ac\uc6a9\uc790\uac00 \uacb0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ub2e8\uacc4\ub294 \ubc30\ud3ec\ub97c \uc704\ud55c SSH \ud0a4\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc544\uc9c1 \uc6cc\ud06c\ud50c\ub85c\ub97c \ub9cc\ub4dc\ub294 \uac83\uc774 \uc544\ub2c8\ub77c Jenkins\ub97c \uc804\uccb4\uc801\uc73c\ub85c \uad6c\uc131\ud558\ub294 \uac83\ubfd0\uc774\ub77c\ub294 \uc810\uc744 \uae30\uc5b5\ud558\uc138\uc694.<\/p>\n<p>\uae30\ubcf8 Jenkins \ub300\uc2dc\ubcf4\ub4dc\uc5d0\uc11c \ub2e4\uc74c\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.\u00a0<strong>Jenkins \uad00\ub9ac -&gt; \uc2dc\uc2a4\ud15c \uad6c\uc131<\/strong> \ub97c \ud074\ub9ad\ud558\uace0 SSH \uc139\uc158\uc744 \ucc3e\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uac1c\uc778 \ud0a4\uc640 \uc11c\ubc84 \uc5f0\uacb0 \uc815\ubcf4\ub97c \uc81c\uacf5\ud574\uc57c \ud569\ub2c8\ub2e4. Jenkins\uc640 \uc6d0\uaca9 \uc11c\ubc84\uac00 \ubaa8\ub450 \ub0b4 \ub124\ud2b8\uc6cc\ud06c\uc640 \ub3d9\uc77c\ud55c \ub124\ud2b8\uc6cc\ud06c\uc5d0 \uc788\ub294 Docker \ucee8\ud14c\uc774\ub108\uc778 \uacbd\uc6b0 \ub85c\uceec \ud638\uc2a4\ud2b8\uac00 \uc544\ub2cc \ucee8\ud14c\uc774\ub108 IP \uc8fc\uc18c \ub610\ub294 \ud638\uc2a4\ud2b8 \uc774\ub984\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uc78a\uc9c0 \ub9c8\uc138\uc694.<\/p>\n<p>\ubaa8\ub4e0 \uad6c\uc131\uc774 \uc644\ub8cc\ub418\uba74 \ub2e4\uc74c\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.\u00a0<strong>\uc0c8 \ud56d\ubaa9<\/strong> \ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4619 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/jenkins-golang-project.png\" alt=\"New Jenkins Golang Project\" width=\"2866\" height=\"922\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-project.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-project-300x97.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-project-1024x330.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-project-768x247.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-project-1536x494.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-project-20x6.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-project-1320x425.png 1320w\" sizes=\"auto, (max-width: 2866px) 100vw, 2866px\" \/><\/p>\n<p>\uc774\ub984\uc744 \uc9c0\uc815\ud558\uace0 \ub2e4\uc74c\uc744 \uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4.\u00a0<strong>\ud504\ub9ac\uc2a4\ud0c0\uc77c \ud504\ub85c\uc81d\ud2b8<\/strong> \ub97c \ucd94\uac00\ud558\uc5ec \uc790\uc2e0\ub9cc\uc758 \uc6cc\ud06c\ud50c\ub85c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub984\uc774 \ube4c\ub4dc\ub418\ub294 \ud504\ub85c\uc81d\ud2b8 \ubc14\uc774\ub108\ub9ac\uac00 \ub418\ubbc0\ub85c \uc774\ub984\uc744 \uba54\ubaa8\ud574 \ub450\uc138\uc694.<\/p>\n<p>\uc774\uc81c \uc6cc\ud06c\ud50c\ub85c\uc6b0\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800\u00a0<strong>\uc18c\uc2a4 \ucf54\ub4dc \uad00\ub9ac<\/strong> \uc139\uc158\uc744 \ucc38\uc870\ud558\uc138\uc694. \uc774 \ud504\ub85c\uc81d\ud2b8\ub294 <a href=\"https:\/\/github.com\/couchbaselabs\/golang-ci-example\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>\uc774 \uc788\uc73c\ubbc0\ub85c \ubc18\ub4dc\uc2dc \ud65c\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4620 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/jenkins-golang-source-management.png\" alt=\"Jenkins Source Code Management Golang\" width=\"2880\" height=\"1056\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-source-management.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-source-management-300x110.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-source-management-1024x376.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-source-management-768x282.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-source-management-1536x563.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-source-management-20x7.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-source-management-1320x484.png 1320w\" sizes=\"auto, (max-width: 2880px) 100vw, 2880px\" \/><\/p>\n<p>\uc774 \uc608\uc81c\uc758 Jenkins\ub294 \ub3c4\uba54\uc778\uc774 \uc544\ub2cc \ub85c\uceec \ud638\uc2a4\ud2b8\uc5d0\uc11c \uc2e4\ud589 \uc911\uc774\ubbc0\ub85c \ube4c\ub4dc \ud2b8\ub9ac\uac70\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uc81c\ub85c \uc544\ubb34\uac83\ub3c4 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \uc218\ub3d9\uc73c\ub85c \ud2b8\ub9ac\uac70\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 \uc55e\uc11c \uc9c0\uc815\ud55c Go \ubc84\uc804\uc73c\ub85c \ube4c\ub4dc \ud658\uacbd\uc744 \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4621 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/jenkins-golang-build-environment.png\" alt=\"Jenkins Golang Build Environment\" width=\"2880\" height=\"818\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-build-environment.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-build-environment-300x85.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-build-environment-1024x291.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-build-environment-768x218.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-build-environment-1536x437.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-build-environment-20x6.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-build-environment-1320x375.png 1320w\" sizes=\"auto, (max-width: 2880px) 100vw, 2880px\" \/><\/p>\n<p>\uc6cc\ud06c\ud50c\ub85c\uc6b0\uac00 \uc2dc\uc791\ub418\uba74 \ud14c\uc2a4\ud2b8 \ub610\ub294 \ube4c\ub4dc\ub97c \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 \ud574\ub2f9 \ubc84\uc804\uc758 Go\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc5ec \uc124\uce58\ud569\ub2c8\ub2e4.<\/p>\n<p>\ube4c\ub4dc \ub2e8\uacc4\uc5d0\uc11c\ub294 \uc791\uc5c5\uc758 \ud750\ub984\uc744 \ub9e4\uc6b0 \uae54\ub054\ud558\uac8c \uc720\uc9c0\ud558\uae30 \uc704\ud574 \uc138 \uac00\uc9c0 \ub2e8\uacc4\ub97c \ubd84\ub9ac\ud558\uc5ec \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4622 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/jenkins-golang-prep-test-build.png\" alt=\"Jenkins Golang Build\" width=\"2880\" height=\"1250\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-prep-test-build.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-prep-test-build-300x130.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-prep-test-build-1024x445.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-prep-test-build-768x333.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-prep-test-build-1536x667.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-prep-test-build-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-golang-prep-test-build-1320x573.png 1320w\" sizes=\"auto, (max-width: 2880px) 100vw, 2880px\" \/><\/p>\n<p>\uccab \ubc88\uc9f8 \ube4c\ub4dc \ub2e8\uacc4\ub294 Go \ud328\ud0a4\uc9c0\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ud328\ud0a4\uc9c0\uac00 \uc900\ube44\ub418\uba74 \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud55c \ud6c4\uc5d0\ub294 <code>\ube4c\ub4dc \uc2dc\uc791<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \ubc14\uc774\ub108\ub9ac\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774 \ub2e8\uacc4 \uc911 \ud558\ub098\ub77c\ub3c4 \uc2e4\ud328\ud558\uba74 \uc804\uccb4 \ube4c\ub4dc\uac00 \uc2e4\ud328\ud558\ub294 \uac83\uc774 \ub2f9\uc5f0\ud55c \uc774\uce58\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub9c8\uc9c0\ub9c9 \ub2e8\uacc4\ub294 \ubc30\ud3ec\uc785\ub2c8\ub2e4. \ubc30\ud3ec\ub294\u00a0<strong>\ube4c\ub4dc \ud6c4 \uc791\uc5c5,<\/strong> \ubc14\uc774\ub108\ub9ac\ub97c SSH\ub97c \ud1b5\ud574 \uc804\uc1a1\ud558\uace0 \uc2e4\ud589\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4623 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/02\/jenkins-deploy-golang.png\" alt=\"Jenkins Deploy with SSH\" width=\"2880\" height=\"1326\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-deploy-golang.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-deploy-golang-300x138.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-deploy-golang-1024x472.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-deploy-golang-768x354.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-deploy-golang-1536x707.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-deploy-golang-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/jenkins-deploy-golang-1320x608.png 1320w\" sizes=\"auto, (max-width: 2880px) 100vw, 2880px\" \/><\/p>\n<p>\uc774 \ud504\ub85c\uc138\uc2a4\uc5d0\ub294 \uc2e4\uc81c\ub85c \ub450 \uac1c\uc758 \uc804\uc1a1 \uc138\ud2b8\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4.<\/p>\n<p>\uccab \ubc88\uc9f8 \ub2e8\uacc4\ub294 \uc18c\uc2a4 \ud30c\uc77c(\ubc14\uc774\ub108\ub9ac)\uc744 \uac00\uc838\uc640\uc11c \uc774\uc804\uc5d0 \ub9cc\ub4e0 SSH \ud504\ub85c\ud544\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc804\uc1a1\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ud30c\uc77c\uc774 \uc804\uc1a1\ub418\uba74 \ud30c\uc77c\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \uad8c\ud55c\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud30c\uc77c\uc774 \uc5c5\ub85c\ub4dc\ub41c \ud6c4, \uc2e4\uc81c\ub85c \ub2e4\ub978\u00a0<strong>\uc804\uc1a1 \uc138\ud2b8<\/strong>. \ub450 \ubc88\uc9f8 \uc138\ud2b8\uc5d0\ub294 \uc18c\uc2a4 \ud30c\uc77c \ub300\uc2e0 \uba85\ub839\uc5b4\ub9cc \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default decode:true\">DB_HOST=ec2-34-226-41-140.compute-1.amazonaws.com DB_USER=demo DB_PASS=123456 DB_BUCKET=example .\/Golang_CI<\/pre>\n<p>\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \ud658\uacbd \ubcc0\uc218\ub85c \uc0ac\uc6a9\ud560 \ubcc0\uc218\ub97c \uc804\ub2ec\ud558\uace0 \uc788\ub294 \uac83\uc744 \uc8fc\ubaa9\ud558\uc138\uc694. \uc0ac\uc6a9 \uc911\uc778 \ubcc0\uc218\ub85c \ubc14\uafb8\uac70\ub098 \ubcf4\uc548\uc744 \uc704\ud574 \uc11c\ubc84\uc5d0 \uc774\ub7ec\ud55c \ubcc0\uc218\ub97c \uc124\uc815\ud558\ub294 \ub4f1 \ub2e4\ub978 \uc811\uadfc \ubc29\uc2dd\uc744 \uace0\ub824\ud574 \ubcf4\uc138\uc694.<\/p>\n<p>\uc774\ub860\uc801\uc73c\ub85c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubc30\ud3ec\ud560 \ub54c \uc774 \ub9c8\uc9c0\ub9c9 \uba85\ub839\uc740 \uc5f0\uacb0 \uc815\ubcf4\ub85c \uc11c\ubc84\ub97c \uc2dc\uc791\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<h2>\uacb0\ub860<\/h2>\n<p>\ubc29\uae08 \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc168\uc2b5\ub2c8\ub2e4. <span style=\"font-weight: 400\">\ub2e4\uc74c\uc744 \uc704\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc758 Jenkins \ubc0f \uace8\ub791 <\/span>\uc9c0\uc18d\uc801\uc778 \ubc30\ud3ec\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \ubb34\uc5c7\ubcf4\ub2e4\ub3c4 \uc800\ud76c\ub294 \uc2e4\uc81c\ub85c <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/\" target=\"_blank\" rel=\"noopener noreferrer\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4<\/a> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc6d0\uaca9 \uc11c\ubc84\uc640 \uc820\ud0a8\uc2a4 \uc11c\ubc84\ub97c \ucc98\ub9ac\ud558\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4. \uc124\uc815\uc740 \ub2e4\ub97c \uc218 \uc788\uc9c0\ub9cc \ub2e8\uacc4\ub294 \uac70\uc758 \ub3d9\uc77c\ud569\ub2c8\ub2e4.<\/p>\n<p>Couchbase\uc640 \ud568\uaed8 Jenkins \ubc0f Go\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uace0 \uc2f6\ub2e4\uba74 <a href=\"https:\/\/www.couchbase.com\/blog\/ko\/developers\/\" target=\"_blank\" rel=\"noopener noreferrer\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \uac1c\ubc1c\uc790 \ud3ec\ud138<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>A few weeks ago I had written about continuously deploying an application written with the Go programming language using a popular service called Travis CI. This example demonstrated creating an application that used a Couchbase NoSQL database, creating unit tests, [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816,1820],"tags":[1919,2031,1567,2150,1565,1725,1921],"ppma_author":[9032],"class_list":["post-4616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","category-golang","tag-cd","tag-ci","tag-continuous-deployment","tag-continuous-integration","tag-jenkins","tag-nosql-database","tag-pipeline"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Continuous Deployment Pipelines with Golang + Jenkins<\/title>\n<meta name=\"description\" content=\"In this Couchbase post find out how to use Jenkins for a pipeline for a Golang application, enabling continuous integration and continuous deployment.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/create-continuous-deployment-pipeline-golang-jenkins\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create Continuous Deployment Pipelines with Golang &amp; Jenkins\" \/>\n<meta property=\"og:description\" content=\"In this Couchbase post find out how to use Jenkins for a pipeline for a Golang application, enabling continuous integration and continuous deployment.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/create-continuous-deployment-pipeline-golang-jenkins\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-20T15:00:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T01:45:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2082\" \/>\n\t<meta property=\"og:image:height\" content=\"452\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Create Continuous Deployment Pipelines with Golang &amp; Jenkins\",\"datePublished\":\"2018-02-20T15:00:23+00:00\",\"dateModified\":\"2025-06-14T01:45:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/\"},\"wordCount\":2131,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"cd\",\"ci\",\"Continuous Deployment\",\"continuous integration\",\"Jenkins\",\"NoSQL Database\",\"pipeline\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\",\"GoLang\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/\",\"name\":\"Continuous Deployment Pipelines with Golang + Jenkins\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-02-20T15:00:23+00:00\",\"dateModified\":\"2025-06-14T01:45:42+00:00\",\"description\":\"In this Couchbase post find out how to use Jenkins for a pipeline for a Golang application, enabling continuous integration and continuous deployment.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Continuous Deployment Pipelines with Golang &amp; Jenkins\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Continuous Deployment Pipelines with Golang + Jenkins","description":"In this Couchbase post find out how to use Jenkins for a pipeline for a Golang application, enabling continuous integration and continuous deployment.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/create-continuous-deployment-pipeline-golang-jenkins\/","og_locale":"ko_KR","og_type":"article","og_title":"Create Continuous Deployment Pipelines with Golang &amp; Jenkins","og_description":"In this Couchbase post find out how to use Jenkins for a pipeline for a Golang application, enabling continuous integration and continuous deployment.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/create-continuous-deployment-pipeline-golang-jenkins\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2018-02-20T15:00:23+00:00","article_modified_time":"2025-06-14T01:45:42+00:00","og_image":[{"width":2082,"height":452,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/02\/golang-jenkins-plugins.png","type":"image\/png"}],"author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"11\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Create Continuous Deployment Pipelines with Golang &amp; Jenkins","datePublished":"2018-02-20T15:00:23+00:00","dateModified":"2025-06-14T01:45:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/"},"wordCount":2131,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["cd","ci","Continuous Deployment","continuous integration","Jenkins","NoSQL Database","pipeline"],"articleSection":["Best Practices and Tutorials","Couchbase Server","GoLang"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/","url":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/","name":"Continuous Deployment Pipelines with Golang + Jenkins","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-02-20T15:00:23+00:00","dateModified":"2025-06-14T01:45:42+00:00","description":"In this Couchbase post find out how to use Jenkins for a pipeline for a Golang application, enabling continuous integration and continuous deployment.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/create-continuous-deployment-pipeline-golang-jenkins\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create Continuous Deployment Pipelines with Golang &amp; Jenkins"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, \uac1c\ubc1c\uc790 \uc639\ud638\uc790, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","first_name":"Nic","last_name":"Raboy","user_url":"https:\/\/www.thepolyglotdeveloper.com","author_category":"","description":"\ub2c9 \ub77c\ubcf4\uc774\ub294 \ucd5c\uc2e0 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c \uae30\uc220\uc744 \uc639\ud638\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. \uadf8\ub294 Java, JavaScript, Golang \ubc0f Angular, NativeScript, Apache Cordova\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \ub300\ud55c \uacbd\ud5d8\uc774 \uc788\uc2b5\ub2c8\ub2e4. Nic\uc740 \uc6f9 \ubc0f \ubaa8\ubc14\uc77c \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\ub3c4\ub85d \uc790\uc2e0\uc758 \uac1c\ubc1c \uacbd\ud5d8\uc5d0 \ub300\ud574 \uae00\uc744 \uc4f0\uace0 \uc788\uc2b5\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4616","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=4616"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/4616\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=4616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=4616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=4616"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=4616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}