<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>포시코딩</title>
    <link>https://4sii.tistory.com/</link>
    <description>https://github.com/cchoseonghun</description>
    <language>ko</language>
    <pubDate>Sat, 20 Jun 2026 00:14:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>포시</managingEditor>
    <image>
      <title>포시코딩</title>
      <url>https://tistory1.daumcdn.net/tistory/2920246/attach/d568679754754c86ad5486b87069c758</url>
      <link>https://4sii.tistory.com</link>
    </image>
    <item>
      <title>Integrate Bitbucket &amp;amp; Jenkins</title>
      <link>https://4sii.tistory.com/706</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/@mustafaburakaydiin/integrate-bitbucket-jenkins-58f383f70ead&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://medium.com/@mustafaburakaydiin/integrate-bitbucket-jenkins-58f383f70ead&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717978980516&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Integrate Bitbucket &amp;amp; Jenkins&quot; data-og-description=&quot;The situation we will discuss in this article is the automatic update and recompilation of your project on the server when you push changes&amp;hellip;&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/@mustafaburakaydiin/integrate-bitbucket-jenkins-58f383f70ead&quot; data-og-url=&quot;https://medium.com/@mustafaburakaydiin/integrate-bitbucket-jenkins-58f383f70ead&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cVS6K6/hyWlhDgvZa/w3hOonqPDaxWelkK6CuGq1/img.png?width=1200&amp;amp;height=602&amp;amp;face=0_0_1200_602&quot;&gt;&lt;a href=&quot;https://medium.com/@mustafaburakaydiin/integrate-bitbucket-jenkins-58f383f70ead&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/@mustafaburakaydiin/integrate-bitbucket-jenkins-58f383f70ead&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cVS6K6/hyWlhDgvZa/w3hOonqPDaxWelkK6CuGq1/img.png?width=1200&amp;amp;height=602&amp;amp;face=0_0_1200_602');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Integrate Bitbucket &amp;amp; Jenkins&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The situation we will discuss in this article is the automatic update and recompilation of your project on the server when you push changes&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github가 익숙하다면 아래 링크에서 연습 후 하면 이해가 빠를것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@doyuni/Jenkins-NAVER-Cloud-Platform-Docker로-CICD-무중단-배포-환경-구축하기-1편-khk4w6hrm0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@doyuni/Jenkins-NAVER-Cloud-Platform-Docker로-CICD-무중단-배포-환경-구축하기-1편-khk4w6hrm0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717979009541&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Jenkins, NAVER Cloud Platform, Docker로 CI/CD 무중단 배포 환경 구축하기 - 1편&quot; data-og-description=&quot;이번 내용은 필자가 프로젝트를 진행하면서 처음으로 DevOps를 맡으면서 꼭 공유 하겠다고 마음 먹고 작성하였다. CI/CD란? CI(Continuous Integration) 지속적인 통합을 의미한다. 이는 개발자를 위한 자&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@doyuni/Jenkins-NAVER-Cloud-Platform-Docker로-CICD-무중단-배포-환경-구축하기-1편-khk4w6hrm0&quot; data-og-url=&quot;https://velog.io/@doyuni/Jenkins-NAVER-Cloud-Platform-Docker로-CICD-무중단-배포-환경-구축하기-1편-khk4w6hrm0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bd0IAN/hyWg2OvTZV/2luBjnKhYbKTsTPesmQkuk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://velog.io/@doyuni/Jenkins-NAVER-Cloud-Platform-Docker로-CICD-무중단-배포-환경-구축하기-1편-khk4w6hrm0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@doyuni/Jenkins-NAVER-Cloud-Platform-Docker로-CICD-무중단-배포-환경-구축하기-1편-khk4w6hrm0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bd0IAN/hyWg2OvTZV/2luBjnKhYbKTsTPesmQkuk/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Jenkins, NAVER Cloud Platform, Docker로 CI/CD 무중단 배포 환경 구축하기 - 1편&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 내용은 필자가 프로젝트를 진행하면서 처음으로 DevOps를 맡으면서 꼭 공유 하겠다고 마음 먹고 작성하였다. CI/CD란? CI(Continuous Integration) 지속적인 통합을 의미한다. 이는 개발자를 위한 자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;a6d8&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;To explain these steps more clearly, I will break them down into 9 sections and demonstrate them step by step.&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;67a1&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Creating a Webhook on Bitbucket&lt;/li&gt;
&lt;li id=&quot;922d&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Creating Bitbucket password&lt;/li&gt;
&lt;li id=&quot;afdb&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Creating SSH Key&lt;/li&gt;
&lt;li id=&quot;66ae&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Jenkins installation with Docker&lt;/li&gt;
&lt;li id=&quot;b4eb&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Jenkins Plugins&lt;/li&gt;
&lt;li id=&quot;e95b&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Creating Jenkins Global Credentials&lt;/li&gt;
&lt;li id=&quot;fe9f&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Jenkins Configuration&lt;/li&gt;
&lt;li id=&quot;92b2&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;SSH Servers&lt;/li&gt;
&lt;li id=&quot;f415&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Creating Jenkins Project&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;cf87&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;1. Creating a Webhook Bitbucket&lt;/h2&gt;
&lt;p id=&quot;74f2&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;After creating the repository, when you go to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Repository / Webhooks&lt;span&gt;&amp;nbsp;&lt;/span&gt;section, you create a webhook as follows.&lt;/p&gt;
&lt;p id=&quot;5564&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Title&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;: You can give any title (exp: jenkins-webhook)&lt;/p&gt;
&lt;p id=&quot;012d&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;URL :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;http://jenkinsserveripadress:jenkinsPort/bitbucket-hook/&quot;&gt;http://JenkinsServerIpAdress:jenkinsPort/bitbucket-hook/&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BprSL/btsHTjh4ErB/P9v3IkmF7xBPYVaFN1zwSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BprSL/btsHTjh4ErB/P9v3IkmF7xBPYVaFN1zwSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BprSL/btsHTjh4ErB/P9v3IkmF7xBPYVaFN1zwSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBprSL%2FbtsHTjh4ErB%2FP9v3IkmF7xBPYVaFN1zwSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;352&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
Bitbucket Webhooks&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;5265&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2. Creating a Password on Bitbucket&lt;/h2&gt;
&lt;p id=&quot;01fe&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;We create a password to access the private repository. To do this, navigate to&lt;span&gt;&amp;nbsp;&lt;/span&gt;Personal Bitbucket Settings / App passwords.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPoRgD/btsHRNLReM5/62OutELcffWWwVC3cw1j0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPoRgD/btsHRNLReM5/62OutELcffWWwVC3cw1j0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPoRgD/btsHRNLReM5/62OutELcffWWwVC3cw1j0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPoRgD%2FbtsHRNLReM5%2F62OutELcffWWwVC3cw1j0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;321&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
Bitbucket Password&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;e1ce&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. Creating SSH Key&lt;/b&gt;&lt;/h2&gt;
&lt;p id=&quot;c41f&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;We need to connect to our server where our projects will run via SSH as the root user. If you don&amp;rsquo;t know how to connect as root, you can follow the steps in&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.liquidweb.com/kb/enable-root-login-via-ssh/&quot;&gt;this link&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to complete your configurations.&lt;/p&gt;
&lt;p id=&quot;8bed&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;We are creating SSH keys.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #f9f9f9; color: #242424;&quot;&gt;&lt;code&gt;ssh-keygen -t rsa -b 2048&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;2fbb&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;We navigate to the directory where our SSH keys are generated.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;background-color: #f9f9f9; color: #242424;&quot;&gt;&lt;code&gt;cd /root/.ssh&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;182d&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Copy the SSH key we created into the&lt;span&gt;&amp;nbsp;&lt;/span&gt;authorized_keys&lt;span&gt;&amp;nbsp;&lt;/span&gt;file.&lt;/p&gt;
&lt;pre class=&quot;css&quot; style=&quot;background-color: #f9f9f9; color: #242424;&quot;&gt;&lt;code&gt;cat id_rsa.pub &amp;gt; authorized_keys&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;5dfd&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;View and save your public key as shown below. We will use it when configuring the server on Jenkins.&lt;/p&gt;
&lt;pre class=&quot;matlab&quot; style=&quot;background-color: #f9f9f9; color: #242424;&quot;&gt;&lt;code&gt;cat id_rsa&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;6d32&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;4. Jenkins installation with Docker&lt;/h2&gt;
&lt;p id=&quot;85a6&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Make sure Docker Engine is installed on your server, and then run this command.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #f9f9f9; color: #242424;&quot;&gt;&lt;code&gt;docker run -p 8080:8080 -p 50000:50000 --restart=on-failure -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-jdk17&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;59f7&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Once Jenkins starts running, you will see a password in the console. Log in with that password and complete the custom installation.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;e2ea&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;5. Jenkins Plugins&lt;/h2&gt;
&lt;p id=&quot;44ec&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;To install the required plugins for Bitbucket and server configurations, go to&lt;span&gt;&amp;nbsp;&lt;/span&gt;Dashboard/Manage Jenkins/Plugins/Available plugins/&lt;span&gt;&amp;nbsp;&lt;/span&gt;and add the following plugins.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;2796&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Bitbucket&lt;/li&gt;
&lt;li id=&quot;d153&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;SSH Server&lt;/li&gt;
&lt;li id=&quot;b5ae&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;SSH Plugin&lt;/li&gt;
&lt;li id=&quot;71b1&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;SSH Credentials Plugin&lt;/li&gt;
&lt;li id=&quot;5906&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;SSH Build Agents Plugin&lt;/li&gt;
&lt;li id=&quot;8de8&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Publish Over SSH&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;3476&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;6. Creating Jenkins Global Credentials&lt;/h2&gt;
&lt;p id=&quot;abfb&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Navigate to&lt;span&gt;&amp;nbsp;&lt;/span&gt;Dashboard / Manage Jenkins / Credentials / System / Global credentials (unrestricted)&lt;span&gt;&amp;nbsp;&lt;/span&gt;and create credentials.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;59df&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;b&gt;Username :&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Bitbucket Username&lt;/li&gt;
&lt;li id=&quot;24a7&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;b&gt;Password:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;In the second step, enter the password you created on Bitbucket.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;686&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4ocps/btsHS7oDVZa/ejgBwKpkn30NJBXi9Wk7r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4ocps/btsHS7oDVZa/ejgBwKpkn30NJBXi9Wk7r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4ocps/btsHS7oDVZa/ejgBwKpkn30NJBXi9Wk7r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4ocps%2FbtsHS7oDVZa%2FejgBwKpkn30NJBXi9Wk7r1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;343&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
Create Credentials&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;bc7b&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;7. Jenkins Configuration&lt;/h2&gt;
&lt;p id=&quot;fec7&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Go to&lt;span&gt;&amp;nbsp;&lt;/span&gt;Dashboard / Manage Jenkins / System,&lt;/p&gt;
&lt;p id=&quot;88cb&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Key:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;In the third step, write the key from the&lt;span&gt;&amp;nbsp;&lt;/span&gt;id_rsa&lt;span&gt;&amp;nbsp;&lt;/span&gt;you created.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbNKTh/btsHROYgZi5/Uroe902xKwwOxI9dO2b6t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbNKTh/btsHROYgZi5/Uroe902xKwwOxI9dO2b6t0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbNKTh/btsHROYgZi5/Uroe902xKwwOxI9dO2b6t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbNKTh%2FbtsHROYgZi5%2FUroe902xKwwOxI9dO2b6t0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;357&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p id=&quot;b29a&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8. SSH Servers ;&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;6f60&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Name:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ServerName.&lt;/p&gt;
&lt;p id=&quot;d38f&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Hostname:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Server Ip Adress.&lt;/p&gt;
&lt;p id=&quot;b917&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Username:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;SSH connection username (root).&lt;/p&gt;
&lt;p id=&quot;80d6&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Remote Directory:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;The file directory where the files in the Bitbucket Repo are copied.&lt;/p&gt;
&lt;p id=&quot;3134&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Afterward, click on the Advanced option and go to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Use password authentication, or use a different key&lt;span&gt;&amp;nbsp;&lt;/span&gt;section:&lt;/p&gt;
&lt;p id=&quot;ca59&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Passphrase / Password: Enter the SSH connection password.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;725&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgbOAk/btsHSBXW9Wk/lv3rcFlEpLWDknOLNOdBA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgbOAk/btsHSBXW9Wk/lv3rcFlEpLWDknOLNOdBA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgbOAk/btsHSBXW9Wk/lv3rcFlEpLWDknOLNOdBA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgbOAk%2FbtsHSBXW9Wk%2Flv3rcFlEpLWDknOLNOdBA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;363&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;725&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 id=&quot;9932&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;9. Creating Jenkins Project&lt;/h2&gt;
&lt;p id=&quot;8507&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;First, we are creating a Jenkins project&lt;span&gt;&amp;nbsp;&lt;/span&gt;Dashboard / New Item / Freestyle Project&lt;/p&gt;
&lt;p id=&quot;ac41&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Next, click on the Git option under&lt;span&gt;&amp;nbsp;&lt;/span&gt;Source Code Management&lt;span&gt;&amp;nbsp;&lt;/span&gt;and fill it out as follows.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m6sEk/btsHTgy0Ptp/rOsGrPWEUlUouZ9KIgIqM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m6sEk/btsHTgy0Ptp/rOsGrPWEUlUouZ9KIgIqM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m6sEk/btsHTgy0Ptp/rOsGrPWEUlUouZ9KIgIqM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm6sEk%2FbtsHTgy0Ptp%2FrOsGrPWEUlUouZ9KIgIqM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;419&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;787&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
Source Code Management
&lt;p id=&quot;97ee&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Under the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Build Triggers&lt;span&gt;&amp;nbsp;&lt;/span&gt;tab, click on the option&lt;span&gt;&amp;nbsp;&lt;/span&gt;Build when a change is bushed to Bitbucket&lt;span&gt;&amp;nbsp;&lt;/span&gt;and provide the .git extension link of your repository.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Ythy/btsHSoEDmr6/wvDJg0HcwHM9tPNI4PNLM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Ythy/btsHSoEDmr6/wvDJg0HcwHM9tPNI4PNLM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Ythy/btsHSoEDmr6/wvDJg0HcwHM9tPNI4PNLM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Ythy%2FbtsHSoEDmr6%2FwvDJg0HcwHM9tPNI4PNLM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;217&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
Build Triggers
&lt;p id=&quot;69f4&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;In the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Build Stepssection, select the option&lt;span&gt;&amp;nbsp;&lt;/span&gt;Send files or execute commands over SSHand complete your configurations.&lt;/p&gt;
&lt;p id=&quot;2816&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Name:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;In step 8, select the name of the SSH server you created.&lt;/p&gt;
&lt;p id=&quot;699e&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Source Files:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;To retrieve all files in the repository, use the &amp;lsquo;**/*&amp;rsquo; command.&lt;/p&gt;
&lt;p id=&quot;1775&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Exec Command:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;You can run any Bash script you want.&lt;/p&gt;
&lt;p id=&quot;04dc&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Attention:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;Don&amp;rsquo;t forget to include #!/bin/bash at the beginning to execute a Bash script.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1305&quot; data-origin-height=&quot;811&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5xB2p/btsHR98NknP/07wkgc9FS1nUkiYN80o2tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5xB2p/btsHR98NknP/07wkgc9FS1nUkiYN80o2tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5xB2p/btsHR98NknP/07wkgc9FS1nUkiYN80o2tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5xB2p%2FbtsHR98NknP%2F07wkgc9FS1nUkiYN80o2tK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;436&quot; data-origin-width=&quot;1305&quot; data-origin-height=&quot;811&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
Build Steps
&lt;p id=&quot;e944&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;After saving, when you commit and push to the designated branch, your repository will be updated on the server and will run along with the specified Bash command.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/706</guid>
      <comments>https://4sii.tistory.com/706#entry706comment</comments>
      <pubDate>Sat, 8 Jun 2024 18:33:50 +0900</pubDate>
    </item>
    <item>
      <title>[NCP] Object Storage 접속 &amp;amp; CORS 관련 세팅</title>
      <link>https://4sii.tistory.com/705</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/how-to-access-using-aws-cli/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.3rdeyesys.com/docs/storage/object-storage/how-to-access-using-aws-cli/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715913095033&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;AWS CLI 버전 2를 이용한 Object Storage 접속 방법&quot; data-og-description=&quot;AWS CLI 버전 2를 설치하고 Ncloud(네이버 클라우드) Object Storage에 접속하는 방법입니다&quot; data-og-host=&quot;docs.3rdeyesys.com&quot; data-og-source-url=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/how-to-access-using-aws-cli/&quot; data-og-url=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/how-to-access-using-aws-cli/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dRN6lO/hyV6hYvZ0C/k8G0Exrli1e5KM0fBjXhkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bVZzeA/hyV6iXrKpw/5c8gkKobQ4zPB58xNtGXp1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/chfZID/hyV6eU2BG7/hMcXsNDNMV9QbfgbkMJ9KK/img.png?width=840&amp;amp;height=436&amp;amp;face=0_0_840_436&quot;&gt;&lt;a href=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/how-to-access-using-aws-cli/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/how-to-access-using-aws-cli/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dRN6lO/hyV6hYvZ0C/k8G0Exrli1e5KM0fBjXhkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bVZzeA/hyV6iXrKpw/5c8gkKobQ4zPB58xNtGXp1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/chfZID/hyV6eU2BG7/hMcXsNDNMV9QbfgbkMJ9KK/img.png?width=840&amp;amp;height=436&amp;amp;face=0_0_840_436');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AWS CLI 버전 2를 이용한 Object Storage 접속 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AWS CLI 버전 2를 설치하고 Ncloud(네이버 클라우드) Object Storage에 접속하는 방법입니다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.3rdeyesys.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/cors/setting-cors-on-bucket/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.3rdeyesys.com/docs/storage/object-storage/cors/setting-cors-on-bucket/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715913140892&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Object Storage Bucket에 CORS 설정하기&quot; data-og-description=&quot;Ncloud(네이버 클라우드)의 Object Storage Bucket에 CORS를 설정하는 방법입니다&quot; data-og-host=&quot;docs.3rdeyesys.com&quot; data-og-source-url=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/cors/setting-cors-on-bucket/&quot; data-og-url=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/cors/setting-cors-on-bucket/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nzlzB/hyV6bcVl87/ccog1SqZrJoTgtmk9tOz51/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/biXOtT/hyV6enbEQZ/A72cOXm4AEKSYQOebqkDGK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/vPpUc/hyV59sEU8M/f5BPx865xkk58aSMy0qt50/img.png?width=845&amp;amp;height=318&amp;amp;face=0_0_845_318&quot;&gt;&lt;a href=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/cors/setting-cors-on-bucket/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.3rdeyesys.com/docs/storage/object-storage/cors/setting-cors-on-bucket/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nzlzB/hyV6bcVl87/ccog1SqZrJoTgtmk9tOz51/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/biXOtT/hyV6enbEQZ/A72cOXm4AEKSYQOebqkDGK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/vPpUc/hyV59sEU8M/f5BPx865xkk58aSMy0qt50/img.png?width=845&amp;amp;height=318&amp;amp;face=0_0_845_318');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Object Storage Bucket에 CORS 설정하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ncloud(네이버 클라우드)의 Object Storage Bucket에 CORS를 설정하는 방법입니다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.3rdeyesys.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/705</guid>
      <comments>https://4sii.tistory.com/705#entry705comment</comments>
      <pubDate>Fri, 17 May 2024 11:32:28 +0900</pubDate>
    </item>
    <item>
      <title>[Mac] Python 버전 업데이트</title>
      <link>https://4sii.tistory.com/704</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sorbonne.tistory.com/entry/%EB%A7%A5%EB%B6%81-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%90%EB%9F%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sorbonne.tistory.com/entry/%EB%A7%A5%EB%B6%81-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%90%EB%9F%AC&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715911541752&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;맥북 파이썬 버전 확인 + 업데이트 + 업데이트 에러&quot; data-og-description=&quot;맥북 파이썬 버전을 업데이트 해보자. 먼저, 현재 깔린 파이썬 버전을 확인하려면 1. Command + space 를 클릭해 terminal을 입력한다. 2. 아래 코드를 입력한다. python -V 3. 아래와 같이 현재 깔린 버전이 &quot; data-og-host=&quot;sorbonne.tistory.com&quot; data-og-source-url=&quot;https://sorbonne.tistory.com/entry/%EB%A7%A5%EB%B6%81-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%90%EB%9F%AC&quot; data-og-url=&quot;https://sorbonne.tistory.com/entry/%EB%A7%A5%EB%B6%81-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%90%EB%9F%AC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dio4cl/hyV6iC7H23/O918yG3HrDav2hg1ihuaAK/img.png?width=563&amp;amp;height=395&amp;amp;face=0_0_563_395,https://scrap.kakaocdn.net/dn/bZAAET/hyV6hxrsYt/m74dEmXKseUVydPzCdcKv1/img.png?width=563&amp;amp;height=395&amp;amp;face=0_0_563_395,https://scrap.kakaocdn.net/dn/bjVEvA/hyV58UOGXb/beRIggwQ8mFXCSxN4KysWK/img.png?width=564&amp;amp;height=393&amp;amp;face=0_0_564_393&quot;&gt;&lt;a href=&quot;https://sorbonne.tistory.com/entry/%EB%A7%A5%EB%B6%81-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%90%EB%9F%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sorbonne.tistory.com/entry/%EB%A7%A5%EB%B6%81-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B2%84%EC%A0%84-%ED%99%95%EC%9D%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%97%90%EB%9F%AC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dio4cl/hyV6iC7H23/O918yG3HrDav2hg1ihuaAK/img.png?width=563&amp;amp;height=395&amp;amp;face=0_0_563_395,https://scrap.kakaocdn.net/dn/bZAAET/hyV6hxrsYt/m74dEmXKseUVydPzCdcKv1/img.png?width=563&amp;amp;height=395&amp;amp;face=0_0_563_395,https://scrap.kakaocdn.net/dn/bjVEvA/hyV58UOGXb/beRIggwQ8mFXCSxN4KysWK/img.png?width=564&amp;amp;height=393&amp;amp;face=0_0_564_393');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;맥북 파이썬 버전 확인 + 업데이트 + 업데이트 에러&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;맥북 파이썬 버전을 업데이트 해보자. 먼저, 현재 깔린 파이썬 버전을 확인하려면 1. Command + space 를 클릭해 terminal을 입력한다. 2. 아래 코드를 입력한다. python -V 3. 아래와 같이 현재 깔린 버전이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sorbonne.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 깔꼼&lt;/p&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/704</guid>
      <comments>https://4sii.tistory.com/704#entry704comment</comments>
      <pubDate>Fri, 17 May 2024 11:05:46 +0900</pubDate>
    </item>
    <item>
      <title>How to Set Up Ubuntu 22.04 VM on ESXi 8</title>
      <link>https://4sii.tistory.com/703</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://it-svr.com/esxi-ubuntu-22-04-lts-server-install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://it-svr.com/esxi-ubuntu-22-04-lts-server-install/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715645475017&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ESXi에 Ubuntu 22.04 LTS Server 설치하기.&quot; data-og-description=&quot;안녕하세요. 달소입니다. 이번글도 Ubuntu 설치글입니다 ㅎㅎ Desktop버전과 Server의 글을 따로적는이유는 설치 과정에서 몇가지 다른 부분이 있어서 입니다. ex) 파티션 설정 + 네트워크 설정 등등 &quot; data-og-host=&quot;it-svr.com&quot; data-og-source-url=&quot;https://it-svr.com/esxi-ubuntu-22-04-lts-server-install/&quot; data-og-url=&quot;https://it-svr.com/esxi-ubuntu-22-04-lts-server-install/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eoPngM/hyV2tZRP4e/c9XKh5bJEh0gkWrWWUrTp0/img.png?width=701&amp;amp;height=538&amp;amp;face=0_0_701_538,https://scrap.kakaocdn.net/dn/bDw8yM/hyV6eteuzI/0ldUCvMp5DgJGdiIUH7t51/img.png?width=701&amp;amp;height=538&amp;amp;face=0_0_701_538,https://scrap.kakaocdn.net/dn/gEXJg/hyV2x2h3kO/7gtMQEc9fd2kSUgYzPRxn0/img.png?width=670&amp;amp;height=590&amp;amp;face=0_0_670_590&quot;&gt;&lt;a href=&quot;https://it-svr.com/esxi-ubuntu-22-04-lts-server-install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://it-svr.com/esxi-ubuntu-22-04-lts-server-install/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eoPngM/hyV2tZRP4e/c9XKh5bJEh0gkWrWWUrTp0/img.png?width=701&amp;amp;height=538&amp;amp;face=0_0_701_538,https://scrap.kakaocdn.net/dn/bDw8yM/hyV6eteuzI/0ldUCvMp5DgJGdiIUH7t51/img.png?width=701&amp;amp;height=538&amp;amp;face=0_0_701_538,https://scrap.kakaocdn.net/dn/gEXJg/hyV2x2h3kO/7gtMQEc9fd2kSUgYzPRxn0/img.png?width=670&amp;amp;height=590&amp;amp;face=0_0_670_590');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ESXi에 Ubuntu 22.04 LTS Server 설치하기.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 달소입니다. 이번글도 Ubuntu 설치글입니다 ㅎㅎ Desktop버전과 Server의 글을 따로적는이유는 설치 과정에서 몇가지 다른 부분이 있어서 입니다. ex) 파티션 설정 + 네트워크 설정 등등&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;it-svr.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;change static ip&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/truelifer/222228709537&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.naver.com/truelifer/222228709537&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715646326117&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Ubuntu 20.04 LTS Server wifi 설정 &amp;amp; 고정 IP 설정&quot; data-og-description=&quot;아래 내용 추가 추가 후 적용 후 확인 referenced from https://vanilet.tistory.com/16 referenced from h...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/truelifer/222228709537&quot; data-og-url=&quot;https://blog.naver.com/truelifer/222228709537&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1A3MW/hyV6ih6v5i/OFtU4cZnOPDbmlMuHZq8S1/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270&quot;&gt;&lt;a href=&quot;https://blog.naver.com/truelifer/222228709537&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/truelifer/222228709537&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1A3MW/hyV6ih6v5i/OFtU4cZnOPDbmlMuHZq8S1/img.png?width=270&amp;amp;height=270&amp;amp;face=0_0_270_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu 20.04 LTS Server wifi 설정 &amp;amp; 고정 IP 설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;아래 내용 추가 추가 후 적용 후 확인 referenced from https://vanilet.tistory.com/16 referenced from h...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;install docker &amp;amp; docker-compose&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://zhfvkq.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://zhfvkq.tistory.com/41&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715649189847&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Ubuntu] docker 및 docker-compose 설치&quot; data-og-description=&quot;도커(docker) - 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트 ubuntu 접속 ssh -i [my-key].pem ubuntu@[퍼블릭IPv4주소] 1. 패키지 리스트 &quot; data-og-host=&quot;zhfvkq.tistory.com&quot; data-og-source-url=&quot;https://zhfvkq.tistory.com/41&quot; data-og-url=&quot;https://zhfvkq.tistory.com/41&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/U3AUl/hyV6biZdZS/eLzlQHfJ8hChK6uUvcwtKk/img.png?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/feQUU/hyV6aqQX1p/Mk0JCqeFBauRWAtvWqzcok/img.png?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/ZZwoX/hyV2Bczp3n/4nKH93bLx0FOwz5huUkxq1/img.png?width=1256&amp;amp;height=424&amp;amp;face=0_0_1256_424&quot;&gt;&lt;a href=&quot;https://zhfvkq.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://zhfvkq.tistory.com/41&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/U3AUl/hyV6biZdZS/eLzlQHfJ8hChK6uUvcwtKk/img.png?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/feQUU/hyV6aqQX1p/Mk0JCqeFBauRWAtvWqzcok/img.png?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/ZZwoX/hyV2Bczp3n/4nKH93bLx0FOwz5huUkxq1/img.png?width=1256&amp;amp;height=424&amp;amp;face=0_0_1256_424');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Ubuntu] docker 및 docker-compose 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;도커(docker) - 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트 ubuntu 접속 ssh -i [my-key].pem ubuntu@[퍼블릭IPv4주소] 1. 패키지 리스트&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;zhfvkq.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 블로그 내용 중 docker-compose는 최신 버전으로 설치하려 할 경우 제대로 설치가 안될텐데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 설치된 docker-compose를 vim으로 까보면 Not Found가 적혀있는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 내용을 보면 이유와 다른 설치 방법이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/docker/compose/issues/8445&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/docker/compose/issues/8445&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715649999674&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;/usr/local/bin/docker-compose: line 1: Not: command not found &amp;middot; Issue #8445 &amp;middot; docker/compose&quot; data-og-description=&quot;Hey guys, I want to use docker-compose on my raspberrypi 4 with Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1041-raspi aarch64). I go through the official docker compose installation guide (https://docs.do...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/docker/compose/issues/8445&quot; data-og-url=&quot;https://github.com/docker/compose/issues/8445&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cRlRsT/hyV2rA04v9/VfGH49KiiuYmgnCyAKPxH1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/docker/compose/issues/8445&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/docker/compose/issues/8445&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cRlRsT/hyV2rA04v9/VfGH49KiiuYmgnCyAKPxH1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;/usr/local/bin/docker-compose: line 1: Not: command not found &amp;middot; Issue #8445 &amp;middot; docker/compose&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hey guys, I want to use docker-compose on my raspberrypi 4 with Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1041-raspi aarch64). I go through the official docker compose installation guide (https://docs.do...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/703</guid>
      <comments>https://4sii.tistory.com/703#entry703comment</comments>
      <pubDate>Tue, 14 May 2024 09:11:29 +0900</pubDate>
    </item>
    <item>
      <title>How to Set Up Windows 11 VM on ESXi 8</title>
      <link>https://4sii.tistory.com/702</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;How to install&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/rSLAN74-iK4?si=RY59CzMDvr6QjUsj&quot;&gt;https://youtu.be/rSLAN74-iK4?si=RY59CzMDvr6QjUsj&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=rSLAN74-iK4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/brKD6z/hyV2AxQX46/FWtb6Eyzgk8tzxHdDqPFY0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;ESXI 에 윈도우 11 설치하기&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/rSLAN74-iK4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ISO Download&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.microsoft.com/ko-kr/software-download/windows11&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.microsoft.com/ko-kr/software-download/windows11&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/702</guid>
      <comments>https://4sii.tistory.com/702#entry702comment</comments>
      <pubDate>Mon, 13 May 2024 16:12:13 +0900</pubDate>
    </item>
    <item>
      <title>bitbucket, jenkins</title>
      <link>https://4sii.tistory.com/701</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/Jenkins%EB%A1%9C-%EC%9E%90%EB%8F%99%ED%99%94-%EB%B0%B0%ED%8F%AC-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0Bitbucket-EC2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://devbksheen.tistory.com/entry/Jenkins%EB%A1%9C-%EC%9E%90%EB%8F%99%ED%99%94-%EB%B0%B0%ED%8F%AC-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0Bitbucket-EC2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714094631922&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Jenkins를 이용한 프로젝트 자동 배포하기(Bitbucket, EC2)&quot; data-og-description=&quot;보통 Blue/Green 자동화 배포 파이프라인을 구축할 때 Jenkins를 많이 이용한다. Aws에서 제공하는 Code Pipeline을 사용해 구축할 수 도 있지만 배포할 때마다 비용이 발생하므로, 자주 배포가 일어난다&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/Jenkins%EB%A1%9C-%EC%9E%90%EB%8F%99%ED%99%94-%EB%B0%B0%ED%8F%AC-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0Bitbucket-EC2&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/Jenkins%EB%A1%9C-%EC%9E%90%EB%8F%99%ED%99%94-%EB%B0%B0%ED%8F%AC-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0Bitbucket-EC2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqX3bR/hyVSUwUx9D/eVJmREFxvTTaihfaeGF9E1/img.png?width=277&amp;amp;height=182&amp;amp;face=132_18_165_54,https://scrap.kakaocdn.net/dn/bvNULU/hyVVy6M1De/ZLXUV5OE3ciwVYwtQppTwk/img.png?width=277&amp;amp;height=182&amp;amp;face=132_18_165_54,https://scrap.kakaocdn.net/dn/dGBQlK/hyVVFrkhga/YUFoZH9g011c5WPBjyriUK/img.png?width=1001&amp;amp;height=521&amp;amp;face=0_0_1001_521&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/Jenkins%EB%A1%9C-%EC%9E%90%EB%8F%99%ED%99%94-%EB%B0%B0%ED%8F%AC-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0Bitbucket-EC2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/Jenkins%EB%A1%9C-%EC%9E%90%EB%8F%99%ED%99%94-%EB%B0%B0%ED%8F%AC-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0Bitbucket-EC2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqX3bR/hyVSUwUx9D/eVJmREFxvTTaihfaeGF9E1/img.png?width=277&amp;amp;height=182&amp;amp;face=132_18_165_54,https://scrap.kakaocdn.net/dn/bvNULU/hyVVy6M1De/ZLXUV5OE3ciwVYwtQppTwk/img.png?width=277&amp;amp;height=182&amp;amp;face=132_18_165_54,https://scrap.kakaocdn.net/dn/dGBQlK/hyVVFrkhga/YUFoZH9g011c5WPBjyriUK/img.png?width=1001&amp;amp;height=521&amp;amp;face=0_0_1001_521');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Jenkins를 이용한 프로젝트 자동 배포하기(Bitbucket, EC2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;보통 Blue/Green 자동화 배포 파이프라인을 구축할 때 Jenkins를 많이 이용한다. Aws에서 제공하는 Code Pipeline을 사용해 구축할 수 도 있지만 배포할 때마다 비용이 발생하므로, 자주 배포가 일어난다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1714094646918&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -itd --name jenkins -p 8090:8080 jenkins/jenkins:lts

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;plugin: Publish Over SSH&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bitbucket -&amp;gt; edit webhook -&amp;gt; url: jenkins server&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jenkins -&amp;gt; 시스템 설정 -&amp;gt; Publish over SSH -&amp;gt; private key 세팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH Servers&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; hostname: 배포할 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Item 생성 -&amp;gt; 소스 코드 관리 -&amp;gt; Git -&amp;gt; Repository URL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Send build artifacts over SSH&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Source files: 배포할 소스 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Remove: prefix: 제외할 파일 경로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Remote directory: 원격 서버 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Exec command: 실행할 명령어(보통 sh 실행)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 나중에 보려고 기록&lt;/p&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/701</guid>
      <comments>https://4sii.tistory.com/701#entry701comment</comments>
      <pubDate>Fri, 26 Apr 2024 10:30:17 +0900</pubDate>
    </item>
    <item>
      <title>rsync - 두 서버간 폴더 동기화</title>
      <link>https://4sii.tistory.com/700</link>
      <description>&lt;pre id=&quot;code_1714029814627&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# local pc -&amp;gt; remote pc
rsync -avzhP {from폴더} {username}@{server-address}:{to폴더}

# remote pc -&amp;gt; local pc
rsync -avzhP {username}@{server-address}:{from폴더} {to폴더}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 명령어 실행 후 비밀번호 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-a: 아카이브 모드. 파일 속성 및 디렉토리 구조를 보존하며 재귀적으로 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-v: 자세한 출력 모드. 복사하는 파일들에 대한 자세한 정보 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-z: 압축 사용. 데이터 전송 시 압축을 사용하여 대역폭을 절약&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-h: 사람이 읽기 쉬운 형식으로 출력. 파일 크기 등의 정보를 사람이 이해하기 쉬운 형태로 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-P: 진행률 표시. 파일 전송의 진행상황을 표시하고, 전송이 중단되었을 때 다시 시작할 수 있도록 전송이 완료된 파일은 삭제하지 않고 남김&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 비밀번호 입력 없이 진행되게 하는 방법은 따로 찾아보기&lt;/p&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/700</guid>
      <comments>https://4sii.tistory.com/700#entry700comment</comments>
      <pubDate>Thu, 25 Apr 2024 16:25:40 +0900</pubDate>
    </item>
    <item>
      <title>[MS][Teams] Incoming Webhook</title>
      <link>https://4sii.tistory.com/699</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;소개&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet&quot;&gt;https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710308565643&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Create an Incoming Webhook - Teams&quot; data-og-description=&quot;Create an Incoming Webhook to Teams app and post external requests to Teams. Remove Incoming Webhook. Sample code(C#, Node.js) to send card using Incoming Webhook.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet&quot; data-og-url=&quot;https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WoC0E/hyVAKziDPc/5t3oT6FiIjnbYCGjtpOn40/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bkPgBQ/hyVAI2yfvC/7pUjtcdFMFHlEKKF2LxCIK/img.png?width=650&amp;amp;height=540&amp;amp;face=0_0_650_540,https://scrap.kakaocdn.net/dn/dNX3X4/hyVAMRpx64/gEUEPSqsiKDEpSMADe68ck/img.png?width=800&amp;amp;height=270&amp;amp;face=0_0_800_270&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WoC0E/hyVAKziDPc/5t3oT6FiIjnbYCGjtpOn40/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bkPgBQ/hyVAI2yfvC/7pUjtcdFMFHlEKKF2LxCIK/img.png?width=650&amp;amp;height=540&amp;amp;face=0_0_650_540,https://scrap.kakaocdn.net/dn/dNX3X4/hyVAMRpx64/gEUEPSqsiKDEpSMADe68ck/img.png?width=800&amp;amp;height=270&amp;amp;face=0_0_800_270');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Create an Incoming Webhook - Teams&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Create an Incoming Webhook to Teams app and post external requests to Teams. Remove Incoming Webhook. Sample code(C#, Node.js) to send card using Incoming Webhook.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Example JSON&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1710308816322&quot; class=&quot;json&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;{
  &quot;@type&quot;: &quot;MessageCard&quot;,
  &quot;@context&quot;: &quot;http://schema.org/extensions&quot;,
  &quot;themeColor&quot;: &quot;d58200&quot;,
  &quot;title&quot;: &quot;title&quot;,
  &quot;text&quot;: &quot;text&quot;,
  &quot;potentialAction&quot;: [
    {
      &quot;@type&quot;: &quot;OpenUri&quot;,
      &quot;name&quot;: &quot;Name&quot;,
      &quot;targets&quot;: [
        {
          &quot;os&quot;: &quot;default&quot;,
          &quot;uri&quot;: &quot;https://www.example.com/&quot;
        }
      ]
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710308782836&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;type&quot;: &quot;message&quot;,
  &quot;attachments&quot;: [
    {
      &quot;contentType&quot;: &quot;application/vnd.microsoft.card.adaptive&quot;,
      &quot;contentUrl&quot;: null,
      &quot;content&quot;: {
        &quot;$schema&quot;: &quot;http://adaptivecards.io/schemas/adaptive-card.json&quot;,
        &quot;type&quot;: &quot;AdaptiveCard&quot;,
        &quot;version&quot;: &quot;1.2&quot;,
        &quot;body&quot;: [
          {
            &quot;type&quot;: &quot;TextBlock&quot;,
            &quot;text&quot;: &quot;For Samples and Templates, see [https://adaptivecards.io/samples](https://adaptivecards.io/samples)&quot;
          }
        ]
      }
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710308804291&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;type&quot;: &quot;message&quot;,
  &quot;attachments&quot;: [
    {
      &quot;contentType&quot;: &quot;application/vnd.microsoft.card.adaptive&quot;,
      &quot;content&quot;: {
        &quot;type&quot;: &quot;AdaptiveCard&quot;,
        &quot;version&quot;: &quot;1.4&quot;,
        &quot;body&quot;: [
          {
            &quot;type&quot;: &quot;TextBlock&quot;,
            &quot;text&quot;: &quot;Request sent by: Megan&quot;
          },
          {
            &quot;type&quot;: &quot;Image&quot;,
            &quot;url&quot;: &quot;https://c.s-microsoft.com/en-us/CMSImages/DesktopContent-04_UPDATED.png?version=43c80870-99dd-7fb1-48c0-59aced085ab6&quot;
          },
          {
            &quot;type&quot;: &quot;TextBlock&quot;,
            &quot;text&quot;: &quot;Sample image for Adaptive Card..&quot;
          }
        ]
      }
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Card Builder&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.teams.microsoft.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.teams.microsoft.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710308666810&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Developer Portal&quot; data-og-description=&quot;&quot; data-og-host=&quot;dev.teams.microsoft.com&quot; data-og-source-url=&quot;https://dev.teams.microsoft.com/&quot; data-og-url=&quot;https://dev.teams.microsoft.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.teams.microsoft.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.teams.microsoft.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Developer Portal&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.teams.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 만든 예시의 경우&lt;/p&gt;
&lt;pre id=&quot;code_1710308700583&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;type&quot;: &quot;message&quot;,
  &quot;attachments&quot;: [
    {
      &quot;contentType&quot;: &quot;application/vnd.microsoft.card.adaptive&quot;,
      &quot;contentUrl&quot;: null,
      &quot;content&quot;: // here
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만든 후 생성된 코드를 'here' 부분에 넣어 사용하면 작동한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://adaptivecards.io/samples/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://adaptivecards.io/samples/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710308679504&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Samples and Templates | Adaptive Cards&quot; data-og-description=&quot;Samples and Templates These samples are just a teaser of the type of cards you can create. Go ahead and tweak them to make any scenario possible! Important note about accessibility: In version 1.3 of the schema we introduced a label property on Inputs to i&quot; data-og-host=&quot;adaptivecards.io&quot; data-og-source-url=&quot;https://adaptivecards.io/samples/&quot; data-og-url=&quot;https://adaptivecards.io/samples/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://adaptivecards.io/samples/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://adaptivecards.io/samples/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Samples and Templates | Adaptive Cards&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Samples and Templates These samples are just a teaser of the type of cards you can create. Go ahead and tweak them to make any scenario possible! Important note about accessibility: In version 1.3 of the schema we introduced a label property on Inputs to i&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;adaptivecards.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;++&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 위 템플릿들로 만들어진 코멘트 남기기 등의 기능에 대해서 오류가 나는데 해당 기능은 파악중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/answers/questions/1329257/teams-incoming-webhook-response-bad-payload-receiv&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/en-us/answers/questions/1329257/teams-incoming-webhook-response-bad-payload-receiv&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards-and-task-modules&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards-and-task-modules&lt;/a&gt;&lt;/p&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/699</guid>
      <comments>https://4sii.tistory.com/699#entry699comment</comments>
      <pubDate>Wed, 13 Mar 2024 14:48:50 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 환경변수 설정, 해제</title>
      <link>https://4sii.tistory.com/698</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.leafcats.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.leafcats.com/201&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710229515251&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;리눅스 환경변수 설정 및 해제하기&quot; data-og-description=&quot;리눅스 bash 쉘에서 환경변수를 설정하고 해제하는 방법에 대한 정리이다. 1. 환경변수 임시 적용(export) $ export 환경변수명=값 예를들어 TOMCAT_HOME이라는 환경변수를 /usr/lib/tomcat/tomcat1.8/ 로 지정하&quot; data-og-host=&quot;www.leafcats.com&quot; data-og-source-url=&quot;https://www.leafcats.com/201&quot; data-og-url=&quot;https://www.leafcats.com/201&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bF8xtj/hyVxz0kKgT/W3paDOM3JL1Nb1dM5WvvP0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/UTspy/hyVxrOKlQC/pSBZHuDrlxm2nzgspT0Dk1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://www.leafcats.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.leafcats.com/201&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bF8xtj/hyVxz0kKgT/W3paDOM3JL1Nb1dM5WvvP0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/UTspy/hyVxrOKlQC/pSBZHuDrlxm2nzgspT0Dk1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 환경변수 설정 및 해제하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 bash 쉘에서 환경변수를 설정하고 해제하는 방법에 대한 정리이다. 1. 환경변수 임시 적용(export) $ export 환경변수명=값 예를들어 TOMCAT_HOME이라는 환경변수를 /usr/lib/tomcat/tomcat1.8/ 로 지정하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.leafcats.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 환경변수 임시 적용&lt;/p&gt;
&lt;pre id=&quot;code_1710229534501&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export 환경변수명=값&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 환경변수 적용 확인&lt;/p&gt;
&lt;pre id=&quot;code_1710229622403&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;env | grep 환경변수명&lt;/code&gt;&lt;/pre&gt;</description>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/698</guid>
      <comments>https://4sii.tistory.com/698#entry698comment</comments>
      <pubDate>Tue, 12 Mar 2024 16:47:05 +0900</pubDate>
    </item>
    <item>
      <title>[NestJS] How can I respond with a file and delete with interceptor</title>
      <link>https://4sii.tistory.com/693</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://4sii.tistory.com/691&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://4sii.tistory.com/691&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708996916534&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[NestJS] JSON to Excel&quot; data-og-description=&quot;npm install xlsx fs import * as fs from 'fs'; import * as XLSX from 'xlsx'; // ... 생략 jsonToExcel(res) { const originalJSON = { &amp;quot;AD&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;Andorra&amp;quot;, &amp;quot;phone&amp;quot;: &amp;quot;376&amp;quot;, &amp;quot;flag&amp;quot;: &amp;quot; &amp;quot; }, &amp;quot;AE&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;United Arab Emirates&amp;quot;, &amp;quot;phone&amp;quot;: &amp;quot;97&amp;quot;, &amp;quot;fla&quot; data-og-host=&quot;4sii.tistory.com&quot; data-og-source-url=&quot;https://4sii.tistory.com/691&quot; data-og-url=&quot;https://4sii.tistory.com/691&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/C2t8w/hyVqlOcJTc/NPAnlLzUTYDLwaSdMKq2ek/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ga8KM/hyVqnSM5I8/bhN6Tt7hPgGi1DxtKlxMd1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gZRgt/hyVqijDbST/T1neVYzKXK8AurFkkdDgI0/img.png?width=512&amp;amp;height=512&amp;amp;face=204_102_485_409&quot;&gt;&lt;a href=&quot;https://4sii.tistory.com/691&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://4sii.tistory.com/691&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/C2t8w/hyVqlOcJTc/NPAnlLzUTYDLwaSdMKq2ek/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/ga8KM/hyVqnSM5I8/bhN6Tt7hPgGi1DxtKlxMd1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gZRgt/hyVqijDbST/T1neVYzKXK8AurFkkdDgI0/img.png?width=512&amp;amp;height=512&amp;amp;face=204_102_485_409');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[NestJS] JSON to Excel&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;npm install xlsx fs import * as fs from 'fs'; import * as XLSX from 'xlsx'; // ... 생략 jsonToExcel(res) { const originalJSON = { &quot;AD&quot;: { &quot;name&quot;: &quot;Andorra&quot;, &quot;phone&quot;: &quot;376&quot;, &quot;flag&quot;: &quot; &quot; }, &quot;AE&quot;: { &quot;name&quot;: &quot;United Arab Emirates&quot;, &quot;phone&quot;: &quot;97&quot;, &quot;fla&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;4sii.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. DB에서 typeorm을 통해 데이터 stream 받기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 데이터 엑셀 파일로 임시 저장 (위 링크 참고)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 엑셀 파일 요청한 클라이언트로 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 전달 후 interceptor를 통해 서버에 저장된 임시 엑셀 파일 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 네 가지 과정에 대해 알아보겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;excel.service&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708998552610&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { Injectable } from '@nestjs/common';
import * as XLSX from 'xlsx';
import { join } from 'path';
import * as fs from 'fs';

@Injectable()
export class ExcelService {
  async createExcelFile(prefix: string, data: Array&amp;lt;string | Buffer&amp;gt;) {
    // 파일 작명
    const currentDate = new Date();
    const formattedDate = currentDate.toISOString().slice(0, 10).replace(/-/g, '');
    const filename = `${prefix}_${formattedDate}.xlsx`;

    // temp 임시 폴더 없다면 생성, 있다면 무시
    fs.mkdirSync(join(process.cwd(), `temp`), { recursive: true });
    const filePath = join(process.cwd(), `temp/${filename}`);

    // filePath 위치에 엑셀 다운로드
    const wb = XLSX.utils.book_new();
    const newWorksheet = XLSX.utils.json_to_sheet(data);
    XLSX.utils.book_append_sheet(wb, newWorksheet, 'Sheet1');
    const wbOptions: any = { bookType: 'xlsx', type: 'binary' };
    XLSX.writeFile(wb, filePath, wbOptions);
    
    return { filename, filePath };
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;target.service&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708999041787&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;async getTargetsByExcel() {
    // typeorm stream()을 통해 데이터 받기
    const queryStream = await this.targetRepository
      .createQueryBuilder('t')
      .select(*)
      .stream();

    let data: Array&amp;lt;string | Buffer&amp;gt; = [];

    await new Promise&amp;lt;void&amp;gt;((resolve, reject) =&amp;gt; {
      queryStream.on('data', (chunk) =&amp;gt; {
        // stream을 통해 받는 데이터 data array에 밀어넣기
        data.push(chunk);
      });

      queryStream.on('end', () =&amp;gt; {
        // stream 종료 시 resolve()
        resolve();
      });

      queryStream.on('error', (err) =&amp;gt; {
        reject(err);
      });
    });

    return this.excelService.createExcelFile('target', data);
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에선 stream으로 받는 데이터가 모두 받아진 후 엑셀로 만들기 때문에 굳이 stream을 쓸 필요가 없다고 생각한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;target.controller&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708999391528&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  @Get('excel')
  @UseInterceptors(ExcelFileCleanupInterceptor)
  async getTargetsByExcel(@Res() response: Response) {
    const { filename, filePath } = await this.targetService.getTargetsByExcel();
    const file = fs.createReadStream(filePath);
    
    // 파일 전달 후 interceptor에서 서버에 저장된 임시 엑셀 파일을 지우기 위해 filePath를 response.locals에 저장
    response.locals.filePathToDelete = filePath;

    // setHeader에서 세팅하는 filename이 client에서 다운로드 했을 때의 파일명이 된다.
    response.setHeader(
      'Content-Disposition',
      `attachment; filename=${filename}`,
    );

    return file.pipe(response);
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;excel.interceptor&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1708999501923&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { Injectable, NestInterceptor, ExecutionContext, CallHandler, } from '@nestjs/common';
import { Observable, tap } from 'rxjs';
import * as fs from 'fs';

@Injectable()
export class ExcelFileCleanupInterceptor implements NestInterceptor {
  async intercept(context: ExecutionContext, next: CallHandler): Promise&amp;lt;Observable&amp;lt;any&amp;gt;&amp;gt; {
  
    // nestjs의 생명 주기에서 request가 아닌 response에 대해서만 동작하게
    const response = context.switchToHttp().getResponse();
    
    const responseFinished = new Promise&amp;lt;void&amp;gt;((resolve) =&amp;gt; {
      response.once('finish', resolve);
    });

    return next.handle().pipe(
      tap(async () =&amp;gt; {
        // 위 responseFinished를 통해 controller의 return이 된 후 동작하게 만든다. 
        await responseFinished;

        const filePath = response.locals?.filePathToDelete;
        
        if (filePath) {
          try {
            // fs.unlinkSync를 통해 해당 위치의 파일 제거
            fs.unlinkSync(filePath);
          } catch (err) {
            console.error('Error deleting file:', err);
          }
        }
      }),
    );
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석으로 설명 다 달아놓음&lt;/p&gt;</description>
      <category>JavaScript</category>
      <author>포시</author>
      <guid isPermaLink="true">https://4sii.tistory.com/693</guid>
      <comments>https://4sii.tistory.com/693#entry693comment</comments>
      <pubDate>Tue, 27 Feb 2024 11:09:45 +0900</pubDate>
    </item>
  </channel>
</rss>